0

我遇到了无法缩小 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);
4

2 回答 2

3

那是因为getElementsByTagName总是返回一个数组,即使只有一个元素。

如果你这样做var f = x[0].getElementsByTagName("td");,它应该可以正常工作。

于 2012-10-10T13:01:29.217 回答
2

那么节点列表对象上没有getElementsByTagName函数。也就是说,您的第一次调用getElementById()返回一个 DOM 元素,因此getElementsByTagName()从该结果调用有效。但是,第二个调用返回一个节点列表(一个 HTMLCollection),它没有这样的方法。

如果要<td>在所有表中累积所有元素的列表,则必须明确编码。遍历第一次调用的结果(<table>元素列表),并累积对getElementsByTagName("td")每个列表的每个元素的调用结果。(节点列表的元素是 DOM 元素,因此可以使用)。

于 2012-10-10T13:00:31.160 回答