これは本当に存在しない理由は2つあります。
- DOM変更イベントは広くサポートされていません。 ChromeとFFでは
DOMSubtreeModified
を聞くことができますが、IEとOperaでは聞こえません。
- すべてのDOMイベントをセレクタに対してチェックするのは非常にコストがかかります。
.live/.delegate
は、既にかなり戦略的に非効率的です。
図2を手助けするために、1は問題ではないと想像して、要素がDOMに追加されるたびにキャプチャできます。この場合、新しい要素とその子要素を"#myTable tr"
に対して評価する必要があります。これにより、で実行される非ネイティブコードの量が大幅に増加し、範囲内で DOMが変更されるたびに実際に処理が遅くなります。
最善の戦略は、あなたがとのみChromeとFFをサポートする必要が選択肢がない場合は<tr>
UPDATEを挿入することになるコードにご希望のjQueryの変更を加えることで、一つの解決策があります私は考えることができます。もちろん、それは速くなりません、あなたは、特異を通して、あなたのパフォーマンスを向上させることができます
$.fn.elementInserted = function(pattern, fn) {
return this.bind('DOMNodeInserted', function(event) {
if (event.target.nodeType != 1) return;
$(event.target).filter(pattern).each(fn);
});
};
/* SLOW */ $(document).elementInserted('#myTable tr', function(){$(this).attr('hello', 'world');});
/* FASTER */ $('#myTable').elementInserted('tr', function(){$(this).attr('hello', 'world');});
は、ここで例を参照してください:http://jsfiddle.net/vCZHQ/
表は、タイムアウトをすることによってIEに変更された場合は、理論的にチェックすることができます:
var oldEls = $('#myTable tr');
setInterval(function() {
var newEls = $('#myTable tr');
if(oldEls.length < newEls.length) {
/* Do code here to figure out who is new and apply changes. */
}
oldEls = newEls;
}, 50);
これは、これにはわずかな遅延があり、実際にはノートパソコンのバッテリが消費されると述べています。
をチェックアウトhttp://stackoverflow.com/questions/7692730/dom-mutation-event-in-javery-or-vanilla-javscript/7749629#7749629 –