我想在页面加载后突出显示我的 HTML 页面中的特定单词。我不想使用哑巴:
document.innerHTML = document.innerHTML.replace(.....);
我想遍历每个 DOM 节点,找出包含文本的节点并仅修改那些单个节点的 innerHTML。这是我想出的:
function highlightSearchTerms(sword) {
$$('body').map(Element.extend).first().descendants().each(function (el) {
if (el.nodeType == Node.ELEMENT_NODE && el.tagName != 'TD') {
//$A(el.childNodes).each(function (onlyChild) {
//if (onlyChild.nodeType == Node.TEXT_NODE) {
//console.log(onlyChild);
el.innerHTML = el.innerHTML.replace(new RegExp('('+sword+')', 'gi'), '<span class="highlight">$1</span>');
//}
//});
}
});
//document.body.innerHTML.replace(new RegExp('('+sword+')', 'gi'), '<span class="highlight">$1</span>');
}
它现在可以正常工作,但是效率非常低,并且几乎不比上面的单行好,因为它可能会在同一文本上多次替换。(嗯……,还是没有?)
如果您取消注释注释的内容并对其进行更改el.innerHTML.replace
,onlyChild.textContent.replace
它将几乎像它需要的那样工作,但修改 textContent 不会创建一个新的跨度作为元素,而是将 HTML 内容添加为文本。
我的问题/要求是找到一种方法来逐个突出显示文档中遍历元素的单词。