これを行うには2つの方法があります...
1 つ目は、dom のスナップショットを取り ( var snap = document.body
)、それを 100 ミリ秒後に dom と比較してsnap
から、本体に再度リセットすることです。それらを比較する方法については、創造力を働かせてみましょう。反復が一般的な答えのようです。それはきれいではありません。
もう 1 つのオプションは、アプリケーションで要素を追加/削除する作成する関数に特別な関数を含めることです。この関数は、追加 (または破棄) した要素だけを繰り返し処理し、一致するものを探します。
/* Shim matchesSelector */
if (!Element.prototype.matchesSelector) {
Element.prototype.matchesSelector =
Element.prototype.matches ||
Element.prototype.webkitMatchesSelector ||
Element.prototype.mozMatchesSelector ||
Element.prototype.msMatchesSelector ||
Element.prototype.oMatchesSelector;
}
function addingToDom(elm){
/* Whichever method you want to use to map selectors to functions */
var callbacks = array(['.class', fn-reference1], ['#id', fn-reference2], ['div', fn-reference3]);
/* go through all the elements you're adding */
for (var i = 0; i<elm.length; ++i){
/* go through all the selectors you're matching against */
for (var k = 0; k<callbacks.length ++k){
if(elm[i].matchesSelector(callbacks[k][0])){
/* call function with element passed as parameter */
callbacks[k][1](elm[i]);
}
}
}
}
それは完璧ではないかもしれませんが、どこに向かうべきかのアイデアを与えるはずです. 追加した要素を引数として渡して、この関数 (addingToDom) を呼び出します。要素を削除するための同様の関数を作成します (または同じ関数ですが、コールバックの別の配列を調整します)。
これは、いくつかのアイデアをテストするために使用している現在の (大きくて乱雑な) コードの外挿です。このシムを使用して ie7 までさかのぼってマッチセレクターをテストしましたが、うまく機能しているようです。
私は、要素が追加されたときに呼び出され、それ自体をパラメーターとして渡す関数として設定できる何らかのパラメーターを持つ可能性を検討しましたが、調べていません。しかし、それはおそらく大げさです。