JQuery Detect类更改

Sat*_*000 17 javascript jquery

我使用的是添加了类插件open.slide-out-div打开时.

所以我试图改变一些css如果检测到打开.

我需要做的是

IF

$('.slide-out-div **open**') IS Detected then

$('.otherDiv').css('top','0px');
Run Code Online (Sandbox Code Playgroud)

不知道怎么把它们放在一起......

gdo*_*ica 30

没有事件class-added,您需要自己跟踪...

它可以通过无限循环来完成,setTimeout以检查类是否已更改.

function checkForChanges()
{
    if ($('.slide-out-div').hasClass('open'))
        $('.otherDiv').css('top','0px');
    else
        setTimeout(checkForChanges, 500);
}
Run Code Online (Sandbox Code Playgroud)

您可以在需要时调用该函数,或者在onDOM就绪时调用:

$(checkForChanges);
Run Code Online (Sandbox Code Playgroud)

  • 这会奏效.但是,如果你问我,这是一个非常肮脏的方法. (49认同)
  • @sieppl."变异事件"被**弃用**,因为它们具有巨大的性能影响. (15认同)
  • @gdoron - 他们不被弃用!(检查MDN)OLD是,变异观察者是检测变化的新方法.这是怎么回事 - http://stackoverflow.com/a/14570614/104380 (6认同)

Adi*_*i B 19

这个问题有点老了,但是因为我在寻找类似的问题时遇到了,我想我会分享我在这里遇到的解决方案 - Mutation Observers

在你的情况下,我会创建一个变异观察者

var mut = new MutationObserver(function(mutations, mut){
  // if attribute changed === 'class' && 'open' has been added, add css to 'otherDiv'
});
mut.observe(document.querySelector(".slide-out-div"),{
  'attributes': true
});
Run Code Online (Sandbox Code Playgroud)

每当.slide-out-div的属性发生变化时,都会调用变异观察器中的函数,因此需要在执行之前验证实际变化.

有关Mozilla文档页面的更多详细信息


Muh*_*eda 13

你可以使用attrchange jQuery插件.插件的主要功能是在HTML元素的属性更改上绑定侦听器函数.

代码示例:

$("#myDiv").attrchange({
    trackValues: true, // set to true so that the event object is updated with old & new values
    callback: function(evnt) {
        if(evnt.attributeName == "class") { // which attribute you want to watch for changes
            if(evnt.newValue.search(/open/i) == -1) { // "open" is the class name you search for inside "class" attribute

                // your code to execute goes here...
            }
        }
    }
});
Run Code Online (Sandbox Code Playgroud)