Pau*_*out 6 wordpress wordpress-gutenberg gutenberg-blocks
古腾堡代码块用于在您的 WordPress 帖子和页面中显示代码块。在理想情况下,大多数人只是将代码直接复制并粘贴到这些块中。但我希望能够将代码输入到块中。
如何输入制表符?我希望能够在输入代码时缩进。如果我复制并粘贴一段代码,它不会丢失选项卡。但是,我一直无法输入。
键入 Tab 键会将焦点更改到下一个块。Shift-tab 将焦点更改到上一个块。CTRL-tab 什么也不做。
我已经搜索和谷歌搜索,我只能找到其他人问同样的问题,没有答案。
尝试将以下内容添加到页脚之前的脚本标记中(通过根据正确的过程将其排队):
\nvar codeAreas = document.querySelectorAll(\'code.block-editor-rich-text__editable\');\nif (codeAreas) {\n for (area of codeAreas) {\n area.addEventListener(\'keydown\', (e) => {\n var TABKEY = 9;\n if (e.keyCode == TABKEY) {\n\n if (e.preventDefault) {\n e.preventDefault();\n }\n\n var text = "\\t";\n var selection = document.getSelection();\n var range = selection.getRangeAt(0);\n var startPos = range.startOffset;\n var endPos = range.endOffset;\n\n area.innerText = area.innerText.substring(0, startPos)\n + text\n + area.innerText.substring(endPos, area.innerText.length);\n\n range = document.createRange();\n range.setStart(area.firstChild, endPos + text.length);\n selection.removeAllRanges();\n selection.addRange(range);\n\n return false;\n }\n }\n , false);\n }\n}\n
Run Code Online (Sandbox Code Playgroud)\n我将尝试分解每个部分的作用。
\n首先,我们当然会找到任何可编辑的代码标签(如果存在)并添加 keydown 事件。
\nvar codeAreas = document.querySelectorAll(\'code.block-editor-rich-text__editable\');\nif (codeAreas) {\n for (area of codeAreas) {\n area.addEventListener(\'keydown\', (e) => {\n...\n
Run Code Online (Sandbox Code Playgroud)\n我们检查它是否是一个选项卡
\n...\nvar TABKEY = 9;\n if(e.keyCode == TABKEY) {\n\n...\n
Run Code Online (Sandbox Code Playgroud)\n如果是,首先我们阻止 keydown 事件的默认行为(选择下一个元素)
\n...\nif (e.preventDefault) {\n e.preventDefault();\n}\n...\n
Run Code Online (Sandbox Code Playgroud)\n然后设置我们想要插入的文本 \xe2\x80\x93 在这种情况下为制表符,但可以是四个空格或其他任何内容 \xe2\x80\x93 并获取当前选择的位置。如果没有突出显示任何内容,则选择范围的起点和终点将相同
\n...\nvar text = " ";\nvar selection = document.getSelection();\nvar range = selection.getRangeAt(0);\nvar startPos = range.startOffset;\nvar endPos = range.endOffset;\n...\n
Run Code Online (Sandbox Code Playgroud)\n现在我们在光标处插入文本,
\n...\narea.innerText = area.innerText.substring(0, startPos)\n + text\n + area.innerText.substring(endPos, area.innerText.length);\n...\n
Run Code Online (Sandbox Code Playgroud)\n然后我们将选择重置为插入文本的末尾
\n...\nrange = document.createRange();\nrange.setStart(area.firstChild, endPos + text.length);\nselection.removeAllRanges();\nselection.addRange(range);\n...\n
Run Code Online (Sandbox Code Playgroud)\n然后我们返回 false 以防万一,所以该事件肯定不会触发其他处理程序
\n 归档时间: |
|
查看次数: |
375 次 |
最近记录: |