Para dar um exemplo simplificado, tenho o seguinte bloco repetido na página muitas vezes (é gerado dinamicamente):
<div class="box">
<div class="something1"></div>
<div class="something2">
<a class="mylink">My link</a>
</div>
</div>
Quando clicado, posso chegar ao pai do link com:
$(".mylink").click(function() {
$(this).parents(".box").fadeOut("fast");
});
No entanto ... eu preciso chegar ao <div class="something1">
daquele pai em particular.
Basicamente, alguém pode me dizer como me referir a um irmão de nível superior sem ser capaz de me referir a ele diretamente? Vamos chamá-lo de irmão mais velho. Uma referência direta ao nome da classe do irmão mais velho faria com que cada instância desse elemento na página desaparecesse - o que não é o efeito desejado.
Eu tentei:
parents(".box .something1") ... no luck.
parents(".box > .something1") ... no luck.
siblings() ... no luck.
Qualquer um? Obrigado.
.parent()
não é.parents()
Respostas:
A chamada
.parents(".box .something1")
retornará todos os elementos pais que correspondem ao seletor.box .something
. Em outras palavras, ele retornará os elementos pais que estão.something1
e estão dentro de.box
.Você precisa obter os filhos do pai mais próximo, assim:
Este código chama
.closest
para obter o pai mais interno correspondendo a um seletor e, em seguida, chama.children
esse elemento pai para encontrar o tio que você está procurando.fonte
parent()
é o elemento errado..closest(...)
é mais resiliente e legível também.Percorrer a árvore é divertido
E de muitas outras maneiras, esses documentos podem ser úteis.
fonte
Isso encontrará o primeiro pai com classe, em
box
seguida, encontrará a primeira classe filho com correspondência regexsomething
e obterá o id.fonte
Se entendi seu problema corretamente,
$(this).parents('.box').children('.something1')
é isso que você está procurando?fonte
Você pode usar
.each()
com.children()
e um seletor entre parênteses:fonte