Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как добавлять строку в таблицу в нужное место? (https://javascript.ru/forum/misc/31224-kak-dobavlyat-stroku-v-tablicu-v-nuzhnoe-mesto.html)

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

Цитата:

Сообщение от Deff (Сообщение 201719)
а 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').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.insertBefore(row, target.nextSibling);
  }


Часовой пояс GMT +3, время: 12:21.