Javascript 检测何时将元素添加到自定义元素

Javascript 检测何时将元素添加到自定义元素,javascript,html,events,Javascript,Html,Events,我想检测是否从自定义元素中添加(或删除)了元素。例如,考虑下面的自定义元素 <x-foo> <div></div> <div></div> <div></div> </x-foo> 例如,是否有一个生命周期回调方法(如属性更改方法)来检测此问题?您可以使用元素.addEventListener('DOMNodeInserted',function(){})和元素.attach

我想检测是否从自定义元素中添加(或删除)了元素。例如,考虑下面的自定义元素

<x-foo>
    <div></div>
    <div></div>
    <div></div>
</x-foo>

例如,是否有一个生命周期回调方法(如属性更改方法)来检测此问题?

您可以使用
元素.addEventListener('DOMNodeInserted',function(){})
元素.attachEvent(“onpropertychange”,function(){})
但它不适用于所有浏览器。

您可以使用
元素.addEventListener('DOMNodeInserted',function(){})
元素.attachEvent('onpropertychange',function(){})
但它不适用于所有浏览器。

您可以使用
元素.addEventListener('DOMNodeInserted',function(){})
元素.attachEvent(“onpropertychange”,function(){})
但它不能在所有浏览器上运行。

您可以使用
元素.addEventListener('domandeinserted',function(){})
元素.attachEvent(“onpropertychange,function(){})
但它并不是在所有浏览器上都能工作。

超级酷的是,你可以通过css动画收听插入。只需添加一个持续时间有限的不易察觉的css动画,然后聆听它的开始。这样做,您就不会监听元素(甚至更糟的是,整个文档)上的所有DomainDeInserted事件。您将只处理将div附加到x-foo的事件

当您将许多不同的内容附加到父对象时,此技术非常棒。。。例如,它非常适合在某个类中添加div

1)添加CSS

向要侦听其插入的元素添加非常短、不可注意的动画

注意:您必须为css添加前缀

<style>
  x-foo > div {
      animation-duration: 0.001s;
      animation-name: nodeInserted;
  }

  @keyframes nodeInserted {  
    from { opacity: 0.99; }
    to { opacity: 1; }  
  }
</style>
3)JS-定义处理程序主体-回调主体,其代码将在向x-foo添加div时执行。 您还可以将其直接添加到处理程序中

function xfooHasNewDivHandler(div) {
  div.style.color = 'red';

  //x-foo-has-new-div stuff...
}
4)注册事件侦听器-告诉文档侦听动画的开始

['', 'MS', 'webkit'].forEach(function(prefix) {
    var animEvtName = "AnimationStart";

    prefix || (animEvtName = animEvtName.toLowerCase()), 
              (animEvtName = prefix+animEvtName);

    document.addEventListener(prefix+animEvtName, nodeInsertedListener, false);
});

我认为这个方法很酷,希望它能帮助任何人阅读。

超级酷的是,你可以通过css动画收听插入内容。只需添加一个持续时间有限的不易察觉的css动画,然后聆听它的开始。这样做,您就不会监听元素(甚至更糟的是,整个文档)上的所有DomainDeInserted事件。您将只处理将div附加到x-foo的事件

当您将许多不同的内容附加到父对象时,此技术非常棒。。。例如,它非常适合在某个类中添加div

1)添加CSS

向要侦听其插入的元素添加非常短、不可注意的动画

注意:您必须为css添加前缀

<style>
  x-foo > div {
      animation-duration: 0.001s;
      animation-name: nodeInserted;
  }

  @keyframes nodeInserted {  
    from { opacity: 0.99; }
    to { opacity: 1; }  
  }
</style>
3)JS-定义处理程序主体-回调主体,其代码将在向x-foo添加div时执行。 您还可以将其直接添加到处理程序中

function xfooHasNewDivHandler(div) {
  div.style.color = 'red';

  //x-foo-has-new-div stuff...
}
4)注册事件侦听器-告诉文档侦听动画的开始

['', 'MS', 'webkit'].forEach(function(prefix) {
    var animEvtName = "AnimationStart";

    prefix || (animEvtName = animEvtName.toLowerCase()), 
              (animEvtName = prefix+animEvtName);

    document.addEventListener(prefix+animEvtName, nodeInsertedListener, false);
});

我认为这个方法很酷,希望它能帮助任何人阅读。

超级酷的是,你可以通过css动画收听插入内容。只需添加一个持续时间有限的不易察觉的css动画,然后聆听它的开始。这样做,您就不会监听元素(甚至更糟的是,整个文档)上的所有DomainDeInserted事件。您将只处理将div附加到x-foo的事件

当您将许多不同的内容附加到父对象时,此技术非常棒。。。例如,它非常适合在某个类中添加div

1)添加CSS

向要侦听其插入的元素添加非常短、不可注意的动画

注意:您必须为css添加前缀

<style>
  x-foo > div {
      animation-duration: 0.001s;
      animation-name: nodeInserted;
  }

  @keyframes nodeInserted {  
    from { opacity: 0.99; }
    to { opacity: 1; }  
  }
</style>
3)JS-定义处理程序主体-回调主体,其代码将在向x-foo添加div时执行。 您还可以将其直接添加到处理程序中

function xfooHasNewDivHandler(div) {
  div.style.color = 'red';

  //x-foo-has-new-div stuff...
}
4)注册事件侦听器-告诉文档侦听动画的开始

['', 'MS', 'webkit'].forEach(function(prefix) {
    var animEvtName = "AnimationStart";

    prefix || (animEvtName = animEvtName.toLowerCase()), 
              (animEvtName = prefix+animEvtName);

    document.addEventListener(prefix+animEvtName, nodeInsertedListener, false);
});

我认为这个方法很酷,希望它能帮助任何人阅读。

超级酷的是,你可以通过css动画收听插入内容。只需添加一个持续时间有限的不易察觉的css动画,然后聆听它的开始。这样做,您就不会监听元素(甚至更糟的是,整个文档)上的所有DomainDeInserted事件。您将只处理将div附加到x-foo的事件

当您将许多不同的内容附加到父对象时,此技术非常棒。。。例如,它非常适合在某个类中添加div

1)添加CSS

向要侦听其插入的元素添加非常短、不可注意的动画

注意:您必须为css添加前缀

<style>
  x-foo > div {
      animation-duration: 0.001s;
      animation-name: nodeInserted;
  }

  @keyframes nodeInserted {  
    from { opacity: 0.99; }
    to { opacity: 1; }  
  }
</style>
3)JS-定义处理程序主体-回调主体,其代码将在向x-foo添加div时执行。 您还可以将其直接添加到处理程序中

function xfooHasNewDivHandler(div) {
  div.style.color = 'red';

  //x-foo-has-new-div stuff...
}
4)注册事件侦听器-告诉文档侦听动画的开始

['', 'MS', 'webkit'].forEach(function(prefix) {
    var animEvtName = "AnimationStart";

    prefix || (animEvtName = animEvtName.toLowerCase()), 
              (animEvtName = prefix+animEvtName);

    document.addEventListener(prefix+animEvtName, nodeInsertedListener, false);
});
我认为这个方法很酷,希望它能帮助任何人阅读。并且从标准中删除,你应该使用它

要停止侦听,需要调用
observer.disconnect()

并从标准中删除,您应该使用其

要停止侦听,需要调用
observer.disconnect()

并从标准中删除,您应该使用其

要停止侦听,需要调用
observer.disconnect()<