ДОМ: Как обнаружить новые дочерние элементы? - PullRequest
10 голосов
/ 15 января 2012

Я хочу обнаружить вставку нового элемента div только в качестве прямого потомка родителя div.

Пример:

<div id="parent">
    <div id="child1"></div>
    <div id="child2"></div>
    <div id="newChild">I want this element to be detected</div>
</div>

Событие DOMNodeInserted() не является для меня решением, потому что оно запускается при каждом добавлении элемента, а не только дочерних элементов.

Как:

<div id="parent">
    <div id="child1">
        <span>I don't want this new element to be detected</span>
    </div>
    <div id="child2"></div>
    <div id="child3"></div>
</div>

Ответы [ 3 ]

7 голосов
/ 15 января 2012

Используйте DOMNodeInserted на родительском элементе и отметьте event.target.parentNode добавленного элемента.Если id равно parent, то элемент является прямым потомком.

Демо: http://jsfiddle.net/ThinkingStiff/f2w7V/

document.getElementById( 'parent' ).addEventListener( 'DOMNodeInserted', function ( event ) {

    if( event.target.parentNode.id == 'parent' ) {
        //direct descendant        
    };

}, false );
4 голосов
/ 15 января 2012

Предположим, ваш обработчик событий выглядит следующим образом:

function(evt) {
    // whatever
}

Внутри обработчика evt.relatedNode - это элемент, в который выполняется вставка.Вы можете включить его и принять решение проигнорировать или обработать событие.

Просмотреть его в действии .

0 голосов
/ 15 января 2012

Почему бы вам не использовать DOMNodeInserted, а добавить оператор check / if в обработчик событий, чтобы реальная логика выполнялась только тогда, когда вы этого хотите?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...