2010-05-25 5 views
1

Я использую insertRow, чтобы вставить элемент TR в таблицу, но по какой-то причине он не считает, что вставленный элемент TR является родственным другим, когда я делаю nextSibling на нем.nextSibling issue with tables

Например, рассмотрим следующую таблицу.

<table id="myTable"> 
    <tr id="row_0"> 
     <td colspan="3">Row 1</td> 
    </tr> 
    <tr id="tr_0_0"> 
     <td>Option 1</td> 
     <td>Option2</td> 
     <td>Option 3</td> 
    </tr> 
    <tr id="tr_0_1"> 
     <td>Option 1</td> 
     <td>Option 2</td> 
     <td>Option 3</td> 
    </tr> 
</table> 

Так после того, как я это делаю:

var lTable = document.getElementById("myTable"); 
var trEle = lTable.insertRow(-1); 
trEle.id = "tr_0_2"; 

var cell1 = trEle.insertCell(0); 
cell1.innerHTML = "Option 1"; 

var cell2 = trEle.insertCell(1); 
cell2.innerHTML = "Option 2"; 

var cell3 = trEle.insertCell(-1); 
cell3.innerHTML = "Option 3"; 

Затем я использую этот подход, чтобы получить все братья и сестры, но он никогда не дает мне последний брат в здесь, но только если он был добавлен с помощью insertRow, потому что он получает все nextSiblings просто отлично, но как только я добавить родственный через insertRow он никогда не дает мне, что последний собрат argggg ....

var tempTr = document.getElementById("row_0"); 
var totalSibs = 0; 

while(tempTr.nextSibling != null) 
{ 

    var tempId = tempTr.id; 

    // If no id, not an element, or not a tr_0 id. 
    if (!tempId || tempTr.nodeType != 1 || tempId.indexOf("tr_0") != 0) 
    { 
     tempTr = tempTr.nextSibling; 
     continue; 
    } 

    // This NEVER ALERTS the last id of the row that was inserted using insertRow, arggg. 
    alert(tempId); 

    totalSibs++; 

    tempTr = tempTr.nextSibling; 
} 

Так, totalSibs должен вернуть 3 BECA используйте после того, как я вставил строку, должно быть 3 брата, но вместо этого возвращает 2 и никогда не учитывает 3-й сиблинг ... arggg.

Может кто-нибудь, пожалуйста, помогите мне здесь?

ответ

0

Проблема заключается в последней итерации, вы установите tempTr к следующему собрату, (которая на самом деле последний tr), но проверить снова nextSibling в вашем while состояния, в этом последнем случае это будет null , заканчивая петлю.

Изменить while условие:

while (tempTr != null) { 
    //... 
} 

Или просто:

while (tempTr) { 
    //... 
} 

Попробуйте код here.

+0

OMG, Вы GENIUS, СПАСИБО! :) – SoLoGHoST