我正在尝试为#somecontainer
中的每个锚点添加一个类,其孩子有.someclass
例如。
<div id="container">
<a><span class="someclass"></span></a>
<a></a>
<a><span class="someclass">/span></a>
</div>
在上面的代码中,我希望第一个和第三个锚点有一个类".otherclass"我试过这段代码,但它似乎不起作用
jQuery('#container a').each(function(){
jQuery(this).has('.someclass').addClass('anotherclass');
})
更新:
.has()
返回一个boolean
而不是jQuery对象。这就是为什么 代码不起作用
我怀疑您的问题源于您的 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
。
尝试:
$('#container a .someclass').parents('a').addClass('anotherClass');
基本上,我们一路向下找到类 'someclass' 的元素: $('#container a .someclass')
,然后从那里回到封闭锚点:.parents('a')
,这是需要添加类 'otherclass' 的地方。
jQuery('#container a .someclass').parent().addClass('anotherclass');