Como encontrar um pai com uma classe conhecida em jQuery?

Tenho um <div>que tem muitos outros <div> dentro dele, cada um num nível diferente de nidificação. Em vez de dar a cada criança <div> um identificador, prefiro apenas dar à raiz <div> o identificador. Aqui está um exemplo:

<div class="a" id="a5">
  <div class="b">
    <div class="c">
      <a class="d">
      </a>
    </div>
  </div>
</div>

Se eu escrever uma função em jQuery para responder à classe d e eu quero encontrar o ID para o seu pai, classe a, Como eu faria isso? Eu não posso simplesmente fazer $('.a').attr('id'); porque há várias classes as. Eu poderia encontrar o ID do pai de seu pai, mas que parece de mau design, lento, e não muito polimórfico (eu teria que escrever um código diferente para encontrar o ID para a classe c).

Author: Xufox, 2011-03-17

4 answers

Assumindo que this é .d, podes escrever

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

A closest o método devolve o pai mais íntimo do seu elemento que corresponde ao selector.

 371
Author: SLaks, 2011-03-17 00:31:30

Passa um selector para o jQuery pais Função:

d.parents('.a').attr('id')

EDIT Hmm, na verdade a resposta dos escravos é superior se você só quiser o ancestral mais próximo que corresponda ao seu selector.

 18
Author: Drew Noakes, 2011-03-17 00:30:57

Pode usar os pais () para obter todos os pais com o selector indicado.

Descrição: obter os antepassados de cada um elemento no conjunto actual de correspondência elementos, filtrados opcionalmente por um selector.

Mas o pai() vai receber apenas o primeiro pai do elemento.

Descrição: obter o pai de cada elemento no conjunto actual de correspondência elementos, filtrados opcionalmente por um selector.

JQuery pai () vs. pais()

E há .parentsUntil () que eu acho que será o melhor.

Descrição: obter os antepassados de cada um elemento no conjunto actual de correspondência elementos, até à elemento correspondente ao selector.
 4
Author: Amr Elgarhy, 2011-03-17 00:38:29

Utilizar .parentsUntil ()

$(".d").parentsUntil(".a");
 0
Author: jai3232, 2018-07-23 17:49:41