setAttributePrototypeにコールバックを追加することは可能ですか?
alert("done !")この例では、いつsetAttribute()終了するかを示したいと思います。
img.setAttribute("src", "http://blabla.com/c.jpg");
setAttributePrototypeにコールバックを追加することは可能ですか?
alert("done !")この例では、いつsetAttribute()終了するかを示したいと思います。
img.setAttribute("src", "http://blabla.com/c.jpg");
根本的な解決策ではないかもしれませんが、
img.setAttribute("src", "http://blabla.com/c.jpg");
img.onload = imageCallback;
function imageCallback() { ... }
jQuery に興味がある場合は、waitforimagesというプラグインが役立つかもしれません。
できますが、お勧めしません。
(function() {
var elementSetAttribute = Element.prototype.setAttribute;
Element.prototype.setAttribute = function() {
whateverFunctionYouWant.call(this);
return elementSetAttribute.apply(this, arguments);
}
})();
jsFiddle .
などの操作を行うと呼び出さwhateverFunctionYouWant()れますdocument.links[0].setAttribute('href', '/')。
src要素の属性を変更しimg、新しいリソースがロードされたときに、これがコールバックを呼び出すようにしたいようです...
(function() {
var HTMLImageElementSetAttribute = HTMLImageElement.prototype.setAttribute;
HTMLImageElement.prototype.setAttribute = function(attribute, value) {
var image;
if (attribute == 'src') {
image = new Image;
image.addEventListener('load', loaded, false);
image.src = value;
}
return HTMLImageElementSetAttribute.apply(this, arguments);
}
})();
jsFiddle .
setAttribute()ここで、コールバックとなる 3 番目のパラメーターを使用してオーバーロードできます。
私の意見と経験では、これを行う代わりに別の関数を作成します。プロトタイプを変更することは 1 つのことですが、ネイティブ DOM メソッドをオーバーロードして余分なことを行うことは、特にあなたが行ったことに慣れていない開発者がコードを見ると、トラブルを招くように思えます。
後者の例を IE9 より前で動作させたい場合は、attachEvent()フォールバックを使用してイベント リスナーを追加することは言うまでもありません。