Il problema immediato è che una proprietà attrName
non fa parte dell'oggetto dell'oggetto jQuery ... è necessario utilizzare . Ecco un esempio di farlo funzionare:
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);
DEMO:http://jsfiddle.net/R5rTy/1/
Il setTimeout
è quello di simulare l'evento in modo casuale accadendo.
A quanto pare, l'evento DOMAttrModified
non è supportata in tutti i browser - http://help.dottoro.com/ljfvvdnm.php#additionalEvents
UPDATE:
Utilizzando la più recente MutationObserver
, il seguente mostra l'uso di entrambe le idee:
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);
DEMO:http://jsfiddle.net/ybGCF/
Riferimento:
La proprietà 'attrName' non è parte di oggetto dell'evento di jQuery ... è necessario utilizzare' e.originalEvent.attrName' – Ian
Unrelated, Ma gli eventi di mutazione sono stati deprecati. Probabilmente potresti voler dare un'occhiata a Mutation Observers – PSL
@PSL Direi che è correlato. Menzionare la deprecazione è molto importante, quindi ottimo punto. E ho visto il tuo commento sulla mia risposta - mi spiace, dobbiamo aver creato i nostri violini e averli pubblicati nello stesso momento. Quando ho visto il tuo commento qui, ho capito che sarebbe stata una buona idea dare almeno un esempio con 'MutationObserver' – Ian