所以我尝试构建 DOM 的缓存:
var DOM = document.getElementsByTagName('*');
但是,DOM 变量似乎是动态引用,因此如果我更改 DOM 中的元素,DOM
变量也会更改。
我尝试迭代 DOM
变量并使用 cloneNode
方法创建每个节点的深拷贝。这是有效的,因为当我更改 DOM 时它不会改变。但是,问题是当您使用 ===
运算符进行比较时,克隆节点并不等于其原始 DOM 节点。
总而言之,我希望创建一个 DOM 缓存,该缓存不会更改,但其节点仍然等于原始 DOM 节点。
最佳答案
document.getElementsByTagName
返回一个“实时”NodeList
,这根本不是您想象的那样。当您访问列表时,每次都会遍历 DOM(实现可能会缓存它)以获取结果。这给人一种列表处于事件状态的错觉。
document.getElementsByTagName("div") === document.getElementsByTagName("div")
//true
要做你想做的事,只需将其转换为数组即可。 DOM = [].slice.call(DOM)
关于javascript - 如何构建不改变的DOM的缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11061184/