2013-10-03 2 views
0

Мне нужно создать табличку, которая может иметь несколько строк. Я создаю таблицу во время выполнения с javascript. В настоящее время сделал это с двумя петлиСоздать полную динамическую структуру таблицы с одним циклом с Javascript

exlTb = document.getElementById('exlTb'); 
tbl = document.createElement('table'); 
tbdy = document.createElement('tbody'); 

for(var i=0; i <= row; i++){ 
    var tr=document.createElement('tr'); 
    for(var j = 0; j <= colomn; j++){ 
     var td = document.createElement('td'); 
     tr.appendChild(td); 
     } 
    tbdy.appendChild(tr); 
    } 
tbl.appendChild(tbdy); 
exlTb.appendChild(tbl); 

Я пытаюсь оптимизировать мое решение

+5

* «... с одним циклом ... Я пытаюсь оптимизировать свое решение ...» * В каком способе используется два петли менее оптимальные? Оптимизировать как? Быстрее? Яснее? –

+0

Попробуйте систему шаблонов вместо того, чтобы строить таблицу с помощью методов DOM - по всей вероятности, они являются виновниками здесь, а не вложенными циклами. – Robusto

+0

Да, я думал, что если это можно сделать с одним циклом, это будет быстрее. – mayank

ответ

2

Если ваша цель состоит в том, чтобы создать таблицу более быстро, все эти поездки и из DOM слоя являются чем-то вы может избавиться. Браузеры действительно очень быстро при разборе HTML. При динамическом построении таблиц вам обычно лучше создавать разметку, а затем анализировать браузер и создавать его все сразу, потому что вы все время не пересекаете эту границу JavaScript/DOM.

Вот один из способов:

exlTb = document.getElementById('exlTb'); 
var markup = ['<table><tbody>']; 

for(var i=0; i <= row; i++){ 
    markup.push('<tr>'); 
    for(var j = 0; j <= colomn; j++){ 
     markup.push('<td></td>'); 
     } 
    markup.push('</tr>'); 
    } 
markup.push('</tbody></table>'); 
exlTb.innerHTML = markup.join(""); // <== Note: Assumes exlTb is otherwise empty 

Создание разметки вверх в массиве, а затем комбинируя его раз в конце быстрее во многих случаях (но не все), чем конкатенация строк. Я ожидаю, если вы посмотрите вокруг, есть тест http://jsperf.com, который уже существует ...

+0

делает эту функцию push и join быстрее и лучше, чем добавлять? – mayank

+1

@mayank: Вы имеете в виду быстрее, чем 'createElement' /' appendChild'? Обычно, да. Как я сказал выше: * «При динамическом построении таблиц вам обычно лучше создавать разметку, а затем анализировать браузер и создавать его все сразу, потому что вы все время не пересекаете эту границу JavaScript/DOM. "* Естественно, вы хотели бы протестировать его с целевыми браузерами и с вашими реальными данными таблицы. –

+0

Crowder: Я тестировал то же самое на http://jsperf.com/domtable, но результат кажется другим. loop with append function работает быстрее. Посмотрите эту ссылку http://jsperf.com/domtable – mayank

Смежные вопросы