jQuery addClass到每个具有'.class'子元素的元素

时间:2012-12-05 12:21:16

标签: jquery each addclass

我正在尝试为其子级#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对象。这就是为什么   代码不起作用

3 个答案:

答案 0 :(得分:12)

我怀疑你的问题源于你的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

答案 1 :(得分:3)

尝试:

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

基本上我们按照自己的方式找到具有类'someclass'的元素:$('#container a .someclass'),然后从那里开始回到封闭的锚点.parents('a'),这是哪里需要添加类'anotherclass'。

答案 2 :(得分:2)

jQuery('#container a .someclass').parent().addClass('anotherclass');​