如何确定是否已调用突变?
How to determine if mutation has been called?
我下面有这个变异观察者函数。问题是,如果满足“false”的条件,console.log 将在浏览器中记录多次。我认为解决此问题的最佳方法是在此处添加一些内容,如果满足突变则不会 运行 起作用。
在 else if 条件之后添加 mutationObserver.disconnect(); 是完成此操作的最佳方法吗?
window.addEventListener('DOMContentLoaded', (event) => {
// Listening to Class Changes //
var mutationObserver = new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
var change = mutation.target.classList.contains('hidden-class');
if (change === true) {
return true;
}
else if (change === false) {
console.log('this mutation is visible');
}
});
})
mutationObserver.observe(document.getElementById('cart-wrapper'), {
attributes: true,
characterData: true,
childList: true,
subtree: true,
attributeOldValue: true,
characterDataOldValue: true
});
});
改为使用 .some
来迭代突变并查看是否有任何目标的 class 列表包含 class:
var mutationObserver = new MutationObserver(function (mutations) {
const somethingJustMutatedIsHidden = mutations.some(
mutation => mutation.target.classList.contains('hidden-class')
);
if (somethingJustMutatedIsHidden) {
// do something?
} else {
console.log('this mutation is visible');
}
})
请记住 forEach
会忽略它的 return 值;您当前拥有的 return true
没有任何作用。
我下面有这个变异观察者函数。问题是,如果满足“false”的条件,console.log 将在浏览器中记录多次。我认为解决此问题的最佳方法是在此处添加一些内容,如果满足突变则不会 运行 起作用。
在 else if 条件之后添加 mutationObserver.disconnect(); 是完成此操作的最佳方法吗?
window.addEventListener('DOMContentLoaded', (event) => {
// Listening to Class Changes //
var mutationObserver = new MutationObserver(function (mutations) {
mutations.forEach(function (mutation) {
var change = mutation.target.classList.contains('hidden-class');
if (change === true) {
return true;
}
else if (change === false) {
console.log('this mutation is visible');
}
});
})
mutationObserver.observe(document.getElementById('cart-wrapper'), {
attributes: true,
characterData: true,
childList: true,
subtree: true,
attributeOldValue: true,
characterDataOldValue: true
});
});
改为使用 .some
来迭代突变并查看是否有任何目标的 class 列表包含 class:
var mutationObserver = new MutationObserver(function (mutations) {
const somethingJustMutatedIsHidden = mutations.some(
mutation => mutation.target.classList.contains('hidden-class')
);
if (somethingJustMutatedIsHidden) {
// do something?
} else {
console.log('this mutation is visible');
}
})
请记住 forEach
会忽略它的 return 值;您当前拥有的 return true
没有任何作用。