什么算作查询 DOM?

时间:2021-08-02 00:02:13

标签: javascript dom

如果我这样做:

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

然后

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

我是否在第二次操作中查询 DOM?

1 个答案:

答案 0 :(得分:1)

是的,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 的元素),它们存储在可直接在 Window 对象上访问的 Map 中,因此可以被 JS 访问。所以实际上,在第一行中,您没有查询 DOM。

现在,这重要吗?不是真的,而且今天的引擎速度如此之快。