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 を使用できない場合、どのように絞り込むことができますか?

更新:悪いことに、これを投稿した後、変数の後に[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要素が 1 つしかない場合でも、常に配列を返すためです。

そうすれば、var f = x[0].getElementsByTagName("td");正しく動作するはずです。

于 2012-10-10T13:01:29.217 に答える
2

getElementsByTagNameノード リスト オブジェクトには機能がありません。つまり、 への最初の呼び出しgetElementById()は DOM 要素を返すためgetElementsByTagName()、その結果からの呼び出しは機能します。ただし、その 2 番目の呼び出しは、そのようなメソッドを持たないノード リスト (HTMLCollection) を返します。

<td>すべてのテーブル内のすべての要素のリストを蓄積したい場合は、それを明示的にコーディングする必要があります。最初の呼び出しの結果 (要素のリスト) を反復処理し、各リストの各要素に対する<table>呼び出しの結果を蓄積します。getElementsByTagName("td")(ノード リストの要素は DOM 要素であるため、動作します)。

于 2012-10-10T13:00:31.160 に答える