我正在编写Firefox扩展程序。我想通过整个纯文本,所以不是Javascript或图像源,而是替换某些字符串。我目前有这个:
var text = document.documentElement.innerHTML;
var anyRemaining = true;
do {
var index = text.indexOf("search");
if (index != -1) {
// This does not just replace the string with something else,
// there's complicated processing going on here. I can't use
// string.replace().
} else {
anyRemaining = false;
}
} while (anyRemaining);
这样可行,但它也会通过非文本元素和HTML(如Javascript),我只希望它能够显示可见文本。我怎么能这样做?
我目前正在考虑检测一个开放式支架并继续下一个结束括号,但可能有更好的方法来做到这一点。
答案 0 :(得分:1)
您可以使用xpath获取页面上的所有文本节点,然后在这些节点上进行搜索/替换:
function replace(search,replacement){
var xpathResult = document.evaluate(
"//*/text()",
document,
null,
XPathResult.ORDERED_NODE_ITERATOR_TYPE,
null
);
var results = [];
// We store the result in an array because if the DOM mutates
// during iteration, the iteration becomes invalid.
while(res = xpathResult.iterateNext()) {
results.push(res);
}
results.forEach(function(res){
res.textContent = res.textContent.replace(search,replacement);
})
}
replace(/Hello/g,'Goodbye');

<div class="Hello">Hello world!</div>
&#13;
答案 1 :(得分:0)
你可以使用正则表达式去除HTML标签,可能更容易使用javascript函数返回没有HTML的文本。有关详细信息,请参阅此 How can get the text of a div tag using only javascript (no jQuery)