2009-07-07 22 views
5

sto provando ad accedere ad un elemento usando un ID di uno dei suoi elementi nidificati, usando JQuery. Ad esempio: ho bisogno di trovare "myDiv" dal suo elemento nidificato "searchBox". Il problema è che la gerarchia cambia e il searchBox non sarà sempre nella stessa posizione nidificata. quindi ho essenzialmente bisogno di qualcosa che dice: Dammi il DIV che contiene l'elemento con l'ID di 'searchBox'. (vedi sotto) Qualche suggerimento? Grazie!JQuery - ottenere il genitore div da un elemento nidificato ID

<div id="myDiv" class="CommonGridView_ListBoxPopupPanel"> 
Some text here : 
<table><tbody><tr><td><input class="tboxw" type="text" id="btnFind"/></td> 
<td>some content</td> </tr> 
<tr> <td><textarea id="searchBox">text area content</textarea> </td> 
</tr> 
</tbody> 
</table> 
<table><tr><td></td></tr></table> 
</div> 

risposta

10

Se si vuole trovare l'elemento involucro DIV (indipendentemente dal ID su quel DIV) allora ti consigliamo questo selettore jQuery:

$("#searchBox").closest("div"); 

Il c losest([selector]) function troveranno l'elemento involucro che corrisponde al selettore.

+0

"La funzione più vicina ([selettore]) troverà tutti gli elementi di spostamento che corrispondono al selettore." - no, troverà solo quello più vicino. il più vicino non restituirà mai> 1 elemento. –

+0

Grazie per il chiarimento Paolo - Mi sono sbagliato riguardo a quello più vicino e ho modificato la mia risposta. –

+0

Va bene, anche io in realtà mi piace molto: il più vicino può restituire> 1 se la parte $ (selettore) restituisce più di 1 elemento (restituisce il più vicino di ciascuno degli elementi del selettore) –

6
$('#searchBox').parents('#myDiv') 
+0

-1 genitore() non funzionerà. I genitori – Wayne

+0

(si noti che la "s") funzionerà – CMS

+0

0 il mio male. Devo aver perso la "s". – Wayne

0

È possibile utilizzare questo:

var searchBox = $('#searchBox'); 

// Have the searchBox jQuery object, so find the ancestors that match a specific selector. 
var parentDiv = searchBox.parents('div#myDiv'); 

La documentazione completa è available here.

+0

btw, using nodeName # id è più lento del solo specificare l'id – redsquare

+0

@redsquare: In realtà non lo è, jQuery è ottimizzato per perdonare questo errore e cerca solo l'ID. (Ho chiesto a John Resig se stesso su questo) –

+0

L'ho provato io stesso e posso assicurarvi che lo era. Farò una demo quando sarò al lavoro. – redsquare

2

Se si conosce l'ID e ricordare che l'ID deve essere univoco, basta prendere l'elemento come faresti normalmente.

var $parentDiv = $('#searchBox'); 

non c'è alcun beneficio dall'uso .parents come le risposte di cui sopra mostrano quanto è solo più lento, come si arriva tutti i genitori della gerarchia e filtri su di loro piuttosto che utilizzare getElementById. Se, ad esempio, conoscessi solo il nome classe, sarebbe meglio utilizzare .closest('div.class') in modo che i passaggi di ciascun genitore sopra uno per uno fino a quando non viene trovata una corrispondenza.

L'unica volta che si utilizza .closest è se si desidera assicurarsi che searchBox fosse effettivamente un genitore del proprio elemento.

if ($element.closest('#searchBox').length){ 
    //do something 
} 
+0

+1 per indicare le giuste informazioni. :) –

+0

Chiesto di nuovo a John Resig informazioni sul tag # id, ha detto che funziona come previsto. La ragione per cui ci sono più chiamate in corso è che deve controllare anche il nodoNome, in modo che tu possa teoricamente fare span # myid e div # myid (non allo stesso tempo) - Non vedo ancora perché è così tante più chiamate, ma dice che va bene quindi sono propenso a credergli. –

+0

Ma cosa succede se non conosco l'ID del DIV, solo l'elemento figlio? – 29er

1

È possibile utilizzare

$('#searchBox').parents('div:first') 

o

$('#searchBox').parents('div:eq(0)') 
0

Complesso esempio nidificato:

trovare il valore di testo di un-N1 facendo clic su un-N2 !!?

Soluzione:

<ul class="ul-N1"> 
     <li class="li-N1"> 
      <a class="a-N1"></a> 
      <ul class="ul-N2"> 
       <li class="li-N2"> 
        <a class="a-N2"> </a> 
       </li> 
      </ul> 
     </li> 
    </ul> 

Jquery:

var a-N1 = $ (this) .closest (" ul-N1 .li-N1. ") Trovare (" un-N1.. ").testo();

Problemi correlati