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