我正在尝试使用变量tagName
替换div中的文本。我以前工作过,但我添加了一些东西,它停止了工作。到目前为止,控制台显示的代码没有任何问题。这是我的替换函数(tagName
是替换中我们尝试返回的单词,而Color
是按钮给出的背景颜色。)
function removeMark (tagName, Color) {
var tagNameC = tagName.toUpperCase();
var IndAry = tags.indexOf(tagNameC);
tags.splice(IndAry, 1);
var Notes = document.getElementById("NoteHolder").innerHTML;
var MarkBack = new RegExp("(\\b + tagName + \\b)", "gim");
var ColorT = '"' + Color + '"';
var MarkBackTo = "<mark class='" + ColorT + "'>" + MarkBack + "</mark>"
var AfterRep = Notes.replace(MarkBackTo, "$1");
document.getElementById("NoteHolder").innerHTML = AfterRep;
var list = document.getElementById("myList");
var idmarker = "MarkID" + tagName;
var ElementID = document.getElementById(idmarker);
MarkList.removeChild(ElementID);
}
我要替换的示例是<mark class="YelBoxCol">Test</mark>
,我正在尝试将其恢复为Test
(测试为tagName
)之前我添加了类以标记其工作完美,但现在它不会删除标记!
答案 0 :(得分:1)
我对这段代码有疑问。让我们假设Color = 'YelBoxCol';
- &gt;字符串变量
var ColorT = '"' + Color + '"';
// output is "YelBoxCol"; --> string variable but with double quotes in the string as well so something like '"YelBoxCol"'
var MarkBackTo = "<mark class='" + ColorT + "'>" + MarkBack + "</mark>"
//output "<mark class='"YelBoxCol"'>yourRegex</mark>" --> you can see the double quotes in your class name.
这就是你的正则表达式崩溃的原因,因为它无法找到类名为"YelBoxCol"
的元素,但是有一个类名YelBoxCol
,而不是引号的差异。
因此,请将代码var ColorT = '"' + Color + '"';
更改为
var ColorT = Color;
OR
将代码var MarkBackTo = "<mark class='" + ColorT + "'>" + MarkBack + "</mark>"
更改为
var MarkBackTo = "<mark class=" + ColorT + ">" + MarkBack + "</mark>"
如果这还没有解决问题,那么我建议你逐行调试代码,检查其中的值,我相信你会发现问题,这是一个小问题,没有看到任何重大问题在你的代码中。
答案 1 :(得分:0)
我不太了解JavaScript,但我认为它不匹配,因为该类使用“”来标记它的名称,但是你打了额外的''强大>在你的正则表达式。
尝试
var MarkBackTo = "<mark class=" + ColorT + ">" + MarkBack + "</mark>"
答案 2 :(得分:0)
我觉得你构建RegExp的方式不对。请尝试:
function removeMark(tagName, Color) {
var tagNameC = tagName.toUpperCase();
var IndAry = tags.indexOf(tagNameC);
tags.splice(IndAry, 1);
var Notes = document.getElementById("NoteHolder").innerHTML;
var MarkBack = "(\\b + tagName + \\b)";
var ColorT = '"' + Color + '"';
var MarkBackTo = "<mark class='" + ColorT + "'>" + MarkBack + "</mark>"
var AfterRep = Notes.replace(new RegExp(MarkBackTo, "gim"), "$1", );
document.getElementById("NoteHolder").innerHTML = AfterRep;
var list = document.getElementById("myList");
var idmarker = "MarkID" + tagName;
var ElementID = document.getElementById(idmarker);
MarkList.removeChild(ElementID);
}