JS在用户输入单引号时中断

JS Breaks when user inputs a single quote

本文关键字:中断 单引号 输入 用户 JS      更新时间:2024-01-03

>我有一个带有<div></div><p></p>的页面,<p></p>内部有带有标记标签的文本。我想删除这些标记标签,我有一个功能可以做到这一点。

页面示例:

<div id="NoteHolder">
        <p class="NoteOp">This breaks with single quotes such as in <mark class="YelColBox" style="font-weight: bold;">didn't</mark></p>
</div>

删除标记的 JS 函数是:

function removeMark(tagName, Color) {
  var notes = document.getElementsByClassName("NoteOp");
  for (var i = 0; i < notes.length; i++) {
     var n = notes[i];
     if(window.Bold === "No") {
        n.innerHTML = n.innerHTML.replace(new RegExp('<mark class="' + Color +'">(' + tagName + ')</mark>', "gim"), "$1");
     }
     if(window.Bold === "Yes") {
        n.innerHTML = n.innerHTML.replace(new RegExp('<mark class="' + Color +'" style="font-weight: bold;">(' + tagName +')</mark>', "gim"), "$1");
     }
  }
}

tagNamedidn'tColorYelColBox。我得到的错误是 Uncaught SyntaxError: missing ) after argument list test.html:1

这是没有意义的,因为第一行测试中的代码.html是<!DOCTYPE html>

我将如何修复此错误?

在 HTML 中使用 &#39; 代替单词 did 中的单引号。

您可以在 mark 元素渲染到 dom 后将其删除。

然后在你的函数中像这样:

function removeMark(tagName, Color) {
    var elements = document.getElementsByTagName('mark');
    while(elements.length > 0){
        elements[0].parentNode.insertBefore(elements[0].innerHTML, elements[0])
        elements[0].parentNode.removeChild(elements[0]);
    }
}

看看这是否有效。