jQuery为每个具有子元素'.class'的元素添加addClass

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 对象。因此,代码无法正常工作。
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


@Jon 你的意思是它要与选择器还是函数一起使用? - Asad Saeeduddin
@JanDvorak 我怀疑是因为他的HTML格式不正确(未关闭的span标签)。 - Asad Saeeduddin
@Asad,我相信在相同的情况下这会出问题。 - John Dvorak
@Asad:使用函数,主要是当选择器无法胜任时。 - Jon
@Jon,我已经在答案中提到了“filter”。谢谢。 - Asad Saeeduddin
显示剩余3条评论

4

尝试:

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

我们基本上按照以下方式查找具有类“someclass”的元素: $('#container a .someclass'),然后从那里向上查找到包含的锚点: .parents('a') ,这是需要添加类“anotherclass”的位置。


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

这将会把类添加到 span 中。但这不是我们想要的。 - John Dvorak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接