在jQuery中动态添加类时使用.not

在jQuery中动态添加类时使用.not,jquery,Jquery,我正在使用addClass()添加。单击后展开为一个元素。然后,我不想再让另一块代码与该元素匹配。我使用了.not()和.on()的组合来尝试让jQuery注意到新添加的类,但运气不太好-我编写的处理程序是这样的: $(".person").not("expanded").on({ mouseleave:... }); $(document).on('mouseleave','.person:not(.expanded)',function(){ .

我正在使用addClass()添加。单击后展开为一个元素。然后,我不想再让另一块代码与该元素匹配。我使用了.not()和.on()的组合来尝试让jQuery注意到新添加的类,但运气不太好-我编写的处理程序是这样的:

    $(".person").not("expanded").on({
            mouseleave:...
    });
$(document).on('mouseleave','.person:not(.expanded)',function(){
  ...
})

虽然上面我的.on()语法显然不正确,但我如何将.not()用于新添加的类名?

您错过了
not()
选择器上的

$(".person").not(".expanded").on('mouseleave', function() {
    // code...
});

您错过了
not()
选择器上的

$(".person").not(".expanded").on('mouseleave', function() {
    // code...
});

如果您想要直播活动,可以尝试以下方式:

    $(".person").not("expanded").on({
            mouseleave:...
    });
$(document).on('mouseleave','.person:not(.expanded)',function(){
  ...
})
选择器
”。人员:未(.expanded)
将用于筛选事件

如果使用了('mouseleave',function(){…},则此时它将仅将事件处理程序附加到所选元素。如果更改元素的
expanded
类,则不会对其进行更新


document
更好的是,您应该将代理附加到person元素的容器中(出于性能原因)。请参阅。

如果您想要直播事件,可以尝试以下操作:

    $(".person").not("expanded").on({
            mouseleave:...
    });
$(document).on('mouseleave','.person:not(.expanded)',function(){
  ...
})
选择器
”。人员:未(.expanded)
将用于筛选事件

如果使用了('mouseleave',function(){…},则此时它将仅将事件处理程序附加到所选元素。如果更改元素的
expanded
类,则不会对其进行更新


document
更好的是,您应该将委托附加到person元素的容器中(出于性能原因)。请参阅。

从技术上讲,jQuery不会注意到添加元素或删除类名的时间

事件委派的工作方式是:将事件处理程序绑定到父级(如果需要,可以绑定到文档)。
.on()
将使用选择器参数选择性地执行事件处理程序到“选择器”参数(如果提供)

事件“mouseleave”将冒泡到元素
#someparent
和事件的目标(基本上,触发事件的元素将在提供的选择器
上进行检查。person:not(.expanded)
。如果匹配,则执行事件处理程序


请注意,您可以委托给文档,但最好尽可能地委托给事件目标。

从技术上讲,jQuery不会注意到添加元素或删除类名的时间

事件委派的工作方式是:将事件处理程序绑定到父级(如果需要,可以绑定到文档)。
.on()
将使用选择器参数选择性地执行事件处理程序到“选择器”参数(如果提供)

事件“mouseleave”将冒泡到元素
#someparent
和事件的目标(基本上,触发事件的元素将在提供的选择器
上进行检查。person:not(.expanded)
。如果匹配,则执行事件处理程序


请注意,您可以委托给文档,但最好尽可能地委托给事件目标。

您还可以从所需元素中删除事件处理程序:


$(“#removeHandlerFromMe”)。解除绑定('mouseleave')
您还可以从所需元素中删除事件处理程序:


$(“#removeHandlerFromMe”).unbind('mouseleave')

这是我问题中的一个输入错误,语法正确的问题仍然存在。这是我问题中的一个输入错误,语法正确的问题仍然存在。+1.请注意,将委托事件附加到文档是非常不有效的。您应该附加到包含dyanmic
.person
的最近元素有没有一种方法可以将鼠标指针附加到同一个语句上,但触发不同的函数?或者我必须编写另一个类似的处理程序?是的,但对于live event,您必须将委托附加到容器(可能不是文档…)是的,请参阅on()语法。您可以在({mouseleave:x,mouseon:y},,.person:not(.expanded')上执行
on操作
啊,是的,我明白了。但是我如何才能将“.person”对象传递给mouseleave/over函数,而不是委托对象?+1。请注意,将委托事件附加到文档是非常不有效的。您应该附加到包含dyanmic
的最近元素。person
谢谢。有没有办法附加鼠标覆盖是的,但是对于live event,您必须将委托附加到一个容器(可能不是文档…)是的,请参阅on()语法。您可以在({mouseleave:x,mouseon:y},,.person:not(.expanded)')上执行
on
啊,是的,我明白了。但是如何将“.person”对象传递给mouseleave/over函数,而不是委托对象?