以下代码运行良好,我能够获得所选行的第一个单元格的值:
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
节点与元素