如何匹配含some_class且父级无unique_dropdown的dropdown-item元素
解决方案
正确写法1:直接通过层级选择器定位
$('.dropdown:not(.unique_dropdown) a.dropdown-item.some_class')
这个写法直接筛选出没有.unique_dropdown类的.dropdown容器,再在其内部匹配带有.some_class的.dropdown-item链接,逻辑清晰且高效。
正确写法2:使用.not()结合父元素判断
如果习惯用.not()的写法,可以这样写:
$('a.dropdown-item.some_class').not(function() { return $(this).closest('.dropdown').hasClass('unique_dropdown'); })
通过回调函数检查每个目标元素的最近.dropdown父容器是否带有.unique_dropdown类,把符合条件的元素排除掉。
为什么之前的写法无效?
你之前尝试的两种写法都用错了.not()的参数格式:
.not()的第二个参数不是上下文,它的正确用法是要么传选择器字符串,要么传DOM元素/集合,要么传回调函数。$(this)在你之前的写法里没有正确指向当前遍历的元素,因为不是在回调函数中调用的。
匹配结果验证
对应你提供的HTML结构:
- 第一个
.dropdown.unique_dropdown里的.some_class元素会被排除 - 第二个
.dropdown里的1个.some_class元素会被匹配 - 第三个
.dropdown里的3个.some_class元素会被全部匹配
内容的提问来源于stack exchange,提问作者pileup
相关产品推荐
相关产品推荐

