我使用此代码获取正文中所有节点的文本(浏览器是IE8,它适用于FF ...)
谢谢,我开发了一个工具栏来更改页面中的一些文本,所以如果你有任何其他的解决方案会让我高兴,如果我用正则表达式替换所有的身体,它会禁用一些网站的未来。例如在facebook中如果使用替换所有建议未来将在朋友查找部分禁用,所以我想逐步更改单词,这是一个不良单词的过滤器
function replaceText(node)
{
var textPropName = node.textContent === undefined ? 'innerText' : 'textContent';
var childs = node.childNodes, i = 0;
while(i < childs.length)
{
alert(childs[i][textPropName]);
if (childs[i][textPropName] !=null)
{
childs[i][textPropName] =childs[i][textPropName].replace(rgx,'new');
}
else
{
replaceText(document.body.childNodes[i]);} i++;
}
}
}
它的工作,我可以替换页面上的所有文本,但如果文本与belove相同的标签,我无法访问它并替换它
问题: test5 ww tt xx
测试不在任何标记中,因此不会替换它们
任何解决方案
真诚
ww tt ff xx test5 test
<b>
test old old yyyl yyy ppp
<h2> ppp gfdsgfds gf dg df yyy old odld old</h2>
</b>
<h1 id="myHeader" onClick="replaceText(document.body)">
yyy yyy yyy yyy old Click me! whatever
</h1>
ppp ppp ppp bwhoreface
<b>
ppp
最终解决方案
function replaceText(node){
var textPropName = node.textContent === undefined ? 'innerText' : 'textContent';
var childs = node.childNodes, i = 0;
var len= node.childNodes.length;
// alert('len='+len);
//var rgx = new RegExp('\\bold\\b', 'gi');
while(node = childs[i]){
//alert('ee'+node.nodeType);
if (node.nodeType == 3 ) {
//alert('!!!!!'+node.nodeValue );
//alert('ee'+node.nodeType);
childs[i].nodeValue = childs[i].nodeValue.replace(rgx, 'newText');
} else {
replaceText(node);
}
答案 0 :(得分:0)
在这里,这也适用于IE ......
function replaceText(node)
{
var textPropName = node.textContent === undefined ? 'innerText' : 'textContent';
var childs = node.childNodes, i = 0;
var rgx = new RegExp('\\bff\\b|\\byyy\\b', 'gi');
while(i < childs.length)
{
if(childs[i].nodeType == 3) {
alert(childs[i].nodeValue);
childs[i].nodeValue = childs[i].nodeValue.replace(rgx,'new');
} else {
alert(childs[i][textPropName]);
if (childs[i][textPropName] !=null)
{
childs[i][textPropName] =childs[i][textPropName].replace(rgx,'new');
}
else
{
replaceText(document.body.childNodes[i]);
}
}
i++;
}
}
答案 1 :(得分:0)
使用 content()属性: - 它获取匹配元素集中每个元素的子元素,包括文本和注释节点。
试试这个:
// in jquery
$("body").contents().filter(function() {
return this.nodeType == 3;
}).replaceWith("hello");
// in javascript
var nodes = document.getElementsByName('body').childNodes
for (i=0; i < nodes.length; i++)
{
if(nodes.childNode[i].nodeType == 3)
{
//THIS NODE IS A TEXT NODE OF THE BODY ELEMENT
//DO WHAT YOU NEED WITH IT
}
}
见link