在HTML文档的文本中搜索某些字符串(并替换它们)

时间:2016-11-22 17:59:15

标签: javascript html

我正在编写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),我只希望它能够显示可见文本。我怎么能这样做?

我目前正在考虑检测一个开放式支架并继续下一个结束括号,但可能有更好的方法来做到这一点。

2 个答案:

答案 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;
&#13;
&#13;

答案 1 :(得分:0)

你可以使用正则表达式去除HTML标签,可能更容易使用javascript函数返回没有HTML的文本。有关详细信息,请参阅此 How can get the text of a div tag using only javascript (no jQuery)