【发布时间】:2020-04-10 18:29:00
【问题描述】:
我正在尝试在页面中突出显示某些单词。为此,我想查找所有文本节点并仅将特定单词替换为突出显示它的跨度。该代码似乎可以正确搜索并找到文本节点中的单词,但替换不起作用。我明白了:
foo
我想得到这个:
foo(带有突出显示的背景)
function toRegExp(text) {
return new RegExp(text, 'g');
}
function toSpan(text) {
return '<span style="background-color: #FBC300;">' + text + '</span>';
}
function replaceText(squery, node) {
node = node || document.getElementById("mainContent"); // base node
for (node=node.firstChild;node;node=node.nextSibling){
if (node.nodeType==3) {
if (node.innerHTML) {
node.innerHTML = node.innerHTML.replace(toRegExp(squery), toSpan(squery));
} else { // support to IE
node.nodeValue = node.nodeValue.replace(toRegExp(squery), toSpan(squery));
}
}
else replaceText(squery, node);
}
}
【问题讨论】:
-
在创建 span 时,您需要使用真正的标签分隔符 (
<>) 而不是 HTMLEntities。但是你不能在文本节点中设置 HTML。
标签: javascript replace innerhtml