Есть ли идиоматический способ прослушивания изменений в DOM с использованием библиотеки Prototype? - PullRequest
2 голосов
/ 16 января 2009

Я пытаюсь добавить слушателя событий изменения DOM. Я надеялся, что что-то простое, например, «dom: загружен», было запечено в Prototype. Я не уверен в «прототипе», чтобы справиться с этим.

РЕДАКТИРОВАТЬ: я не могу контролировать каждый случай, в котором DOM может быть изменен, поэтому я не могу сработать при запуске пользовательского события при каждом изменении DOM.

Ответы [ 4 ]

3 голосов
/ 16 января 2009

Нет стандартного обработчика для просмотра этого. Однако вы можете запускать пользовательские события в Prototype. В сочетании с Function.wrap вы сможете делать именно то, что вам нужно.

По сути, вы берете любую функцию, которая может изменить DOM, такую ​​как Element.insert (), и оборачиваете ее функцией, которая запускает ваше событие изменения:

Element.prototype.insert = Element.prototype.insert.wrap(
function(original) {
    var ret = original.call(this, $A(arguments).slice(1));
    document.fire('dom:changed');
}.bind(this)
);

Теперь, когда бы вы ни вызывали Element.insert, он будет вызывать 'dom: change', который можно просмотреть с помощью Event.observe ().

Я не могу гарантировать, что то, что я только что написал, является на 100% совершенным и на 100% универсальным, но оно должно помочь вам начать.

1 голос
/ 16 января 2009

Я бы порекомендовал вам взглянуть на документацию для Event.observe из документации по прототипу.

В качестве примера, используя dom: загружен

document.observe("dom:loaded", function() {     
                // Some Javascript Code
                  });

И пример Event.observe

$('step_anchor_' + i).observe('click', function(a, b){
        return function(){pm.loadData(a, b, true)};
            }(profile.steps[i].action, profile.steps[i].dao_id)
                   );

Я должен отметить, что, очевидно, документ также имеет функцию наблюдения, специально предназначенную для прослушивания событий во всем документе, например dom: загружен.

0 голосов
/ 07 апреля 2011

Я думаю, что здесь уместный ответ: Может ли javascript прослушивать "onDomChange" на всех элементах Dom? . Проверьте DOMSubtreeModified, DOMNodeInserted и т. Д.

0 голосов
/ 16 января 2009

$ (element) .observe ('click', function (event) {someFunction (event);}); // someFunction будет вызываться при событии click. Это можно изменить на любое другое событие.

http://prototypejs.org/api

Перейдите в Элемент, чтобы увидеть больше.

...