gpt4 book ai didi

javascript - 如何通过 DOMAttrModified 检测类更改

转载 作者:数据小太阳 更新时间:2023-10-29 05:48:19 25 4
gpt4 key购买 nike

我需要检测一些类更改,我将其用于此 DOMAttrModified,但出了点问题,什么?

var first_img = $('body').find('li:first').find('img');

first_img.on('DOMAttrModified',function(e){
if (e.attrName === 'class') {
if ($(this).hasClass('current-image')) {
$(this).removeClass().addClass('previous-image');
}
console.log('log');
}
});

谢谢你的建议。

最佳答案

眼前的问题是 attrName 属性不是 jQuery 事件对象的一部分……您需要使用 e.originalEvent.attrName。这是它的工作示例:

var first_img = $("body").find("div").first();

first_img.on("DOMAttrModified", function (e) {
if (e.originalEvent.attrName === "class") {
console.log("##DOMAttrModified, class changed");
if ($(this).hasClass("current-image")) {
console.log("##Element has 'current-image' class, changing");
$(this).removeClass().addClass("previous-image");
}
}
});

setTimeout(function () {
first_img.addClass("current-image");
}, 1000);

演示: http://jsfiddle.net/R5rTy/1/

setTimeout是模拟事件随机发生。

显然,并非所有浏览器都支持 DOMAttrModified 事件 - http://help.dottoro.com/ljfvvdnm.php#additionalEvents


更新:

使用较新的MutationObserver,下面展示两种思路的使用:

var firstImg, observerConfig, firstImgObserver;

firstImg = $("body").find("div").first();
observerConfig = {
attributes: true,
childList: true,
characterData: true
};
firstImgObserver = new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
var newVal = $(mutation.target).prop(mutation.attributeName);
if (mutation.attributeName === "class") {
console.log("MutationObserver class changed to", newVal);
} else if (mutation.attributeName === "id") {
console.log("MutationObserver id changed to", newVal);
}
});
});

firstImgObserver.observe(firstImg[0], observerConfig);
// later, you can stop observing
//observer.disconnect();

firstImg.on("DOMAttrModified", function (e) {
var newVal = $(this).prop(e.originalEvent.attrName);
console.log("DOMAttrModified", e.originalEvent.attrName, "changed to", newVal);
});

setTimeout(function () {
firstImg.addClass("previous-image").addClass("fdsa");
}, 1000);

演示: http://jsfiddle.net/ybGCF/

引用:

关于javascript - 如何通过 DOMAttrModified 检测类更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17172470/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com