如何查找符合多个条件的元素

时间:2013-03-06 23:34:28

标签: jquery jquery-selectors dom-traversal

我需要做的是找到页面上的所有元素 在href属性中包含“tag”,元素的文本包含特定的单词。

例如

<a href="/my/tag/item2">cars</a>

我知道我可以在href中获得带有标签的所有元素,如下所示:

$("a[href*=tag]");

我也可以在文本中找到所有带有'cars'的元素,如下所示:

$("a:contains('cars')");

但是我如何将这两个条件合并为一个语句: 找到href中包含“tag”的所有元素,并在文本中包含“cars”?

3 个答案:

答案 0 :(得分:19)

您是否尝试过$("a[href*=tag]:contains('cars')");

你可以永远地继续下去,即

$("a.className.anotherClass[href*=tag][title=test]:contains('cars'):visible");

答案 1 :(得分:3)

正如其他人所说的那样,或者,如果这两个条件需要单独应用,例如中间还有一些其他代码,那么......

var $tags = $("a[href*=tag]");

然后......

var $carTags = $tags.filter(":contains('cars')");

.filter()是减少现有jQuery选择的通用方法。

与许多其他jQuery方法一样,.filter()返回一个jQuery对象,因此它将链接:

var $foo = $("a[href*=tag]").filter(":contains('cars')").filter(".myClass");

.filter()也有理由我不打算解释,我不需要因为@bažmegakapa刚刚非常雄辩地这样做了。

答案 2 :(得分:3)

其他答案显示了精美而有效的例子。但这里有一个有趣的怪癖,native CSS selectors(本地querySelectorAll()也支持)和selectors defined by jQuery之间的区别。

将它们混合起来可能并不幸运,因为不能使用更快的原生引擎。例如,在:has() jQuery docs状态:

  

因为:has()是一个jQuery扩展而不是CSS的一部分   规范,查询使用:has()无法利用   本机DOM querySelectorAll()提供的性能提升   方法

出于这个原因,您最好使用本机方法查询,然后使用任何特定于jQuery的选择器查询filtering

var $res = $("a[href*=tag]").filter(":contains('cars')");