Есть ли какое-либо onDocumentChange событие?

составьте, создайте, генерируйте, представьте, уплотните, уменьшите, toSQL, toString в зависимости от природы класса и его связанных операторов

6
задан Jakub Kulhan 2 August 2009 в 08:35
поделиться

3 ответа

"Решение" методом перебора:

(function (previousInnerHTML) {
    return function () {
        if (document.body.innerHTML !== previousInnerHTML) {
            alert("you've just (at max 33ms ago) changed DOM");
        }
        setTimout(arguments.callee, 33);
    };
})(document.body.innerHTML)();
9
ответ дан 8 December 2019 в 18:39
поделиться

. Вы хотите просмотреть события мутации dom - см. http://en.wikipedia.org/wiki/DOM_Events , и прокрутите вниз до раздела о событиях мутации. Единственная проблема в том, что поддержка этих событий довольно отрывочна, поэтому будьте осторожны при их использовании. Примечательно отсутствие поддержки вообще в IE или Opera. Firefox, Safari и Chrome кажутся единственными.

Что-то вроде:

document.addEventListener("DOMSubtreeModified", function () {
    alert("you've just changed DOM!");
});

Согласно http://www.quirksmode.org/dom/events/index.html для такого рода события вам нужно использовать addEventListener, а не attachEvent. Примечательно отсутствие поддержки вообще в IE или Opera. Firefox, Safari и Chrome кажутся единственными.

Что-то вроде:

document.addEventListener("DOMSubtreeModified", function () {
    alert("you've just changed DOM!");
});

Согласно http://www.quirksmode.org/dom/events/index.html для такого рода события вам нужно использовать addEventListener, а не attachEvent. Примечательно отсутствие поддержки вообще в IE или Opera. Firefox, Safari и Chrome кажутся единственными.

Что-то вроде:

document.addEventListener("DOMSubtreeModified", function () {
    alert("you've just changed DOM!");
});

Согласно http://www.quirksmode.org/dom/events/index.html для такого рода события вам нужно использовать addEventListener, а не attachEvent. Событие очевидно пузырится, так что все должно быть хорошо.

3
ответ дан 8 December 2019 в 18:39
поделиться

Совершенно верно, это может работать:

document.body.attachEvent('onpropertychange', function(event) {
  if (event.propertyName !== 'innerHTML') return;
  alert("you've just changed DOM!");
});

Это зависит от проприетарного события IE [onPropertyChange] ( http://msdn.microsoft.com/en -us / library / ms536956 (VS.85) .aspx) - поскольку документ innerHTML будет изменяться всякий раз, когда вставляется узел. Но:

  1. Это может не работать с некоторыми типами свойств. Я предполагаю, что innerHTML будет функционировать как «получатель», поскольку он будет пересчитываться только при извлечении.

  2. Он также обнаружил бы много ложных срабатываний - множество других вещей изменили бы innerHTML , что не имело бы никакого отношения к вставке узла. Вы можете смягчить это, прослушивая определенный элемент, а не весь документ.

1
ответ дан 8 December 2019 в 18:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: