setAttribute
Prototypeにコールバックを追加することは可能ですか?
alert("done !")
この例では、いつsetAttribute()
終了するかを示したいと思います。
img.setAttribute("src", "http://blabla.com/c.jpg");
setAttribute
Prototypeにコールバックを追加することは可能ですか?
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()
フォールバックを使用してイベント リスナーを追加することは言うまでもありません。