jQuery esplora - metodo find()

Esempio

Cerca tutti i discendenti span degli elementi p e imposta il loro colore a rosso:

$("p").find("span").css('color','red');

Prova personalmente

Definizione e uso

Il metodo find() ottiene i discendenti di ogni elemento nella raccolta corrente, filtrando attraverso un selettore, un oggetto jQuery o un elemento.

Sintassi

.find(selector)
Parametro Descrizione
selector Valore di stringa che contiene l'espressione di selettore fornita per abbinare l'elemento corrente della raccolta.

Spiegazione dettagliata

Se viene fornito un oggetto jQuery che rappresenta una raccolta di elementi DOM, il metodo .find() ci permette di cercare questi elementi discendenti nell'albero DOM e di costruire un nuovo oggetto jQuery con gli elementi corrispondenti. .find() è simile a .children(), ma quest'ultimo esplora solo un singolo livello dell'albero DOM.

La prima caratteristica evidente del metodo .find() è che accetta un'espressione di selettore dello stesso tipo che passiamo alla funzione $(). Filtra gli elementi attraverso il test di corrispondenza con l'espressione.

Pensiamo a questa semplice lista annidata:

<ul class="level-1">
  <li class="item-i">I</li>
  <li class="item-ii">II
    <ul class="level-2">
      <li class="item-a">A</li>
      <li class="item-b">B
        <ul class="level-3">
          <li class="item-1">1</li>
          <li class="item-2">2</li>
          <li class="item-3">3</li>
        </ul>
      </li>
      <li class="item-c">C</li>
    </ul>
  </li>
  <li class="item-iii">III</li>
</ul>

Partiremo dalla lista II per cercare gli elementi della lista all'interno di essa:

$('li.item-ii').find('li').css('background-color', 'red');

Prova personalmente

I risultati di questa ricerca mostrano che i progetti A, B, 1, 2, 3 e C sono stati impostati con sfondo rosso. Anche se il progetto II corrisponde all'espressione selettore, non viene incluso nei risultati; viene fatto solo il match con i discendenti.

Diversamente dagli altri metodi di esplorazione dell'albero, l'espressione selettore è un parametro obbligatorio per .find(). Se dobbiamo recuperare tutti i discendenti, possiamo passare il selettore di jolly '*'.

Il contesto selettore è implementato dal metodo .find(); quindi, $('li.item-ii').find('li') è equivalente a $('li', 'li.item-ii').

Per jQuery 1.6, possiamo anche utilizzare un insieme jQuery o un elemento dati per il filtraggio. Tornando alla lista annidata sopra, scriviamo prima così:

var $allListElements = $('li');

Poi passiamo questo oggetto jQuery al metodo find:

$('li.item-ii').find( $allListElements );

Prova personalmente

Il codice sopra restituirà un insieme jQuery che contiene gli elementi della lista II come discendenti.

Analogamente, è possibile passare anche un elemento:

var item1 = $('li.item-1')[0];
$('li.item-ii').find( item1 ).css('background-color', 'red');

Prova personalmente

Il risultato di questa chiamata è che il progetto 1 è stato impostato con sfondo rosso.