2010-11-02 1 views
0

У меня есть сценарий JS, который создал новый узел и вставляет его на HTML-страницу. Я обрабатываю события мутации DOM и могу захватить событие DOMNodeInserted. Внутри этой функции я хочу узнать источник (т. Е. В какой части HTML есть функция скрипта вызывается) и целевой (то есть в какой части узел добавляется на страницу HTML).Как узнать, где инициируется событие javascript?

Я могу найти цель, используя event.target, но я не могу найти источник события.

Например, рассмотрим следующий псевдокод HTML страницу:

<html> 
<head> 
<script> 
    function test() { 
     //DOM access 
     <div_object>.setAttribute("attr", "value"); 
    } 
</script> 
</head> 
<body onload="test()"> 
    <div id="123"> 
    </div> 
</body> 
</html> 

Я хочу, чтобы мой источник, чтобы быть ТЕЛА (потому что это был сценарий инициируется), цель должна быть Div (123) (так как атрибут добавляется div_123.

Как я могу это сделать?

ответ

0

К сожалению, вы не можете выяснить, какой кусок кода вызвало событие, чтобы быть вызваны, они полностью развязаны. Вам нужно будет задействовать код запуска, сохраняя значения собственных значений this/event.target в переменной для запуска кода позже.

Но тогда, если у вас есть такое сотрудничество, вам не нужны DOM Mutation Events.

Если у вас есть обработки слоя события (как часть рамки многих JS), вы могли бы поставить this/target отслеживание в этом слое, поэтому инициируемый код может спросить: «Что было последним событием, выстрелило, передо мной ?».

Но я не уверен, что это того стоит. Обычно лучше всего добавлять свои собственные кооперативные крючки, которые обмениваются данными между компонентами; вы не можете вообще полагаться на DOM Mutation Events, так как они не глобально и полностью поддерживаются (или вообще поддерживаются на IE < 9).

0

насчет

<html> 
<head> 
<script> 
    function test(element) { 
     //DOM access 
     element.setAttribute("attr", "value"); 
    } 
</script> 
</head> 
<body onload="test(this)"> 
    <div id="123"> 
    </div> 
</body> 
</html> 

?

+0

Вы имеете в виду функцию test (element) {alert (element.tagName); .... Он хотел установить атрибут на div – mplungjan

0

Интересно. Я посмотрел здесь (ответил получить форматирование)

<html> 
<head> 
<script> 
function test(e) { 
    if (e) var event=e; 
//DOM access 
    var t=""; 
    for (o in event) t+='<br/>'+o+':'+event[o] 
    document.getElementById('d123').innerHTML=t; 
} 
</script> 
</head> 
<body onload="test(event)"> 
    <div id="d123"> 
    </div> 
</body> 
</html> 
+0

Спасибо за ваш ответ. Мне не разрешено изменять исходный JS, то есть мне не разрешено изменять вызов функции «test()». Ваше решение состоит в том, чтобы изменить этот вызов. – Praveen

+0

Morevoer, я должен найти источник доступа DOM в обработчике событий мутации, а не в функции test(). Когда возникает setAttribute, он вызывает событие DOMAttrModified. Я должен справиться с этим и найти источник события, который является «телом». В случае дальнейших разъяснений, не стесняйтесь спрашивать. – Praveen

 Смежные вопросы

  • Нет связанных вопросов^_^