8

#somecontainer我正在尝试向其孩子拥有的每个锚点添加一个类.someclass

例如。

<div id="container">
<a><span class="someclass"></span></a>
<a></a>
<a><span class="someclass">/span></a>
</div>

在上面的代码中,我希望第一个和第三个锚有一个类 '.anotherclass' 我试过这段代码,但它似乎不起作用

jQuery('#container a').each(function(){
jQuery(this).has('.someclass').addClass('anotherclass');
})

更新.has()返回一个boolean而不是 jQuery 对象。这就是代码不起作用的原因

4

3 回答 3

14

我怀疑您的问题源于您的 HTML 格式错误,即您需要关闭跨度。

<div id="container">
<a><span class="someclass"></span></a>
<a></a>
<a><span class="someclass"></span></a>
</div>

此外,您的代码可以通过使用:has仅选择包含与所需类名匹配的元素的锚点来简化一点:

$('#container a:has(.someclass)').addClass('anotherclass');

即“选择作为具有ID的元素container的后代并且具有类的后代的所有锚点someclass

正如 Jon 所指出的,另一种方法是使用基本选择器,然后使用自定义函数过滤结果集合:

$('#container a').filter(function(){
    return $(this).has('.someclass').length > 0
}).each(function(){
    $(this).addClass('anotherclass');
});

该函数需要为true您想要保留的任何元素以及您不想保留的任何元素返回false

于 2012-12-05T12:23:09.107 回答
4

尝试:

$('#container a .someclass').parents('a').addClass('anotherClass');

基本上,我们一直在寻找具有类 'someclass': 的元素$('#container a .someclass'),然后从那里回到封闭的锚点:.parents('a'),这是需要添加类 'anotherclass' 的地方。

于 2012-12-05T12:31:23.263 回答
2
jQuery('#container a .someclass').parent().addClass('anotherclass');​
于 2012-12-05T12:26:28.103 回答