什么算查询DOM?

What counts as querying the DOM?

如果我这样做:

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

然后

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

我是在第二次查询DOM吗?

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

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

所以即使是抛出 TypeError 的行(因为你可能混淆了 itemfind

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

将从.rows getter查询DOM。

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

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

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