【问题标题】:DOM : How to detect a new child elements?DOM:如何检测新的子元素?
【发布时间】:2012-01-15 01:31:36
【问题描述】:

我想检测插入的新 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>

【问题讨论】:

  • 你不能,想想是否有更好的解决方案,比如在注入 DOM 之前发出事件
  • 我没有页面的真正 js 代码,所以我不知道使用了女巫事件。仅将我的代码注入其中以检测某些内容
  • 免责声明: DOMNodeInserted 已弃用。
  • 被 MutationObservers 取代 - 对于迟到并想知道闪亮的新事物是什么的每个人:developer.mozilla.org/en-US/docs/Web/Guide/Events/…

标签: javascript jquery html dom


【解决方案1】:

在父元素上使用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 );

【讨论】:

【解决方案2】:

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

function(evt) {
    // whatever
}

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

See it in action.

【讨论】:

  • @NidhalRouissi - 你知道,这在 IE8 中似乎对我不起作用。
  • 没关系,这是一个谷歌浏览器扩展
【解决方案3】:

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2021-05-15
  • 1970-01-01
  • 2019-10-31
  • 2021-09-11
  • 1970-01-01
  • 2018-11-27
  • 2021-04-03
相关资源
最近更新 更多