如何使用jquery查找文本节点

时间:2011-01-26 15:39:23

标签: jquery

如何使用textpattern选择所有文本节点。

示例:

<html>
<body>
<div>test</div>
<button>test</button>
<span title="test"></test>
</body>
</html>

$(select all nodes with text "test")

5 个答案:

答案 0 :(得分:3)

您正在寻找:contains selector

$('*:contains(test)')

请注意,这不会搜索属性。

答案 1 :(得分:2)

如果你在课堂名称中谈论'测试':

var elements = $('[class]*="test"');

或者如果你在元素的文本中谈论'测试':

var elements = %('*:contains("test")');

答案 2 :(得分:0)

此前在这里回答:

Find text string using jQuery?

(上面的stackoverflow问题的简短回答)...使用:包含过滤器。

答案 3 :(得分:0)

我相信你想使用contains() Selector

答案 4 :(得分:0)

方式#1

  

基于其选择元素的标准过滤器之一   content是:contains(text)过滤器。它匹配所有元素   包含给定的文本。它的主要缺陷是它的区分大小写   默认。就个人而言,大多数时候我不需要进行文本比较   区分大小写。它通常更直观   最终用户无论外壳如何都能找到他们输入的文字。很少几个   互联网上的人都同意我这一点。这只是一个问题   对不区分大小写的:包含过滤器的时间   出现在互联网上。替代版本的一个示例是:

jQuery.extend(
    jQuery.expr[':'], {
        Contains: "jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0"
    } 
);
     

通过转换所选文字和您正在查找的文字   对于匹配前的大写,您可以模拟不区分大小写   搜索。使用区分大小写的唯一区别   上面定义的不区分大小写的版本是大写字母C in   过滤器的名称。当然你可以将它改成其他任何东西   对你和其他使用你代码的人有意义。

方式#2

  

正如您在上面的JavaScript代码段中所注意到的那样,包含   filter使用indexOf方法的字符串来检查给定的字符串   是否包含特定的文本。虽然这种方法是   在大多数情况下你可能会遇到一个简单的场景   比赛还不够。使用正则表达式可能只是   回答你一直在寻找。

     

令人惊讶的是,jQuery没有提供支持   常用表达。我肯定会同意他们不是   回答一切,你应该明智地使用它们。但如果你想   使用它们,你有充分的理由这样做,它们不存在。   幸运的是,使用额外的Regular来扩展jQuery并不困难   基于表达式的内容过滤器。

jQuery.extend(
    jQuery.expr[':'], {
        regex: function(a, i, m, r) {
            var r = new RegExp(m[3], 'i');
            return r.test(jQuery(a).text());
        }
    }
);
     

信不信由你,但上面几行代码就是你需要的   扩展jQuery,支持正则表达式文本匹配。什么   以上是定义一个名为regex的新过滤器。每一次   调用filter,它使用该值创建一个新的正则表达式   作为过滤器的参数传递。另外表达   将使用不区分大小写的匹配(您可以通过删除它来删除它   我从RegExp构造函数的第二个参数)。如果是的话   当前DOM对象匹配将添加对象的表达式   匹配数组。

     

您可以按如下方式使用正则表达式过滤器:

$("p:regex('[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}')")
     

上面的示例将返回包含电子邮件的所有段落   地址。

这两种方式使用:contains:regex过滤器扩展jQuery(如作者所说,jQuery ships with quite a few filters: http://api.jquery.com/category/selectors/)。

via

如果您愿意,还有一个:regex过滤器plugin