【问题标题】:Find all text nodes查找所有文本节点
【发布时间】:2012-02-28 23:51:35
【问题描述】:

我正在尝试编写一个小书签,在文档上所有可见文本实例上调用函数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);

【问题讨论】:

    标签: javascript recursion bookmarklet textnode


    【解决方案1】:

    改变这个...

    element.nodeValue != ''
    

    到这个...

    /\S/.test(element.nodeValue)
    

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

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


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

    element.nodeValue.trim() != ''
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-13
      • 1970-01-01
      • 2019-04-11
      • 2023-03-23
      • 1970-01-01
      • 2023-02-16
      相关资源
      最近更新 更多