2011-01-18 7 views
7

Ho la seguente struttura HTML e volevo scoprire la lunghezza dell'immediato <td>s. ecco il codice che sto usando: -Trovare il conteggio di <td> Jquery

<table class="PrintTable"> 
    <tr> 
     **<td>** 
     <table> 
      <thead> 
       <tr><th>Type Of Transaction</th></tr> 
      </thead> 
      <tbody> 
       <tr> 
        <td>Name</td> 
       </tr> 
       <tr> 
        <td>Age</td> 
       </tr> 
      </tbody> 
     </table> 
     </td> 
     **<td>** 
     <table> 
      <thead> 
       <tr><th>2006</th></tr> 
      </thead> 
      <tbody> 
       <tr> 
        <td>Andi</td> 
       </tr> 
       <tr> 
        <td>25</td> 
       </tr> 
      </tbody> 
     </table> 
     </td> 

    </tr> 
</table> 

La funzione che sto usando per scoprire la lunghezza del TD è

function getBody(element) 
{ 
    var divider=2; 
    var originalTable=element.clone(); 
    var tds = $(originalTable).children('tr').children('td').length; 
    alert(tds); 


} 

Il risultato che sto vedendo è 0. Nessun indizio a tutti . Mi aspetto 2. Qualsiasi aiuto sarà apprezzato.

+0

Perché stai usando '.clone()'? Ed è 'elemento' destinato a essere un oggetto jQuery? Presumo di sì, poiché 'clone' non è un metodo JS nativo su un oggetto DOM. Puoi per favore fornire un esempio di come stai invocando 'getBody'? –

+0

Sì, l'elemento è un oggetto JQuery e contiene la tabella completa come oggetto. Anche se non invochi clone(), mostra comunque 0 dove mi aspetto 2. – Nrusingha

risposta

19

Ho rimosso gli asterischi dal codice HTML e ho fatto alcune ipotesi su come si sta invocando getBody, quindi se ho fatto qualcosa che non era giusto, fammi sapere.

Codice: http://jsfiddle.net/27ygP/

function getBody(element) { 
    var divider = 2; 
    var originalTable = element.clone(); 
    var tds = $(originalTable).children('tbody').children('tr').children('td').length; 
    alert(tds); 
} 

getBody($('table.PrintTable')); 

Il grande cambiamento è stato il aggiungere un .children('tbody'). L'interprete HTML include gli tr s in tbody. Attraversa quello, e starai bene.

+0

Grazie mille. Funziona. C'è un buon debugger in cui possiamo scoprire tutti questi trucchi. – Nrusingha

+2

[Firebug] (http://getfirebug.com/) per Firefox è lo strumento migliore sul mercato per navigare nel DOM. Tutti i principali browser hanno strumenti integrati per fare lo stesso (basta fare clic sui menu). Ti porterà, tra le altre cose, in un albero interattivo che puoi percorrere manualmente. –

+0

Grazie! Mi chiedo perché non puoi usare più selettori con .children() –

2

Penso che vogliate usare quanto segue.

$("td").length 

UPDATE

Si vuole utilizzare il tag tr come selettore di partenza e poi contare ogni selettore td utilizzando prima di prendere solo il primo.

$("tr", $("td:first")).length 
+0

Sì, ma non per quelli nidificati ma solo per ** **. – Nrusingha

1

Questo dovrebbe funzionare:

var itemsCount = $(".PrintTable > tr > td").length; 

Aggiornamento:

Ho appena realizzato che almeno Chrome inserisce <tbody> se non è già presente, in modo da ottenere il supporto cross browser:

var itemsCount = $(".PrintTable > tbody > tr > td, .PrintTable > tr > td").length; 

Esempio: http://jsfiddle.net/H2JWS/

+0

No. Vedere 0 come risultato. – Nrusingha

3

Prova questo:

//For FFox 
$(document).ready(function(){ 
var countTD=$("Your_Table_ID_or_Class tr:first > td").length; 
}); 

// For webKit Browser 
$(window).load(function(){ 
var countTD=$("Your_Table_ID_or_Class tr:first > td").length; 
}); 

Nota; Se la creazione di colonna di riga della tabella dinamica quindi utilizzare $(document).live("click",function(){});

1

In generale, se si desidera contare il numero di td 's in una riga specifica, si può fare questo ..

$(function(){ 
    count = $("table tr").children("td").index()+1; 
}); 
1

var rowCount = $ ('# myTable tr'). lunghezza;

0
var originalTable = $(remove_copy_drargelement).closest('table').clone(); 

var tds = $(originalTable).children('tbody').children('tr').children('td').length; 
Problemi correlati