javascript - 为什么 MutationRecord[] 是一个数组?(突变观察)
问题描述
我正在学习MutationObserve,我几乎可以得到它,但我唯一感到困惑的是为什么参数需要一个数组。
文件说:
我需要一个例子mutationRecordList.length > 1
<h2 id="testNode" onclick="addTimeNode(this)">Click me!</h2>
<script>
function addTimeNode(node) {
const nodeP = document.createElement("p")
const today = new Date()
nodeP.innerText = [today.getHours(), today.getMinutes(), today.getSeconds()].join(":")
node.append(nodeP)
}
(
() => {
window.onload = () => {
const observer = new MutationObserver((mutationRecordList, observer)=>{
if (mutationRecordList.length > 1){
console.log("Thanks. This is what I want!") //
}
console.log(observer.name)
for(const mutation of mutationRecordList) {
const target = mutation.target
switch(mutation.type) {
case "childList":
console.log('A child node has been added or removed.')
break
}
if (target.childNodes.length > 2) {
observer.disconnect()
console.log('disconnect observer')
}
}
})
observer.name = "test observer"
observer.observe(document.getElementById('testNode'), {
// https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver/observe#parameters
childList: true,
})
}
}
)()
</script>
解决方案
谢谢@wOxxOm,我认为下面是在同一个事件循环周期中许多单独的 DOM 操作的演示。
<h2 id="testNode" onclick="addTimeNode(this)">Click me!</h2>
<script>
function addTimeNode(node) {
const nodeP = document.createElement("p")
const nodeP2 = document.createElement("p")
nodeP.className = "test-add"
nodeP2.className = "test-delete"
const today = new Date()
nodeP.innerText = [today.getHours(), today.getMinutes(), today.getSeconds()].join(":")
node.append(nodeP, nodeP2)
node.querySelector(`p[class="test-delete"]`).remove()
}
(
() => {
window.onload = () => {
const observer = new MutationObserver((mutationRecordList, observer)=>{
if (mutationRecordList.length > 1){
console.log(`Thanks. This is what I want. length:${mutationRecordList.length}`) //
}
console.log(observer.name)
let i = 0
for(const mutation of mutationRecordList) {
console.log(`mutationRecordList[${i++}]`)
const target = mutation.target
switch(mutation.type) {
case "childList":
for (const node of mutation.addedNodes) {
console.log(`A child node has been added. className:${node.className}`)
}
for (const node of mutation.removedNodes) {
console.log(`A child node has been removed. className:${node.className}`)
}
break
}
if (target.childNodes.length > 2) {
observer.disconnect()
console.log('disconnect observer')
}
}
console.log('----')
})
observer.name = "test observer"
observer.observe(document.getElementById('testNode'), {
// https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver/observe#parameters
childList: true,
})
}
}
)()
</script>
推荐阅读
- python - Python Beautiful Soup,如何获取内容
- laravel - 将集合中的 created_at 值更改为碳人类可读
- javascript - 在 ES6 中过滤对象以形成另一个对象
- c++ - 在编译时生成某种子类/类型注册表?
- extjs - extjs6图表,动态创建多条线
- python - 在 TensorflowJS 中构建神经网络
- javascript - 函数内的多个 Get 请求
- excel - 如何将列数据合并为一行?
- python - 如何在 TensorFlow 中使用 He 初始化
- c# - Visual Studio 从哪里读取 web.config 文件?