我对为文本上色的Java脚本有问题.设置了用于上色的字符串,但只有当我按下键盘上的"空格"键时,单词才会上色.如果我写这个词,它就不会变色.如果我写下单词,然后按空格键,它就会变色.
我想立即着色的话,我写它,而不是等待按下空格键.例如,我设置HELLO
应该是彩色的.我想它的 colored颜色 立即我完成按下最后O
,而不是当我键入HELLO
(与最后的空间).
当您try 在代码面板中手动编写某些内容时,例如,如果您编写Hello,则会出现此问题.问题出在changeColor()
的功能上,有Keyup Event
和Space Key Pressed
.
我试图删除与EventListener有关的代码部分("KeyUp"...和密钥码,但所有东西都坏了,不能工作了.我是新来的,我不能解决它.
index.html个
<div id="editor" contenteditable="true" oninput="showPreview();" onchange="changeColor();"><h1>This is a Heading</h1>
<p>This is a paragraph.</p>
</div>
<h3>PREVIEW</h3>
<div class="preview-area">
<iframe id="preview-window"></iframe>
</div>
style.css个
#editor {
width: 400px;
height: 100px;
padding: 10px;
background-color: #444;
color: white;
font-size: 14px;
font-family: monospace;
white-space: pre;
}
.statement {
color: orange;
}
javascript.js
function applyColoring(element) {
var keywords = ["DIV", "DIV", "H1", "H1", "P", "P", "HELLO", "<", ">", "/"];
var newHTML = "";
// Loop through words
str = element.innerText;
(chunks = str
.split(new RegExp(keywords.map((w) => `(${w})`).join("|"), "i"))
.filter(Boolean)),
(markup = chunks.reduce((acc, chunk) => {
acc += keywords.includes(chunk.toUpperCase())
? `<span class="statement">${chunk}</span>`
: `<span class='other'>${chunk}</span>`;
return acc;
}, ""));
element.innerHTML = markup;
}
// CHANGE COLOR
function changeColor() {
// Keyup event
document.querySelector("#editor").addEventListener("keyup", (e) => {
// Space key pressed
if (e.keyCode == 32) {
applyColoring(e.target);
// Set cursor postion to end of text
// document.querySelector('#editor').focus()
var child = e.target.children;
var range = document.createRange();
var sel = window.getSelection();
range.setStart(child[child.length - 1], 1);
range.collapse(true);
sel.removeAllRanges();
sel.addRange(range);
this.focus();
}
});
}
changeColor()
applyColoring(document.getElementById('editor'));
//PREVIEW
function showPreview() {
var editor = document.getElementById("editor").innerText;
// var cssCode =
// "<style>" + document.getElementById("cssCode").value + "</style>";
// var jsCode =
// "<scri" + "pt>" + document.getElementById("jsCode").value + "</scri" + "pt>";
var frame = document.getElementById("preview-window").contentWindow.document;
document.getElementById("preview-window").srcdoc = editor;
frame.open();
//frame.write(htmlCode + cssCode + jsCode);
frame.write(editor);
frame.close();
}
showPreview()