2009-05-18 2 views
7

Какой метод является предпочтительным для добавления строки в таблицу?insertRow vs. appendChild

var tr = tbl.insertRow (-1);

или

вар тр = document.createElement ('тр'); tbl.appendChild (tr);

?

ответ

5

insertRow было бы намного лучше. Это supported браузерами класса A и менее подробный и более чистый API.

+0

Кроме того, строки не всегда являются дочерними элементами таблицы, что делает метод appendChild более сложным. –

+0

@rex: что вы имеете в виду? – erikkallen

+0

может быть ребенком , а не элементом

. – Rob

3

insertRow может считаться более надежным, так как это DOM [1].

Метод appendChild последовательно быстрее (хотя и незначительно) во всех протестированных браузеров (IE6/7, FF3, Chrome2, Opera9) при работе вне из DOM, но при попытке модифицировать таблицы в документе (более общее усилие) это значительно медленнее.

Другими словами: определенно используйте insertRow.


Эти испытания проводились на местном уровне, так не может быть надежным, увидеть источник здесь: http://pastie.org/482023

0

Если вы используете методы DOM, ТР должен быть добавлен к TBODY, THEAD или TFOOT элемента, а не к элементу таблицы.

3

Я вижу хорошие аргументы для insertRow, но я нахожу один недостаток: insertRow может создавать только новую пустую строку, тогда как appendChild принимает существующий объект строки. С помощью appendChild вы можете перемещать строки в таблице, перемещать строку из одной таблицы в другую или вынимать строку из таблицы, а затем возвращать ее (очень удобно для выгружаемых таблиц). Чтобы сделать то же самое с insertRow (и insertCell), вам придется упаковать содержимое, создать новые строки и ячейки, а затем добавить старое содержимое в новые ячейки. Неуклюжий и, казалось бы, менее эффективный. Есть ли более грациозный способ сделать это? Вариант insertRow, который принимает существующий объект строки, будет приятным.