您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Automatically closes parentheses, etc.
// ==UserScript== // @name Auto Surround and Closing // @name:ja カッコとかを自動閉じ // @description:ja 自動でカッコとかクォーテーションを閉じる // @namespace https://yakisova.com // @version 1.2.0 // @description Automatically closes parentheses, etc. // @author yakisova41 // @match http://*/* // @match https://*/* // @grant none // @license MIT // ==/UserScript== 'use strict'; const tokens = { '"': { start: '"', close: '"', surround: true, closing: true }, "'": { start: '"', close: '"', surround: true, closing: true }, "`": { start: '`', close: '`', surround: true, closing: true }, "(": { start: '(', close: ')', surround: true, closing: true }, "[": { start: '[', close: ']', surround: true, closing: true }, "<": { start: '<', close: '>', surround: true, closing: false }, "{": { start: '{', close: '}', surround: true, closing: true } } function inputListener(elem) { let valueState = ""; elem.addEventListener("keydown", (e)=>{ if(Object.keys(tokens).includes(e.key)) { const { selectionStart, selectionEnd } = e.target; const {start, close, surround, closing} = tokens[e.key] const before = valueState.slice(0, selectionStart); const after = valueState.slice(selectionEnd, valueState.length); if(selectionStart !== selectionEnd && surround) { e.preventDefault(); const selected = valueState.slice(selectionStart, selectionEnd); e.target.value = `${before}${start}${selected}${close}${after}`; e.target.setSelectionRange(selectionStart + 1, selectionEnd + 1); } else if(closing) { e.preventDefault(); e.target.value = `${before}${start}${close}${after}`; e.target.setSelectionRange(selectionEnd+ 1, selectionEnd + 1); const backspaceHandler = (e)=>{ if(e.key === "Backspace") { e.preventDefault(); const { selectionStart, selectionEnd } = e.target; const before = valueState.slice(0, selectionStart - 1); const after = valueState.slice(selectionEnd + 1, valueState.length); e.target.value = `${before}${after}`; e.target.setSelectionRange(selectionStart - 1, selectionStart - 1); } elem.removeEventListener("keydown", backspaceHandler); } elem.addEventListener("keydown", backspaceHandler) } (dawd) } valueState = e.target.value; }); } setInterval(()=>{ const inputs = document.querySelectorAll(` input[type="text"]:not(.attached-auto-surround-and-closing), input[type="search"]:not(.attached-auto-surround-and-closing), textarea:not(.attached-auto-surround-and-closing) `); inputs.forEach(input => { console.log(input) inputListener(input) input.classList.add("attached-auto-surround-and-closing") }); }, 100);
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址