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()代码><