2017-03-06 32 views
2

クラスから要素が削除されたときに関数を呼び出す必要があります。クラスが削除された時点を制御できません。コードでクラスを検出するコントロールがありません

は現在、私はそれがsetTimeoutメソッドを使用して動作させることができますので、それはのようなものです:

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

setTimeout(checkClassRemoval, 1000); 

チェック秒ごとに実行しているよりも、クラスの除去をキャッチするためのより良い方法はありますか?

+0

クラスの削除がjQueryによって行われたかどうか知っていますか? – Tschallacka

+0

突然変異の観察者はあなたがこれに従うことができる別のアプローチです。 – Jai

+0

[jqueryでクラスが削除されているかどうかを確認することができます](http://stackoverflow.com/questions/4657972/is-it-possible-to-checka-if-a-class-is-removed -in-jquery) – rahulsm

答えて

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'] }); 

このオブジェクトのサポートのためにあなたがaddClass/removeClass jQueryの関数をオーバーライドして、このようにそれらを拡張することができますcanIuse.com

1

を参照してください。 :

(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") 
    }); 
}); 
関連する問題