2012-05-03 21 views
53

Eventuali duplicati:
How to iterate a table rows with JQuery and access some cell values?jQuery ogni ciclo nella riga della tabella

Sto avendo qualcosa di simile:

<table id="tblOne"> 
      <tbody> 
       <tr> 
        <td> 
         <table id="tblTwo"> 
          <tbody> 
           <tr> 
            <td> 
             Items 
            </td> 
           </tr> 
           <tr> 
            <td> 
             Prod 
            </td> 
           </tr> 
          </tbody> 
         </table> 
        </td> 
       </tr> 
       <tr> 
        <td> 
         Item 1 
        </td> 
       </tr> 
       <tr> 
        <td> 
         Item 2 
        </td> 
       </tr> 
      </tbody> 
     </table> 

ho scritto jQuery per scorrere ogni ma come :

$('#tblOne tr').each(function() {...code...}); 

Ma il problema è che scorre attraverso il "tr" di "tblTwo" anche quello che non voglio. Qualcuno può suggerire qualcosa per risolvere questo problema?

risposta

150

in jQuery basta usare

$('#tblOne > tbody > tr').each(function() {...code...}); 

tramite il selettore diretta bambini (>) si cammina sopra discendenti immediati (e non tutti discendenti)


in VanillaJS si può utilizzare document.querySelectorAll() e camminare sulle righe utilizzando forEach()

[].forEach.call(document.querySelectorAll('#tblOne > tbody > tr'), function(tr) { 
    /* console.log(tr); */ 
}); 
+13

@Raynos si prega di spiegare al posto di "hit-and-running" ... –

+2

Come faccio riferimento all'elemento TR all'interno della funzione? – jumxozizi

+1

@Rubiksmomo - use function (index, element) - https://api.jquery.com/each/ – FrenkyB

18

Uso immediate children selector>:

$('#tblOne > tbody > tr') 

Descrizione: Seleziona tutte elementi figli diretti specificato da "figlio" di elementi specificati da "genitore".

50

solo una raccomandazione:

Mi consiglia di utilizzare l'implementazione DOM tavolo, è molto semplice e facile da usare, è davvero non hanno bisogno di jQuery per questo compito.

var table = document.getElementById('tblOne'); 

var rowLength = table.rows.length; 

for(var i=0; i<rowLength; i+=1){ 
    var row = table.rows[i]; 

    //your code goes here, looping over every row. 
    //cells are accessed as easy 

    var cellLength = row.cells.length; 
    for(var y=0; y<cellLength; y+=1){ 
    var cell = row.cells[y]; 

    //do something with every cell here 
    } 
} 
+13

Sono d'accordo sul fatto che jQuery spesso non è realmente necessario per questo tipo di attività (specialmente sul browser più recente con '.querySelectorAll() ') ma se stai già includendo jQuery è uno spreco non usarlo (e la soluzione DOM con due' for' loop non è così semplice, imho) – fcalderan

+0

Ma se stai già includendo jQuery, allora lo stai facendo male e hai bisogno rimuoverlo ASAP – Raynos

+0

*** usando *** jQuery ha anche conseguenze. $() fa circa 100 cose prima che selezioni effettivamente il tuo elemento tramite il suo id (ad esempio). Non sto dicendo di non usarlo ... ma per cose banali come questa in cui la soluzione di vanilla js è come qualche altro personaggio in più da scrivere che stai risparmiando sull'elaborazione. anche se non molto ... ma perché fai 10.000/secondo quando puoi fare 10.000.000 .... ha senso no? – rlemon