我需要做的是找到页面上的所有元素 在href属性中包含“tag”,元素的文本包含特定的单词。
例如
<a href="/my/tag/item2">cars</a>
我知道我可以在href中获得带有标签的所有元素,如下所示:
$("a[href*=tag]");
我也可以在文本中找到所有带有'cars'的元素,如下所示:
$("a:contains('cars')");
但是我如何将这两个条件合并为一个语句: 找到href中包含“tag”的所有元素,并在文本中包含“cars”?
答案 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')");