1

タグ内のエントリのコレクションを取得するための汎用JavaScript関数を作成しようとしています。例えば:

リスト付き

<ul class="collection">
    <li>First Entry</li>
    <li>Second Entry</li>
    <li>Third Entry</li>
</ul>

div付き

<div class="collection">
    <div >First Entry</div >
    <div >Second Entry</div >
    <div >Third Entry</div >
</div>

テーブル付き

<table class="collection">
    <tr>First Entry</tr>
    <tr>Second Entry</tr>
    <tr>Third Entry</tr>
</table>

これが私が持っているものです:

function getEntry(a)
{
    var elementCollection = document.getElementsByTagName('*');

    for(var i = 0; i < elementCollection.length; i++)
    {
        if(elementCollection[i].className.toString() === "collection")
        {
            var filteredCollection = elementCollection[i].children;

            alert(filteredCollection[a].innerHTML);
        }
    }
}

これは、リストまたはdivを処理する場合に必要なことを正確に実行しますが、テーブルを実行すると、a = 0の場合はすべてのエントリが、a!=0の場合は何も表示されません。

テーブルの動作が異なりますか、それとも何か間違ったことをしていますか?


はい、HTMLには要素が含まれていないため無効です<tbody>。そのため、テーブルセルの場合と同様に、ブラウザがHTMLを挿入します。

したがって、に到達してtableを使用すると、すべての要素を含む.children[0]新しい要素が取得されます。これにより、すべてのエントリが提供される理由が説明されます。<tbody><tr>

そしてもちろん、を使用する場合、.children[1]またはそれより大きいものを使用する場合0、子は1つしかないため、子はありませんtbody

4

1 に答える 1

4

はい、HTMLには要素が含まれていないため無効です<tbody>。そのため、テーブルセルの場合と同様に、ブラウザがHTMLを挿入します。

したがって、に到達してtableを使用すると、すべての要素を含む.children[0]新しい要素が取得されます。これにより、すべてのエントリが提供される理由が説明されます。<tbody><tr>

そしてもちろん、を使用する場合、.children[1]またはそれより大きいものを使用する場合0、子は1つしかないため、子はありませんtbody

于 2012-12-09T23:28:49.370 に答える