【问题标题】:Grab any Text Node within the BODY using Jquery使用 Jquery 抓取 BODY 中的任何文本节点
【发布时间】:2011-04-26 09:21:18
【问题描述】:

希望有人可以提供帮助。我需要抓取正文中的任何文本节点。即使它不包含在任何其他元素中。

我试过了:

$("p, div, html, body").each(function(){
    $(this).contents().filter(function() {
        var regExText = /(\w|\d|,|;|&)/;                                           
        if (this.nodeType == 3 && regExText.test(this.nodeValue)) {
            $(this).wrap('<span></span>');
            }
      });
});

这是在 Ps 和 Divs 中抓取它们,而不是在 body 本身中。

【问题讨论】:

  • 哪个是正确的答案? ;-)

标签: jquery text nodevalue dom-node


【解决方案1】:

这不是你想要的吗?

$('body').text();

【讨论】:

    【解决方案2】:

    contents() 只会返回您指定的标签的子元素 - p、div、html 和 body。例如,将找不到 td 或 h1 标记内的文本节点。

    使用 jQuery 获取 &lt;body&gt; 标记内所有文本节点的一种方法是搜索 body 的子节点及其后代,

    $("body, body *").contents().filter(function() {
        // if this is a text node and matches regex
        // then do something to it
    }
    

    您可以在此answer 中找到各种其他非 jQuery 方法来获取所有文本节点。

    【讨论】:

      【解决方案3】:

      你所拥有的应该可以工作,you can test it here。我想说没有必要在你的选择器中包含html,在&lt;span&gt; 中你想要处理的&lt;body&gt; 元素之外真的有什么吗?

      【讨论】:

        【解决方案4】:

        为什么不直接清理 HTML?

        var strInputCode=$("body").html();
        var strTagStrippedText = strInputCode.replace(/<\/?[^>]+(>|$)/g, "");
        alert("Output text:\n" + strTagStrippedText);  
        

        我必须承认可能是 $("body").text() 做的。

        【讨论】: