JavaScript-不是 <td> 的子节点<tr>吗?



以下代码运行良好,我能够获得所选行的第一个单元格的值:

document.getElementById("tst").onclick = function() {
var chosen = document.getElementsByClassName('selected');
var myTd = chosen[0].getElementsByTagName('td');
var rightCell = myTd[0];
console.log(rightCell.innerHTML);
}
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>table_js_test002.html</title>
<link href="css/test_table.css" rel="stylesheet">
</head>
<body>
<table id="table">
<tr>
<td>1 Ferrari F138</td>
<td>1 000€</td>
<td>1 200€</td>
</tr>
<tr class="selected">
<td>2 Ferrari F138</td>
<td>1 000€</td>
<td>1 200€</td>
</tr>
<tr>
<td>3 Ferrari F138</td>
<td>1 000€</td>
<td>1 200€</td>
</tr>
</table>
<input type="button" id="tst" value="OK" onclick="fnselect()" />

</body>
</html>

这也起作用:

var myTd = chosen[0].cells[0].innerHTML; 

我的问题是,从我对JavaScript和DOM节点导航的有限理解来看,<td>不是<tr>的子代吗?为什么我不能获得

var myTd = chosen[0].firstChild.innerHTML 

去上班?

使用firstChild:时,每个MDN

任何空白都将创建一个#text节点,从一个空格到多个空格、回车、制表符等等

只需使用firstElementChild:

myTd = chosen[0].firstElementChild.innerHTML

问题是getElementsByTagName返回的是HTMLCollection,而不是NodeList。两者都是类似数组的对象,但HTMLCollection包含elements,而firstChild仅适用于nodes

如果你想要更多关于两个的细节

NodeList与HTMLCollection

节点与元素

最新更新