【发布时间】:2011-12-28 00:34:54
【问题描述】:
我想在页面加载后突出显示我的 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 不会创建新的 span 作为元素,而是将 HTML 内容添加为文本。
我的问题/要求是找到一种方法来逐个突出显示文档中遍历元素的单词。
【问题讨论】:
标签: javascript html prototypejs highlight