我遇到了这个问题,我无法缩小getElementsByTagName的范围。
这就是我正在做的事情
<!DOCTYPE html>
<html>
<head>
<script>
function getElements()
{
var t = document.getElementById("t");
var x = t.getElementsByTagName("table");
//var f = x.getElementsByTagName("td");
alert(x.length);
}
</script>
</head>
<body>
<div id="t">
<table class="x">
<td class="f">
</td>
</table>
</div>
<input type="button" onclick="getElements()" value="How many input elements?">
</body>
</html>
以上作品,带回1。
虽然我改变了这一点。
var f = x.getElementsByTagName("td");
alert(f.length);
它打破了剧本。
当我无法使用2个TagNames时,我能够缩小范围吗?
更新:我的不好,我在发布之后意识到它必须在var之后有[0]。
var t = document.getElementById("t");
var x = t.getElementsByTagName("table");
var f = x[0].getElementsByTagName("td");
var u = f[0].getElementsByTagName("div");
alert(f.length);
alert(u[0].className);
答案 0 :(得分:3)
这是因为getElementsByTagName
总是返回一个数组,即使只有一个元素。
如果你var f = x[0].getElementsByTagName("td");
它应该正常工作。
答案 1 :(得分:2)
节点列表对象上没有getElementsByTagName
函数。也就是说,您对getElementById()
的第一次调用会返回一个DOM元素,因此从该结果中调用getElementsByTagName()
会起作用。但是,第二个调用返回一个节点列表(HTMLCollection),它没有这样的方法。
如果要在所有表中累积所有<td>
元素的列表,则必须明确地对其进行编码。迭代第一次调用的结果(<table>
元素列表),并在每个列表的每个元素上累积调用getElementsByTagName("td")
的结果。 (节点列表的元素是DOM元素,因此“工作”。