我需要在从一个元素中删除一个类时调用一个函数,我无法控制何时删除该类。
目前我可以使用setTimeout使其工作,所以它类似于:
function checkClassRemoval() {
if (!$('.myElement').hasClass('mySecondClass')) {
// run function
}
}
setTimeout(checkClassRemoval, 1000);
除了每秒运行一次检查之外,是否有更好的方法来捕获课程?
答案 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")
});
});