DOM:如何检测新的子元素?

时间:2012-01-15 01:31:37

标签: javascript jquery html 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>

3 个答案:

答案 0 :(得分:7)

在父级上使用DOMNodeInserted并检查添加元素的event.target.parentNode。如果idparent,则该元素是直接后代。

演示:http://jsfiddle.net/ThinkingStiff/f2w7V/

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

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

}, false );

答案 1 :(得分:4)

假设您的事件处理程序如下所示:

function(evt) {
    // whatever
}

在处理程序内部,evt.relatedNode是执行插入的元素。您可以打开它并决定忽略或处理该事件。

<强> See it in action

答案 2 :(得分:0)

为什么不使用DOMNodeInserted,而是在事件处理程序中添加check / if-statement,以便真正的逻辑只在你想要的时候运行?