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

多谢你们 :)

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;
}

WhilefromRow.nextSibling != null会在倒数第二次迭代中停止,因为您已经在最后设置fromRow了它nextSibling。此外,如果下一个节点不是元素,您不一定要停止,如果可能,您只想移动到下一个节点。最后,如果您continue在原始示例中点击 ,您将陷入无限循环,因为fromRow永远不会改变值。

于 2010-05-24T22:06:56.880 回答
2

您的 while 循环在遇到非类型 1 的节点时立即停止。因此,如果您的元素之间有任何空格,则 while 循环将在第一个元素之后中断。

你可能想要的是:

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