Вход

Просмотр полной версии : Как добавлять строку в таблицу в нужное место?


vitorrio
30.08.2012, 16:32
Вот функция добавления строки в таблицу:

function addRow(id){
var tbody = document.getElementById(id).getElementsByTagName("TBODY")[0];
var row = document.createElement("TR");
var td1 = document.createElement("TD");

var i=0,number=1;
while (document.getElementsByTagName("TD")[i])
{
number=i;
i++;
}
td1.appendChild(document.createTextNode("column "+(2+number)));
var td2 = document.createElement("TD");
td2.appendChild (document.createTextNode("column "+(3+number)));
row.appendChild(td1);
row.appendChild(td2);
tbody.appendChild(row);
}
Но она постоянно добавляет строку ТОЛЬКО в конец строки, а нужно именно перед той строкой, на которую я нажал... через onclick... номера строки в параметры вызова функции пишу. Конечно есть вариант перебора, но чет утомляющий способ...
Еще способ через parentNode узнаю родителя, а потом через childnotes[n] <= в нужное место вставить строку, но боюсь он тупо заменит тот элемент который был под n, а не вставит новую.

Deff
30.08.2012, 16:41
vitorrio,
Во первых вставьте ячейки сразу в строку на этапе
var row = document.createElement("TR");
и в цикле вставляем row.appendChild(td[i])

Во вторых строку таблы вставляем не rowN.appendChild(row) ;

а insertBefore(row) ; в строку на единицу меньше, чем та после которой нужно вставлять
либо .appendChild(row) но в tbody

vitorrio
30.08.2012, 22:21
а insertBefore(row) ; в строку на единицу меньше, чем та после которой нужно вставлять

А если в строку на единицу больше? т.е. за той строкой на которую нажал - есть такой метод?

eirnvn
31.08.2012, 22:05
Можно свой метод написать, чтоб вставляло после строки а можно без метода. Так работает, но циферки правильно не меняет:
function dododo (event) {
event = event || window.event;
var target = event.target || event.srcElement;

while(target != this) {
if (target.tagName == 'TR') {
addRow(target);
}
target = target.parentNode;

}

}

function addRow(target){
var tbody = document.getElementById('tab').getElementsByTagNam e("TBODY")[0];
var row = document.createElement("TR");
var td1 = document.createElement("TD");

var i=0,number=1;
while (document.getElementsByTagName("TD")[i])
{
number=i;
i++;
}
td1.appendChild(document.createTextNode("column "+(2+number)));
var td2 = document.createElement("TD");
td2.appendChild (document.createTextNode("column "+(3+number)));
row.appendChild(td1);
row.appendChild(td2);
tbody.insertBefore(row, target.nextSibling);
}