我对为文本上色的Java脚本有问题.设置了用于上色的字符串,但只有当我按下键盘上的"空格"键时,单词才会上色.如果我写这个词,它就不会变色.如果我写下单词,然后按空格键,它就会变色.

我想立即着色的话,我写它,而不是等待按下空格键.例如,我设置HELLO应该是彩色的.我想它的 colored颜色 立即我完成按下最后O,而不是当我键入HELLO (与最后的空间).

当您try 在代码面板中手动编写某些内容时,例如,如果您编写Hello,则会出现此问题.问题出在changeColor()的功能上,有Keyup EventSpace Key Pressed.

我试图删除与EventListener有关的代码部分("KeyUp"...和密钥码,但所有东西都坏了,不能工作了.我是新来的,我不能解决它.

index.html

  <div id="editor" contenteditable="true" oninput="showPreview();" onchange="changeColor();">&lt;h1>This is a Heading&lt;/h1>
    &lt;p>This is a paragraph.&lt;/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()

推荐答案

您的思路是正确的:您不必删除整个'keyup'事件侦听器代码只需删除逻辑周围的if语句.if (e.keyCode == 32)判断是否按下了空格键,所以如果你想让这部分代码在按下any键时运行,就不要使用if语句.

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();
      // }
    });
  }

Javascript相关问答推荐

对象和数字减法会抵消浏览器js中的数字

如何访问Json返回的ASP.NET Core 6中的导航图像属性

cypress中e2e测试上的Click()事件在Switch Element Plus组件上使用时不起作用

如何根据当前打开的BottomTab Screeb动态加载React组件?

Html文件和客户端存储的相关问题,有没有可能?

不能将空字符串传递给cy.containes()

在WordPress中使用带有WPCode的Java代码片段时出现意外令牌错误

类构造函数不能在没有用With Router包装的情况下调用

如何将数组用作复合函数参数?

在Reaction中的handleSubmit按钮内,useSelector值仍然为空

根据一个条件,如何从处理过的数组中移除一项并将其移动到另一个数组?

当我在Reaction中创建一个输入列表时,我的输入行为异常

为什么当我更新数据库时,我的所有组件都重新呈现?

对具有相似属性的对象数组进行分组,并使用串连的值获得结果

JavaScript:如果字符串不是A或B,则

处理TypeScrip Vue组件未初始化的react 对象

用于测试其方法和构造函数的导出/导入类

MUI迷你图:如何将$符号添加到MUI迷你图中的工具提示数据

当达到高度限制时,如何裁剪图像?使用html和css

在采购unpept-visalizations.js时遇到问题