拿一张简单的桌子,比如:
<table id="fu">
<tr>
<th>A</th>
<th>B</th>
</tr>
<tr>
<td>1</td>
<td>2</td>
</tr>
</table>
我得到顶部元素“fu”,然后我用两种方法之一到达 0,0 单元格。
fu.children[0].children[0].cells[0]
或
fu.children[0].children[0].children[0]
我明白children和childNodes的区别,但是cells和children好像是一样的。如果我在调试器中查看它们,我会看到:
fu.children[0].children[0].
...
cells: HTMLCollection(2) [th, th]
childElementCount: 2
childNodes: NodeList(5) [text, th, text, th, text]
children: HTMLCollection(2) [th, th]
...
有什么区别,我应该使用 .cells 还是 .children 还是没关系?这似乎并不重要,但我担心在某些情况下它们可能会破坏我的代码。
谢谢
由于表格行可以拥有的唯一子元素是单元格,因此在
tr
元素上使用时两者之间没有实际区别。
children
属性适用于 DOM 中的所有元素,但来自较新的规范,cells
因此在某些古老和过时的浏览器上不受支持。
cells
和children
不一样。
cells
仅包括 th
和 td
,而 children
可以包括任何 HTMLElement.
如果你在 Chrome 中运行它:
<html>
<body>
<table id="table1">
<tr>
<td>CellOne</td>
<td>CellTwo</td>
<script>console.log('hello world');</script>
<td>CellThree</td>
</tr>
</table>
<script>
let concat = '';
let row0_children = document.getElementById("table1").rows[0].children;
concat = '>>> Summary: \n' + 'Length of row_0.children = ' + row0_children.length + ', including:\n';
for (const v of row0_children) concat += '-' + v.innerText + '\n';
console.log(concat);
let row0_cells = document.getElementById("table1").rows[0].cells;
concat = '>>> Summary: \n' + 'Length of row_0.cells = ' + row0_cells.length + ', including:\n';
for (const v of row0_cells) concat += '-' + v.innerText + '\n';
console.log(concat);
</script>
</body>
</html>
>>> Summary:
Length of row_0.children = 4, including:
-CellOne
-CellTwo
-console.log('hello world');
-CellThree
>>> Summary:
Length of row_0.cells = 3, including:
-CellOne
-CellTwo
-CellThree