nextSibling проблема с таблицами - PullRequest
1 голос
/ 25 мая 2010

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

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

<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, потому что после того, как я вставил строку, должно быть 3 братьев и сестер, но вместо этого возвращает 2 и никогда не считает 3-го брата .... arggg.

Может кто-нибудь помочь мне здесь?

1 Ответ

0 голосов
/ 25 мая 2010

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

Измените ваше while состояние на:

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

Или просто:

while (tempTr) {
  //...
}

Попробуйте свой код здесь .

...