您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
在中文输入法中,将·自动替换成`,》替换成>,!替换成'* '(减少按键距离)
- // ==UserScript==
- // @name markdown helper
- // @namespace http://tampermonkey.net/
- // @version 0.6.1
- // @description 在中文输入法中,将·自动替换成`,》替换成>,!替换成'* '(减少按键距离)
- // @author 鹿之城
- // @match https://www.nowcoder.com/creation/write/*
- // @match https://maxiang.io/
- // @grant none
- // @license MIT
- // ==/UserScript==
- (function() {
- 'use strict';
- console.log('md专用转换脚本已加载');
- function getCaretPosition(element) {
- let caretOffset = 0;
- let doc = element.ownerDocument || element.document;
- let win = doc.defaultView || doc.parentWindow;
- let sel = win.getSelection();
- if (sel.rangeCount > 0) {
- let range = sel.getRangeAt(0);
- let preCaretRange = range.cloneRange();
- preCaretRange.selectNodeContents(element);
- preCaretRange.setEnd(range.endContainer, range.endOffset);
- caretOffset = preCaretRange.toString().length;
- }
- return caretOffset;
- }
- function setCaretPosition(element, offset) {
- let charIndex = 0, range = document.createRange();
- range.setStart(element, 0);
- range.collapse(true);
- let nodeStack = [element], node, foundStart = false, stop = false;
- while (!stop && (node = nodeStack.pop())) {
- if (node.nodeType == 3) {
- let nextCharIndex = charIndex + node.length;
- if (!foundStart && offset >= charIndex && offset <= nextCharIndex) {
- range.setStart(node, offset - charIndex);
- range.setEnd(node, offset - charIndex);
- stop = true;
- }
- charIndex = nextCharIndex;
- } else {
- let i = node.childNodes.length;
- while (i--) {
- nodeStack.push(node.childNodes[i]);
- }
- }
- }
- let sel = window.getSelection();
- sel.removeAllRanges();
- sel.addRange(range);
- }
- document.addEventListener('compositionend', function(e) {
- let target = e.target;
- if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA' || target.isContentEditable) {
- let start = getCaretPosition(target);
- console.log('替换前 - 光标位置:', start);
- let value = target.value || target.innerHTML;
- let lengthChange = 0;
- if (value.includes('》')) {
- console.log('检测到"》",将其替换为">"');
- value = value.replace(/》/g, '> ');
- lengthChange = '> '.length - '》'.length;
- } else if (value.includes('·')) {
- console.log('检测到"·",将其替换为"`"');
- value = value.replace(/·/g, '`');
- lengthChange = '` '.length - '·'.length;
- }
- //else if (value.includes('~')) {
- // console.log('检测到"~",将其替换为"* "');
- // value = value.replace(/~/g, '* ');
- //lengthChange = '* '.length - '~'.length;
- // }
- else if (value.includes('!')) {
- console.log('检测到"!",将其替换为"* "');
- value = value.replace(/!/g, '* ');
- lengthChange = '* '.length - '~'.length;
- }
- if (lengthChange !== 0) {
- start += lengthChange;
- }
- if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA') {
- target.value = value;
- target.setSelectionRange(start, start);
- console.log('替换后 - 光标位置:', start);
- } else {
- target.innerHTML = value;
- setCaretPosition(target, start);
- console.log('替换后 - 光标位置:', start);
- }
- }
- });
- })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址