2011-12-03 15 views
7
<head> 
<script language="javascript"> 
// must have the onload handler 
onload = function countRows(){ 
    var rows = document.getElementById('myTableId').getElementsByTagName('tbody')[0].rows.length; 
    alert(rows); 
// outputs 3 
} 

</script> 
</head> 

<body> 
    <table id="myTableId"> 
     <tbody> 
      <tr><td></td><td><input onclick="doA_Function_That_Includes_CountRows()" /> 
      </td></tr> 
      <tr><td></td><td></td></tr> 
      <tr><td></td><td></td></tr> 
     </tbody> 
    </table> 
</body> 
</html> 
+0

Vuoi contare il numero di righe della tabella, o tbody? – Thai

+0

Nel tbody. la tabella ha un'intestazione e altre file al di fuori del tbody che non voglio contare. – phpmeh

risposta

15

Prova questo:

var rows = document.getElementById('myTableId').getElementsByTagName('tbody')[0].getElementsByTagName('tr').length; 

http://jsfiddle.net/y8URn/

conterà il numero di <tr> s nel <tbody>, che a sua volta sarà il numero di righe nella tabella.

Do notare che non conterà tutte le righe nella tabella di solo nel corpo tavolo. Se disponi di uno <thead> o di uno <tfoot> o di una riga esterna, non verrà conteggiato.

+0

Sembra non funzionare a meno che la funzione non venga avviata dopo il TBODY nell'HTML. Non riesco a chiamare la funzione nell'intestazione. Devo metterlo dopo il Tbody. – phpmeh

+1

Ovviamente. come con qualsiasi codice JavaScript, se un elemento non è stato ancora scaricato dal browser, non esiste sulla pagina. Come buona pratica generale, i tag '

1

Prova:

var numberOfRows = document.getElementById('myTableId').getElementsByTagName('tbody')[0].getElementsByTagName('tr').length; 
+0

Avevo provato. Stava restituendo anche 1. Sembra che sia importante dove viene chiamata la funzione. – phpmeh

+1

@phpmeh: Oh, non era in un gestore 'onload'? Va bene ... mettilo in un gestore 'onload' :) – Ryan

9

Un altro modo, utilizzando il rows property [MDN]:

var num = document.getElementById('myTableId').rows.length; 

Se si desidera solo di contare le righe della prima tbody elemento, selezionarlo prima (tBody property [docs])

var num = document.getElementById('myTableId').tBodies[0].rows.length; 
+0

+1 per' tbodies'. Non avevo idea che esistesse. – Ryan

+0

Ho capito che funziona così. Mi stava dando 1. Quando metto la chiamata alla funzione dopo il mio corpo, funziona. Sfortunatamente, ho bisogno di chiamare la funzione all'inizio di Tbody. – phpmeh

+0

@phpmeh: puoi solo fare riferimento o ottenere informazioni su un elemento DOM dopo che è stato creato. –

4

Ecco un'implementazione funzionante:

var table = document.getElementById("myTableId"); 
var tbody = table.tBodies[0]; 
alert(tbody.rows.length); 

E un jsFiddle campione: http://jsfiddle.net/9a6zK/

Problemi correlati