首页 > 解决方案 > 什么算作查询 DOM?

问题描述

如果我做:

const table = document.getElementById('table1');

接着

const cell = table.rows.item(1).cells.item(1);

我在第二个操作中查询 DOM 吗?

标签: javascriptdom

解决方案


是的,Node.childNodesor的任何变体都会Node.parentNode查询 DOM。

我们在 JS 世界中可以访问的 Node 对象只是实际 DOM 对象的包装对象。这些包装器对象不包含指向 DOM 树的所有链接,它们所做的只是公开将调用内部 DOM 方法以“查询 DOM”的 getter 函数。

所以即使是抛出 TypeError 的行(因为你可能会item混淆find

const cell = table.rows.find(1).cells.find(1);

将从.rowsgetter 中查询 DOM。

然而,对变量的简单访问table并没有查询 DOM,您确实存储了包装器对象,它保留了对底层 DOM 对象的引用。

请注意,一个例外是“命名元素”(带有 的元素id),它们存储在可以在 Window 对象上直接访问的 Map 中,因此可以访问 JS。所以实际上,在第一行中你没有查询 DOM。

现在,这有关系吗?不是真的,而且今天的引擎有多快。


推荐阅读