Screencaster Transmitindo conhecimento


jQuery - Buscando próximo elemento no código

Hoje estava conversando com um amigo que tinha uma dúvida sobre jQuery: ele tinha uma estrutura semelhante à esta:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
	<a href="" id="link_novidades">Novidades</a>
	<div>
		<p>Uma pagina com novidades</p>
	</div>
 
	<br>
 
	<a href="" id="link_downloads">Downloads</a>
	<div>
		<p>Uma pagina com downloads</p>
	</div>
 
	<br>
 
	<a href="" id="link_contato">Contato</a>
	<div>
		<p>Uma pagina com contato</p>
	</div>

E queria que, ao clicar no link, a div que aparece abaixo dele no código fosse exibida ou ocultada, como no exemplo que vocês podem ver aqui. Isto poderia ser feito com IDs ou classes, porém dependendo do caso poderia ficar chato definir IDs ou classes para cada uma das DIVs.

A dúvida principal é, então: como buscar o próximo elemento no código com jQuery? A solução foi utilizar o seletor com sinal de “+“. Digamos que eu queira em um CSS da vida buscar a div imediatamente após um determinado elemento de ID#elemento“, isso seria feito da seguinte forma:

#elemento + div

Assim, a div que aparece no código logo após o #elemento seria selecionada. Com jQuery, podemos fazer algo bem parecido, ficando o código para nosso exemplo que citei no começo do post assim:

1
2
3
4
5
6
$(function(){
	$("a").click(function(){
		$("#"+$(this).attr("id")+" + div").toggle()
		return false
	})
})

Refatorando este código, temos:

1
2
3
4
5
6
7
8
$(function(){
	$("a").click(function(){
		var id = $(this).attr("id")
		$("#"+id+" + div").toggle()
 
		return false
	})
})

Aí está, um exemplo bem simples de como seleções com “+” funcionam. Lembrando que no exemplo eu usei o atributo ID do link, mas você pode utilizar qualquer outro atributo que seja único àquele link (href, por exemplo). Espero que vocês tenham compreendido ele, e passem a utilizá-lo para seu benefício ;)

Até mais!


4 pessoas comentaram

  1. Jader Rubini says:

    Você também poderia colocar simplesmente $($(this) + " + div").toggle(), ao invés de $("#"+$(this).attr("id")+" + div").toggle()

  2. inside says:

    Opa! Boa dica!

  3. Neri Júnior says:

    Só porque eu tive essa duvida no msn né… brincadeira, bom conteudo!

  4. Maujor says:

    Olá Guilherme.
    Parabéns pelas dicas jQuery.
    Dentro do contexto proposto uma outra solução é com uso do método next() e atribuição de uma classe (p.ex: abre-fecha) aos elementos a que disparam a ação, como mostrado a seguir:


    $(function(){
    $(".abre-fecha").click(function(e){
    e.preventDefault();
    $(this).next().toggle();
    })
    })

    Notas:
    1-) O método preventDefault() é a sintaxe equivalente jQuery para return false.
    2-) Dependendo da estrutura de marcação a atribuição da classe aos links poderá ser retirada do HTML e feita com uso do método addClass

Agora é a sua vez: