nextSibling问题,应该很简单

时间:2010-05-24 22:00:02

标签: javascript siblings

好的,我正试图在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_1是一个TR元素,我需要在此表中获取旁边的TR元素,但出于某种原因,它只获得了我可以使用的1个元素已经使用document.getElementById,arggg。

谢谢你们:)

2 个答案:

答案 0 :(得分: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会在第二次到最后一次迭代时暂停,因为您已在最后将fromRow设置为nextSibling。此外,如果下一个节点不是元素,您不一定要停止,如果可能,您只想移动到下一个节点。最后,如果您点击原始示例中的continue,则会遇到无限循环,因为fromRow永远不会更改值。

答案 1 :(得分:2)

你的while循环在遇到不属于类型1的节点时就会停止。因此,如果你的元素之间有任何空格,while循环将在第一个元素之后中断。

你可能想要的是:

while(fromRow.nextSibling != null)
{
    if(fromRow.nodeType == 1) {
        ...
    }
}