2009-05-18 7 views
7

Quale metodo è preferibile per aggiungere una riga a una tabella?insertRow vs. appendChild

var tr = tbl.insertRow (-1);

o

var tr = document.createElement ('tr'); tbl.appendChild (tr);

?

risposta

5

insertRow sarebbe molto meglio. È supported per i browser di grado A ed è meno dettagliato e un'API più pulita.

+0

Inoltre, le righe non sono sempre figli di tabella, il che rende il metodo appendChild più complesso. –

+0

@rex: cosa intendi? – erikkallen

+0

potrebbe essere un figlio di anziché un elemento

. – Rob

3

insertRow potrebbe essere considerato più affidabile poiché è il DOM [1].

Il metodo appendChild è costantemente più veloce (anche se marginalmente) in tutti i browser testati (IE6/7, FF3, Chrome2, Opera9) quando operano di fuori del DOM, ma quando si cerca di modificare le tabelle all'interno del documento (un altro sforzo comune) è significativamente più lento.

In altre parole: utilizzare sicuramente insertRow.


Questi test sono stati eseguiti a livello locale non può quindi essere affidabile, vedere la fonte qui: http://pastie.org/482023

0

Se si utilizza metodi DOM, un tr dovrebbe essere aggiunto ad un tbody, thead, o elemento TFOOT, e non a un elemento di tabella.

3

Vedo buoni argomenti per insertRow, ma trovo uno svantaggio: insertRow può solo creare una nuova riga vuota, mentre appendChild accetta un oggetto riga esistente. Con appendChild, puoi spostare le righe in una tabella, spostare una riga da una tabella a un'altra, o prendere una riga da una tabella e poi rimetterla in una (molto utile per le tabelle paginate). Per fare lo stesso con insertRow (e insertCell), dovresti impacchettare il contenuto, creare nuove righe e celle e quindi aggiungere i vecchi contenuti alle nuove celle. Impacciato e apparentemente meno efficiente. C'è un modo più aggraziato per farlo? Una variante di insertRow che accetta un oggetto riga esistente sarebbe piacevole.

Problemi correlati