使用and选择器选择<li>
没有<a>
子元素的元素::has
:not
$("li:not(:has(a))").addClass("current");
jsFiddle
- 编辑 -
虽然这可能是最短的解决方案,除了可读性,它绝对不是速度方面最好的解决方案。
考虑到这一点,我建议您查看@bazmegakapa提供的一个很好的答案。
由于这是您(或包括我在内的任何其他人)最终可能多次使用的东西,所以我使用这个插件/方法扩展了 jQuery,您可以使用它来干燥您的代码:
jQuery.fn.thatHasNo = function(element, method) {
if (typeof method === "undefined" || method === null) method = "children";
return this.not(function() {
return $(this)[method](element).length;
});
};
你可以打电话给:
$("li").thatHasNo("a").addClass("current");
默认情况下(如果未传递方法的第二个参数),此扩展将检查是否有任何直接后代(children)与提供的选择器匹配。但是,您可以提供任何树遍历参数作为方法的第二个参数。因此,这可以写成以下任一形式:
$("li").thatHasNo("a", "children").addClass("current");
//...
$("li").thatHasNo("a", "find").addClass("current");
//...
$("li").thatHasNo(".class", "siblings").addClass("lame");
我已经更新了 jsFiddle以反映这一点。