如何使用textpattern选择所有文本节点。
示例:
<html>
<body>
<div>test</div>
<button>test</button>
<span title="test"></test>
</body>
</html>
$(select all nodes with text "test")
答案 0 :(得分:3)
答案 1 :(得分:2)
如果你在课堂名称中谈论'测试':
var elements = $('[class]*="test"');
或者如果你在元素的文本中谈论'测试':
var elements = %('*:contains("test")');
答案 2 :(得分:0)
答案 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/
)。
如果您愿意,还有一个:regex
过滤器plugin。