表格中细胞和孩子的区别

问题描述 投票:0回答:2

拿一张简单的桌子,比如:

<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 还是没关系?这似乎并不重要,但我担心在某些情况下它们可能会破坏我的代码。

谢谢

javascript html dom html-table
2个回答
1
投票

由于表格行可以拥有的唯一子元素是单元格,因此在

tr
元素上使用时两者之间没有实际区别。

children
属性适用于 DOM 中的所有元素,但来自较新的规范,
cells
因此在某些古老和过时的浏览器上不受支持。


1
投票

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
© www.soinside.com 2019 - 2024. All rights reserved.