13

我正在尝试编写一个小书签,它doSomething(textNode)在文档上所有可见文本实例上调用该函数。

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

有没有办法doSomething()只调用每个包含单词的 textNode ?

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);
4

1 回答 1

10

改变这个...

element.nodeValue != ''

对这个……

/\S/.test(element.nodeValue)

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

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


在支持的浏览器中String.prototype.trim,这将是另一种选择......

element.nodeValue.trim() != ''
于 2012-02-07T14:43:18.053 回答