1

わかりました、JS でこの nextSibling 関数を理解しようとしています。これが次のコード内の私の問題です...

var fromRow = document.getElementById("row_1");

while(fromRow.nodeType == 1 && fromRow.nextSibling != null)
{
    var fRowId = fromRow.id;
    if (!fRowId) continue;

    // THIS ONLY gets done once and alerts "row_1" ONLY :(
    alert(fRowId);

    fromRow = fromRow.nextSibling;
}

このコードの何が問題なのか誰か教えてください。私が見ることができるように、この要素の隣にdocument.getElementById("row_1");は確かに兄弟がいて、それらはすべて id 属性を持っています。なぜ兄弟の id 属性を取得しないのですか?? 理解できません。

row_1TR要素であり、このテーブル内でその隣の要素を取得する必要がありますが、何らかの理由で、argggTRを使用して既に取得できる 1 つの要素しか取得しません。document.getElementById

みんなありがとう :)

4

2 に答える 2

2

試す:

var fromRow = document.getElementById("row_1");

while(fromRow !== null)
{
    var fRowId = fromRow.id;
    if (!fRowId || fromRow.nodeType != 1) {
        fromRow = fromRow.nextSibling;
        continue;
    }

    // THIS ONLY gets done once and alerts "row_1" ONLY :(
    alert(fRowId);
    fromRow = fromRow.nextSibling;
}

すでに最後に設定しているfromRow.nextSibling != nullため、最後から2番目の反復で停止します。また、次のノードが要素でない場合は必ずしも停止する必要はありません。可能であれば、次のノードに移動するだけです。最後に、元の例でをヒットすると、値が変更されないため、無限ループが発生します。fromRownextSiblingcontinuefromRow

于 2010-05-24T22:06:56.880 に答える
2

whileループは、タイプ1以外のノードに遭遇するとすぐに停止します。したがって、要素間に空白がある場合、whileループは最初の要素の後で中断されます。

おそらく必要なものは次のとおりです。

while(fromRow.nextSibling != null)
{
    if(fromRow.nodeType == 1) {
        ...
    }
}
于 2010-05-24T22:07:38.683 に答える