DOM: Как определить новые дочерние элементы?

Я хочу обнаружить вставку нового элемента 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>

Ответ 1

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

function(evt) {
    // whatever
}

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

Посмотрите на действие.

Ответ 2

Используйте 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 );

Ответ 3

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