好的,我正试图在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。
谢谢你们:)
答案 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) {
...
}
}