javascript - 如何构建不改变的DOM的缓存

标签 javascript jquery html caching dom

所以我尝试构建 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/

相关文章:

javascript - Node JS - 如何将流式大 json 数据写入 json 数组文件?

javascript - 如何在 onchange 事件期间访问选择框中的数据值

html - 条件 CSS 无法正常工作?

javascript - jQuery 表单验证不验证

javascript - 检查复选框是否被选中/为真,然后显示一个 div

php - PHP 中递归函数的替代方案(避免 100 次递归的限制)

javascript - Bizrate 弹出式现场商家代码禁用 Magento 页面

javascript - JQuery:这段代码是什么意思?

javascript - 在 Angular Component 类中调用自定义 jQuery 函数

jQuery - 将文本从选择列表复制/移动到文本区域