4

我试图在 div 中找到一个名为的元素,wrapper它有一个类active但不是我刚刚点击的那个。

这是我的代码,如果我点击.title类,它会起作用:


$(".title").click(function(){
    if ($("#wrapper ul li").hasClass("active")) {
        alert("found one!");
    }
});

但我不知道如何检查它是否不是我点击的那个。我尝试在我的 if 语句中添加.not(this)and.not($(this))无济于事。

我应该添加我计划removeClass的任何不是当前选定的 div。

我确定我在某处有问题。

供参考的HTML:

<div id="wrapper">
    <ul>
        <div class="title">Title</div>
        <li class="active">Active Clicked List Item</li>
    </ul>
    <ul>
        <div class="title">Title</div>
        <li>Some Other List Item</li>
    </ul>
    <ul>
        <div class="title">Title</div>
        <li>Some Other List Item</li>
    </ul>
</div>

关于我如何做到这一点的任何建议?

4

2 回答 2

4

请注意你的html是无效的DIV不能是子级的UL。选择器也不正确,$('.title')因为它不是您正在应用的类active to

hasClass()返回一个布尔值,因此不可链接

不完全确定您要做什么,但根据显示的代码,您需要先使用not()过滤器hasClass()

if ($("#wrapper ul li").not(this).hasClass("active")) {

或者

if ($("#wrapper ul li.active").not(this).length) {

如果只是为了删除类,只需在添加到当前类之前从所有类中删除活动类,您无需先对其进行测试

于 2013-03-03T14:21:47.513 回答
3

使用not可以很好地排除元素:

$('#wrapper li').click(function(){
  $('#wrapper li').not(this).removeClass('active');
  $(this).addClass('active');
});

演示:http: //jsfiddle.net/97DXe/

如果您注释掉 addClass,您将看到单击已经活动的元素不会从中删除该类。

如果您要在单击的元素上设置活动类,那么首先简单地从所有元素中删除该类并没有太大的危害,因此您不需要not.

于 2013-03-03T14:22:41.013 回答