Javascript 通过我无法控制的代码检测类删除

Javascript 通过我无法控制的代码检测类删除,javascript,jquery,Javascript,Jquery,当从元素中删除类时,我需要调用函数,我无法控制删除类的时间。 目前,我可以使用setTimeout使其正常工作,因此它类似于: function checkClassRemoval() { if (!$('.myElement').hasClass('mySecondClass')) { // run function } } setTimeout(checkClassRemoval, 1000); 是否有比每秒运行一次检查更好的方法捕获类的删除?

当从元素中删除类时,我需要调用函数,我无法控制删除类的时间。

目前,我可以使用setTimeout使其正常工作,因此它类似于:

function checkClassRemoval() {
    if (!$('.myElement').hasClass('mySecondClass')) {
        // run function
    }   
}   

setTimeout(checkClassRemoval, 1000);
是否有比每秒运行一次检查更好的方法捕获类的删除?

您可以使用类来完成此操作。它允许订阅特定的DOM元素更改,并在发生此更改时触发事件:

var observer = new MutationObserver(function(mutations) {
    mutations.forEach(function(mutationRecord) {
        console.log('style changed!');
    });    
});

var target = document.getElementById('someId');
observer.observe(target, { attributes : true, attributeFilter : ['style', 'className'] });

有关此对象的支持,请参阅

您可以覆盖addClass/removeClass jQuery函数并按如下方式扩展它们:

(function(){
    var nativeMethod= jQuery.fn.addClass;

    jQuery.fn.addClass = function(){
        var result = nativeMethod.apply( this, arguments );
        jQuery(this).trigger('cssClassChanged');
        return result;
    }
})();

//Your code:
$(function(){
    $("#yourElement").bind('cssClassChanged', function(){ 
        console.log("triggered")
    });
});

你知道这个类的删除是不是由jQuery完成的吗?变异观察者是另一个你可以遵循的方法。我不同意@guradio的可能重复,这是一个问题。没有进步question@guradio不在代码评审时,这将是一个非常离题的话题!在提出更多此类建议之前,请阅读他们的建议。我相信属性:true在使用attributeFilter时是多余的。我需要在Chrome上指定
“class”
,而不是
“className”