jQuery如何在if语句中使用on()

jQuery如何在if语句中使用on(),jquery,delegates,live,addclass,Jquery,Delegates,Live,Addclass,我有一个if语句,目前运行良好: if ($('div').hasClass('is-sticky')) { $('body').addClass('has-sticky'); } 但是,类“.is sticky”是从不同的jQuery插件动态添加到标记中的。所以我发现我需要使用on(),以便不断监视该类的添加或删除。但是我不知道如何在当前的if语句中使用on() 我想观察动态添加和删除“.is sticky”,然后在主体中添加“.has sticky”类 谢谢 .on()用于将事件处理程

我有一个if语句,目前运行良好:

if ($('div').hasClass('is-sticky')) {
  $('body').addClass('has-sticky');
}
但是,类“.is sticky”是从不同的jQuery插件动态添加到标记中的。所以我发现我需要使用on(),以便不断监视该类的添加或删除。但是我不知道如何在当前的if语句中使用on()

我想观察动态添加和删除“.is sticky”,然后在主体中添加“.has sticky”类

谢谢

.on()
用于将事件处理程序绑定到选择器,该选择器的匹配元素可能会动态更改。但是您没有绑定事件处理程序(当类被更改时不会触发事件),所以在这种情况下没有帮助

您可以使用
setInterval()
定期检查并更新类:

setInterval(function() {
    $('body').toggleClass('has-sticky', $('div').hasClass('is-sticky'));
}, 1000);
您不能使用
.on()
监视何时从DOM对象添加或删除类。jQuery不提供这种功能

当类被修改时,您可以尝试查看以下内容:

  • 在任何可能修改类的操作(如果所有代码都是这样的话,您应该知道这些操作)之后,您可以调用一个函数来测试该类,并在该类发生更改时执行其工作

  • 您可以更改代码中修改该类的所有位置,以触发您自己的自定义更改事件或调用您自己的函数,然后您可以通过处理该事件或在该函数中完成工作

  • 您可以使用间隔计时器轮询DOM并查找更改(不推荐)

  • 您可以调查是否有任何浏览器可以做您想做的事情,并且有足够的浏览器支持您解决问题


  • 为什么不在每次添加时创建一个自定义触发器呢?sticky类是元素吗

    触发器处理程序类似于:

    $('body').on('classAdded', function() {
       $(this).addClass('has-sticky');
    });
    
    触发块如下所示:

    function whatever() {
       // logic that adds the class to $('div') .......
       // at this point, your $('div') has the is-sticky class already right?
       $('body').trigger('classAdded');
    }
    

    触发器块将类似于调用处理程序的任何其他事件,如click/mouseenter。虽然这也可以是一个函数调用….

    这可能有点麻烦,但是您可以为
    是sticky
    类定义一个非常短的CSS转换,然后绑定到
    transitionend
    事件。使用它,您应该能够知道该特定类是何时添加到IE10+和evergreen浏览器中的


    不,这不是上的
    的目的……因为已经确定,您不能监视这样的类(至少不能没有变异的观察者),您通过监视该类实际想要实现什么?也许有人可以建议一个更好的方法。我想做的是观察类“.is sticky”动态添加到div。如果该类存在,那么我的jQuery将向body标记添加一个类。我原以为
    live()
    现在和将来都可以监视选择器,既然这样做毫无意义,我原以为
    on()
    就可以了。谢谢
    live()
    描述为:现在和将来为匹配当前选择器的所有元素附加一个事件处理程序。所以我认为
    on()
    应该能够匹配将来添加的选择器,因为据说它已经取代了
    live()
    我不是一个JS人,所以我只知道如何使用jQuery。任何其他的建议,以实现我想要的将是有益的。谢谢@Mark.C-
    .on()
    为“单击”、“按键”或“鼠标移动”等事件注册事件处理程序。。。。更改DOM对象上的类不会导致任何类型的事件,因此,
    .on()
    在监视类更改时没有任何用处。如果浏览器有一个事件调用
    classChanged
    ,当类被修改时,该调用会在任何DOM对象上触发,那么你就可以使用
    .on(“classChanged”)
    ,但这样的事情是不存在的。