调用 highlight.js 高亮功能后,光标位置重置在文本框中
Cursor position resets in in text box after the highlight.js highlight function is called
我正在尝试使用 HTML CSS 和 JavaScript 制作自定义代码编辑器,我希望突出显示可编辑代码块中包含的代码,这就是 highlight.js进来了。
每次用户在块内输入内容时,它都会在 iframe 中呈现(想想 W3 School),我已经成功地使代码块中的代码高亮显示,但发生的是代码块中的光标位置重置.如何在不必不断跟踪其位置的情况下停止重置光标位置?
This is an image that illustrated what I've mentioned up to now
hljs.initHighlightingOnLoad();
const editor = document.querySelector(".editor");
const iframe = document.querySelector("iframe");
const codeSubmitBtn = document.querySelector(".code-editor-btn");
editor.addEventListener('keyup', () => {
let html = editor.getAttribute('data-prerequisite') + editor.textContent;
iframe.src = `data:text/html;charset=utf-8, ${encodeURI(html)}`;
document.querySelectorAll('pre code').forEach((block) => {
hljs.highlightBlock(block);
});
});
<!DOCTYPE html>
<html lang="en">
<head>
<title>Code editor</title>
<!-- THE HIGHLIGHT JS STUFF-->
<link rel="stylesheet" href="//cdn.jsdelivr.net/gh/highlightjs/cdn-release@9.16.2/build/styles/default.min.css">
<script src="//cdn.jsdelivr.net/gh/highlightjs/cdn-release@9.16.2/build/highlight.min.js"></script>
</head>
<body>
<div class="main-editor">
<pre>
<code class="editor html" contenteditable="true"
data-prerequisites="<li>Hi this needs to be in</li>"><h1> How are you </h1></code>
</pre>
<iframe class="second"></iframe>
</div>
<button class="code-editor-btn" contenteditable="false">submit!</button>
</body>
</html>
实际上 highlight.js 不打算那样使用。但是,可能有一些变通方法,例如跟踪光标位置并将其移动到原来的位置,但这并不值得。尝试一些更方便的方法,例如 "Ace Highlight"
我正在尝试使用 HTML CSS 和 JavaScript 制作自定义代码编辑器,我希望突出显示可编辑代码块中包含的代码,这就是 highlight.js进来了。
每次用户在块内输入内容时,它都会在 iframe 中呈现(想想 W3 School),我已经成功地使代码块中的代码高亮显示,但发生的是代码块中的光标位置重置.如何在不必不断跟踪其位置的情况下停止重置光标位置? This is an image that illustrated what I've mentioned up to now
hljs.initHighlightingOnLoad();
const editor = document.querySelector(".editor");
const iframe = document.querySelector("iframe");
const codeSubmitBtn = document.querySelector(".code-editor-btn");
editor.addEventListener('keyup', () => {
let html = editor.getAttribute('data-prerequisite') + editor.textContent;
iframe.src = `data:text/html;charset=utf-8, ${encodeURI(html)}`;
document.querySelectorAll('pre code').forEach((block) => {
hljs.highlightBlock(block);
});
});
<!DOCTYPE html>
<html lang="en">
<head>
<title>Code editor</title>
<!-- THE HIGHLIGHT JS STUFF-->
<link rel="stylesheet" href="//cdn.jsdelivr.net/gh/highlightjs/cdn-release@9.16.2/build/styles/default.min.css">
<script src="//cdn.jsdelivr.net/gh/highlightjs/cdn-release@9.16.2/build/highlight.min.js"></script>
</head>
<body>
<div class="main-editor">
<pre>
<code class="editor html" contenteditable="true"
data-prerequisites="<li>Hi this needs to be in</li>"><h1> How are you </h1></code>
</pre>
<iframe class="second"></iframe>
</div>
<button class="code-editor-btn" contenteditable="false">submit!</button>
</body>
</html>
实际上 highlight.js 不打算那样使用。但是,可能有一些变通方法,例如跟踪光标位置并将其移动到原来的位置,但这并不值得。尝试一些更方便的方法,例如 "Ace Highlight"