Есть два способа сделать это ...
Один, вы можете сделать снимок dom (var snap = document.body
), сравнить его с dom через 100 мс, а затем сбросить snap
натело снова.Я позволю вам проявить творческий подход к тому, как их сравнить: итерация, кажется, является общим ответом.Это не красиво.
Другой вариант - иметь специальную функцию в любых функциях, которые вы создаете, которые добавляют / удаляют элементы в вашем приложении.Эта функция перебирает только те элементы, которые вы добавляете (или уничтожаете), и ищет совпадения.
/* 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]);
}
}
}
}
Это может быть не идеально, но это должно дать вам представление о том, куда идти.Вызовите эту функцию (добавление ToDom), передавая элементы, которые вы только что добавили в качестве аргумента.Создайте аналогичную функцию для удаления элементов (или ту же функцию, но при условии создания отдельного массива обратных вызовов).
Это экстраполяция текущего (большого и грязного) кода, который я использую для проверки некоторых идей.Я проверял селектор совпадений еще с ie7 с этим шимом, и он, кажется, прекрасно работает!
Я рассмотрел, но не рассматривал возможность того, что элемент имеет некоторый параметр, которыйможет быть установлен как функция, которая вызывается при добавлении, передавая себя в качестве параметра.НО, это, вероятно, надумано.