提问人:prettyInPink 提问时间:3/6/2017 最后编辑:TschallackaprettyInPink 更新时间:3/6/2017 访问量:2306
通过我无法控制的代码检测类删除
Detect class removal by code I have no control over
问:
当一个类被从元素中删除时,我需要调用一个函数,我无法控制何时删除该类。
目前我可以使用 setTimeout 让它工作,所以它是这样的:
function checkClassRemoval() {
if (!$('.myElement').hasClass('mySecondClass')) {
// run function
}
}
setTimeout(checkClassRemoval, 1000);
有没有比每秒运行一次检查更好的方法来捕获类的删除?
答:
10赞
VadimB
3/6/2017
#1
为此,您可以使用 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
评论
0赞
rzb
8/2/2019
我相信 attributes: true 在使用 attributeFilter 时是多余的。
1赞
diachedelic
8/22/2019
我需要指定而不是在 Chrome 上"class"
"className"
3赞
Nedim Hozić
3/6/2017
#2
您可以覆盖 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")
});
});
评论