2012-02-07 63 views
13

我正在尝试编写一个书签,它在文档上的所有可见文本实例上调用函数doSomething(textNode)查找所有文本节点

doSomething(),只是为了好玩,通过替换传递给它的textNode的textContent替换每个单词与“derp”。但是,这会使一些空的textNode在其中包含单词,因此会打破网页。

有没有办法仅在每个包含单词的textNode上调用doSomething()

function recurse(element) 
{ 
    if (element.childNodes.length > 0) 
     for (var i = 0; i < element.childNodes.length; i++) 
      recurse(element.childNodes[i]); 

    if (element.nodeType == Node.TEXT_NODE && element.nodeValue != '') 
     doSomething(element); 
} 
var html = document.getElementsByTagName('html')[0]; 
recurse(html); 

回答

10

改变了...

element.nodeValue != '' 

这个...

/\S/.test(element.nodeValue) 

这使用正则表达式/\S/,其中搜索至少一个非空格字符。

您可能需要进一步定义“单词”的含义。我认为你只是排除只有空白的节点。


在支持String.prototype.trim浏览器,这将是一个替代...

element.nodeValue.trim() != ''