jQuery genitore di un genitore


93

Attualmente sto cercando di trovare il genitore di un genitore di un elemento. Ho un collegamento cliccato che si trova in a <td>e vorrei ottenere l' <tr>oggetto.

Perché "$ (this) .parent (). Parent ()" non funziona? Che cosa?

Grazie,
Brendan

Modifica: sembra che un errore nella mia sintassi stesse buttando via l'intera cosa. "$ (this) .parent (). parent ()" in effetti funziona, ma ho finito con $ (this) .closest ('tr') "perché sembra la soluzione più efficiente.


1
potresti pubblicare il codice in modo che possiamo vedere perché il selettore dei tuoi genitori non funziona?
TStamper

Risposte:


221

Il modo migliore sarebbe probabilmente usare closest:

$(this).closest('tr');

Consulta la documentazione :

Closest funziona guardando prima l'elemento corrente per vedere se corrisponde all'espressione specificata, in tal caso restituisce semplicemente l'elemento stesso. Se non corrisponde, continuerà ad attraversare il documento, genitore per genitore, finché non viene trovato un elemento che corrisponde all'espressione specificata. Se non viene trovato alcun elemento corrispondente, non ne verrà restituito nessuno.


20

Dovrebbe funzionare. Puoi anche provare $ (this) .parents (tag), dove tag è il tag che desideri trovare.

Per esempio:

$(this).parents("tr:first")

Troverà il tr più vicino "su per la catena".


9

Dovrebbe funzionare ... potresti provare

$(this).parents(':eq(1)');

Il .parents (selector) dice ottieni tutti gli antenati che corrispondono al selettore

e: eq (1) dice: trova l'elemento onet (indicizzato con zero, quindi il secondo) nella lista


Potresti provare ad avvisare questo, per assicurarti che sia un tag di ancoraggio html. Prova a fare: alert ('anchor html (' + $ (this) .html () + ')');
Lathan

6

Questo frammento è stato eseguito per me in passato:

$(this).parent().parent(); 

Pubblica un codice per farci vedere se potrebbe esserci un altro problema da qualche parte ...


Sono d'accordo con questo. Posso usare $(this).parent().parent()senza problemi
DrewT

5

anche provare

$(this).closest('div.classname').hide();

2

Se hai un qualsiasi tipo di id / classe per il genitore, puoi usare genitori () ma questo ti darà tutti i genitori fino al <body> a meno che non filtri () o lo interrompi in qualche altro modo come

$(this).parents('.myClass');

Spero che questo aiuti qualcuno :)


1

Prova a racchiudere $ (this) .parent () in un oggetto jQuery come $ ($ (this) .parent ()) Spesso trovo la necessità di farlo per assicurarmi di avere un oggetto jquery valido. Da lì dovresti essere in grado di entrare in contatto con il genitore dei genitori, o forse usando prev ().


8
Questo è completamente inutile. Tutto quello che stai facendo è perdere tempo creando un altro oggetto jQuery ...
James,

1
var getParentNode = function(elem, level) { 
    level = level || 1; 
    for (var i = 0; i < level; i++) {
        if (elem != null) {
            elem = elem.parentNode; 
        }
    }
    return elem; 
}

0

.closest() non è sempre l'opzione migliore, specialmente quando hai lo stesso costrutto di elementi.

<div>
    <div>
        <div>
        </div>
    </div>
</div>

Puoi fare il genitore di un genitore ed è molto semplice:

var parent = $('.myDiv').parent();
var parentParent = $(parent).parent();
var parentParentParent = $(parentParent).parent();

eccetera.

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.