Come ottenere solo elementi figlio diretti dalla funzione jQuery


89

Ho una struttura della tabella come questa:

<table1>
  <tbody>
    <tr>
      <td></td>
        ...
      <td>
        <table2>
          <tbody>
            <tr>
              <td></td>
            </tr>
          </tbody>
        </table>
      </td>
    </tr>
   </tbody>
  </table>

In javascript, ho una variabile tblcon valore di $(table1)e quindi voglio ottenere tutti gli elementi figlio diretti (tr) di <tbody>di table1. Il mio codice è:

$('tr', tb1)

Apparentemente restituisce tutti gli <tr>elementi in table1 e table2. Penso di riuscire a cavarmela

$('tr', tb1).not(function(){return $(this).parent().parent()[0] != tb1;})

o questo tipo di logica.

So di $('table1 > tbody > tr')poter ottenere il figlio diretto tr. Purtroppo non posso usarlo.

Qualcuno ha una buona idea di questo?

Grazie.

Risposte:


178

Puoi usare find():

tbl.find("> tbody > tr")


2
questa è un'idea brillante. $ ('> tbody> tr', tb1) funziona anche per me. Grazie.
Jason Li

1
Questo è meraviglioso, non sapevo che potessi usare il selettore figlio diretto ( >) senza specificare nulla davanti ad esso. Grazie.
silkfire

3
Nota che per i figli diretti che sono solo di un livello in basso puoi semplicemente usare 'children ([selector])'.
orad

37
BAMBINI DIRETTI = bambini di un livello in basso , quindi api.jquery.com/children è la risposta giusta, non find () - che si ottengono TUTTI i discendenti dell'elemento (filtrati dal selettore) ...
jave.web

4
Dovresti rendere il tuo commento una risposta separata jave.web poiché la tua è LA risposta corretta.
mrmillsy

23

Come @ jave.web menzionato nei commenti

Per cercare tra i figli diretti di un elemento usa .children(). Cercherà solo attraverso i bambini diretti e non andrà più in profondità. http://api.jquery.com/children/


5

Questo è esattamente il motivo per cui si dovrebbe stare attenti con le tabelle di nidificazione. Spero davvero che tu li usi per i dati e non per il layout di pagina.

Un altro problema che probabilmente ti rovinerà la giornata è l'utilizzo di selettori CSS su tabelle nidificate ... fondamentalmente hai lo stesso problema: non puoi selezionare gli elementi TR della tabella esterna senza selezionare anche quelli all'interno della tabella interna. (Non è possibile utilizzare il selettore figlio perché non è implementato in IE6)

Questo dovrebbe funzionare:

$("#table1 > tbody > tr")

Tuttavia, ti consiglio di codificare come hardcoded l'elemento TBODY, poiché non dovresti fare affidamento sul browser per crearlo per te.



Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.