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

时间:2017-03-06 09:35:12

标签: javascript jquery

我需要在从一个元素中删除一个类时调用一个函数,我无法控制何时删除该类。

目前我可以使用setTimeout使其工作,所以它类似于:

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

setTimeout(checkClassRemoval, 1000);

除了每秒运行一次检查之外,是否有更好的方法来捕获课程?

2 个答案:

答案 0 :(得分:8)

您可以使用MutationObserver课程。它允许在发生此更改时订阅特定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'] });

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

答案 1 :(得分:1)

你可以覆盖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")
    });
});