在突变观察器下添加的元素在删除后抛出错误
added element under mutation observer throws an error after removed
嗨,
我有html这样的代码
<div id="box"></div>
然后我有这个观察者,所以如果添加了一个添加了数据的元素,就会执行一个函数。
new MutationObserver((mutations) => {
for (let mutation of mutations) {
if (mutation.type === 'childList' && mutation.addedNodes[0].dataset.added) {
loadstuff();
}
}
}).observe(box, {childList: true});
它有效,但当我删除元素时,我在控制台上收到此错误:
未捕获类型错误:mutation.addedNodes[0] 未定义
Fiddle 这里:https://jsfiddle.net/dc63r7bg/1/
我怎样才能摆脱这个错误?
谢谢。
您可以使用 optional chaining operator:
var box = document.getElementById("box");
function addit() {
box.insertAdjacentHTML('afterbegin', '<span id="elm" data-added="yes">element</span>');
}
function removeit() {
document.getElementById("elm").remove();
}
new MutationObserver((mutations) => {
for (let mutation of mutations) {
if (mutation.type === 'childList' && mutation.addedNodes[0]?.dataset.added) {
console.log('added');
}
}
}).observe(box, {
childList: true
});
<div id="box"></div>
<button onclick="addit()">Add</button>
<button onclick="removeit()">Remove</button>
嗨,
我有html这样的代码
<div id="box"></div>
然后我有这个观察者,所以如果添加了一个添加了数据的元素,就会执行一个函数。
new MutationObserver((mutations) => {
for (let mutation of mutations) {
if (mutation.type === 'childList' && mutation.addedNodes[0].dataset.added) {
loadstuff();
}
}
}).observe(box, {childList: true});
它有效,但当我删除元素时,我在控制台上收到此错误:
未捕获类型错误:mutation.addedNodes[0] 未定义
Fiddle 这里:https://jsfiddle.net/dc63r7bg/1/
我怎样才能摆脱这个错误?
谢谢。
您可以使用 optional chaining operator:
var box = document.getElementById("box");
function addit() {
box.insertAdjacentHTML('afterbegin', '<span id="elm" data-added="yes">element</span>');
}
function removeit() {
document.getElementById("elm").remove();
}
new MutationObserver((mutations) => {
for (let mutation of mutations) {
if (mutation.type === 'childList' && mutation.addedNodes[0]?.dataset.added) {
console.log('added');
}
}
}).observe(box, {
childList: true
});
<div id="box"></div>
<button onclick="addit()">Add</button>
<button onclick="removeit()">Remove</button>