jQuery:仅当元素没有类名时选择它

15

如何使用jQuery选择一个元素,仅当它没有任何类时?

我正在编写一个页面,允许HTML作者通过向元素添加类来覆盖默认的jQuery操作。这可以是任何类。

因此,标记可能是:

<ul>
  <li class="override"></li>
  <li></li>
</ul>

我希望jQuery仅选择第二个列表元素,因为它没有类。

我查看了.hasClass(),但似乎需要指定特定的类名。

谢谢!

4个回答

29

太好了!这正是我想要的结果。 - Christopher Werby
很高兴能够帮助您。如果我的回答是您问题的正确答案,您可以点击左侧的勾选按钮接受我的答案 :) - Ali Demirci

10
这应该可以解决问题:
$('li:not([class]),li[class=""]')

示例: http://jsfiddle.net/aMC5X/

第一部分,li:not([class])使用了“非选择器”“具有属性”来查找没有任何class属性的任何li元素。

第二部分,li[class=""]查找任何将该属性设为空字符串的li元素。


有趣。第二个元素是将那些空类名的对象包含在“无类别”集合中?这可能是一个好主意——你永远不知道。 - Christopher Werby
如果您玩弄一下我给您的 jsfiddle,您就可以看到有没有第二部分会发生什么,并且决定在您的情况下是否需要它(在我看来,您确实需要它)。 - nnnnnn

2
这应该可以解决问题:$('li').not('li[class]')。它的意思是选择所有的li元素,但不包括有class属性的li元素。

1
你的第二个 li 类型选择器是多余的。 - Šime Vidas
真的。而且我的解决方案也比其他人慢 xD。至少我今天学到了新东西。 - clime
我认为带有 :not 属性的单个选择器将比这个更快。我在某个地方读到 :not 比 .not 快得多-- 我猜 .not 的解决方案需要两次遍历 DOM。 - Christopher Werby
是的,那就是它所做的-它会遍历DOM两次。我不确定:not语法,所以我只是把它写下来了。 - clime
2
.not() 方法不会遍历 DOM 两次,它会过滤现有的结果。哪种方法更快可能取决于浏览器。 - nnnnnn

1
你可以使用这个:
if (!jQuery('li').hasClass('myClass') {
    do something...
}

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