nextSibling проблемы - PullRequest
       10

nextSibling проблемы

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

Хорошо, это убивает меня всю ночь, я имею в виду, что я работал над этим кодом по крайней мере 8 часов. В чем проблема с этим, argggg.

Я пытаюсь обновить все <span id="column_[row index number]_[column index number]_[layout position number]">, чтобы увеличить его на единицу до следующего id="row_[row index number]" tr element, элементы tr, которые он должен искать, имеют идентификатор tr_[row index number]_[column index number]_[layout position number], но какой-то бог знает, что причина, это дает мне проблемы. Он обновляет тот же тег <span> 2x, и это меняет его с желаемого значения на 1 больше, чем должно быть ... В firstChild <td> element каждого из <tr> elements есть только тег 1 <span>. Я просто не понимаю, почему он устанавливает его в 2 раза только для одного из них, и кажется, что это случайно или что-то в этом роде. argggg.

В теге <td id="tdcolumn_[row index number]_[column index number]_[layout position number]> есть только 1 <span> элемент, но по какой-то причине он вызывает один и тот же тег дважды. Это следует назвать только один раз. arggg. Я не понимаю, почему ??

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

// Reorder all columns, if any, in the other rows after this 1.
if (aRowId != 0 && lId.indexOf("tr_" + aRowId) == 0 && rowComplete != aRowId)
{
    var tempTr = lTable.childNodes[i].childNodes[p];


    while(tempTr.nodeType == 1 && tempTr.nextSibling != null)
    {
        var tempId = tempTr.getAttribute("id");

        if (!tempId) continue;

        if (tempId.indexOf("row_") == 0)
        {
            // All done this row, set it to completed!
            rowComplete = aRowId;
            break;
        }

        if (tempTr.hasChildNodes)
        {

            var doneChilds = false;

            // grab the id where tdcolumn_{aRowId}.indexOf = 0.
            for (fcTd = 0; fcTd<tempTr.childNodes.length; fcTd++)
            {
                if (tempTr.childNodes[fcTd].nodeName == '#text') continue;

                var tempfcId = tempTr.childNodes[fcTd].getAttribute("id");

                if (!tempfcId) continue;

                if (tempfcId.indexOf("tdcolumn_" + aRowId) != 0) continue;

                // looping through the children in the <td> element here.
                if (tempTr.childNodes[fcTd].hasChildNodes)
                {
                    for (x = tempTr.childNodes[fcTd].childNodes.length-1; x>0; x--)
                    {
                        if (tempTr.childNodes[fcTd].childNodes[x].nodeName == '#text') continue;

                        var tempSpanId = tempTr.childNodes[fcTd].childNodes[x].getAttribute("id");

                        if (!tempSpanId) continue;

                        if (tempSpanId.indexOf("column_") != 0) 
                            continue;

                        // alert(tempSpanId);

                        alert(tempTr.childNodes[fcTd].childNodes[x].nodeName);

                        var tSpanId = new Array();
                        tSpanId = tempSpanId.split("_");

                        if (currColumnId == 0)
                        {
                            currColumnId = parseInt(tSpanId[1]);
                            var incCol = currColumnId;  
                        }

                        incCol++;

                        // alert("currColumnId = " + currColumnId + "\n\ntSpanId[1] = " + tSpanId[1] + "\n\nincCol = " + incCol);

                        // Set the new Id's and Text, after which we can exit the for loop.
                        tempTr.childNodes[fcTd].childNodes[x].setAttribute("id", "column_" + incCol);
                        tempTr.childNodes[fcTd].childNodes[x].setAttribute("class", "dp_edit_column");
                        tempTr.childNodes[fcTd].childNodes[x].innerHTML = oColumnText + " " + incCol;
                        // tempTr.childNodes[fcTd].setAttribute("id", "tdcolumn_" + aRowId + "_" + (parseInt(tSpanId[1])+1) + "_" + tSpanId[3]);

                        doneChilds = true;

                        break;
                    }
                }
                else
                    continue;

                if (doneChilds == true)
                    continue;
            }
        }
        else
            continue;

        tempTr = tempTr.nextSibling;
    }
}

Пожалуйста, помогите мне, спасибо:)

1 Ответ

2 голосов
/ 23 мая 2010

Хотя я не думаю, что смогу решить вашу проблему без соответствующих частей HTML, в вашем коде есть хотя бы одна ошибка:

if (doneChilds = true)

Это всегда оценивается как true. Следует читать:

if (doneChilds)

Кстати, вам не нужно getAttribute здесь:

var tempfcId = tempTr.childNodes[fcTd].getAttribute("id");

Просто используйте:

var tempfcId = tempTr.childNodes[fcTd].id;

Никогда не устанавливайте имя класса, используя setAttribute, как здесь:

tempTr.childNodes[fcTd].childNodes[x].setAttribute("class", "dp_edit_column");

Использование:

tempTr.childNodes[fcTd].childNodes[x].className = "dp_edit_column";

(то же самое верно для строки выше этой, устанавливая id элемента).

...