Busca

Boas práticas de Desenvolvimento com Padrões Web


Navegando com a jQuery

Para os designers, familiarizar-se com a jQuery é um ato muito sutil. Isso se deve ao fato da mesma basear-se em um comando ( jQuery ou o seu atalho $ ) que referencia elementos e assim atribuir valores ou aplicar ações a eles. O mais interessante é que usamos as mesmas chamadas que usamos para [...]

11/09/2008 por Michael Granados
16 Comentários

Para os designers, familiarizar-se com a jQuery é um ato muito sutil. Isso se deve ao fato da mesma basear-se em um comando ( jQuery ou o seu atalho $ ) que referencia elementos e assim atribuir valores ou aplicar ações a eles. O mais interessante é que usamos as mesmas chamadas que usamos para referenciar elementos quando trabalhamos com CSS. Logo:

$('p') // Chama todos os paragrafos
$('.menu') // Chama os elementos que contenham a classe menu
$('#caixas .chamada') // Chama os elementos .chamada que estão dentro de #caixas
$('.menu, .box') // Chama a classe menu e a classe box
$('#lista *') // Chama todos os elementos que estão dentro de #lista

A jQuery ainda implementa algumas chamadas especiais, baseadas no CSS3.

$('#menu > li') // chama os li's filhos direto de #menu, exclui #menu li li
$('label + input') // chama apenas os inputs que tiveram um label antes <label></label> <input />
$('.galeria ~ .fotos') // chama todas as .fotos que estão no mesmo nivel e após .galeria
$('#menu li:fist') // Chama apenas o primeiro li dentro de #menu
$('table tr:even') // Chama apenas os tr's impares
$('tr[colspan=2]') // Chama os tr's que contenham o atributo colspan definido como 2
$('form :text')  // Chama os inputs com type definido como text, caixas de texto

A lista completa pode ser encontrada no site oficial da jQuery bem documentada e com exemplos para cada caso. Com a seleção na cabeça, podemos aplicar efeitos (hide, show, fadeIn, fadeOut, slideUp, slideDown por exemplo) nos elementos que selecionarmos, colocar atributos para estes elementos como css ou mesmo colocar eventos neles, ou seja, funções que rodam quando você faz alguma coisa com eles, como por exemplo clicar, passar o mouse em cima, dar dois cliques, colocar o cursor na caixa de texto e assim por diante.

Em um exemplo prático, vamos fazer um menu com submenus onde não precisamos nos preocupar em adicionar classes e tudo mais. Primeiro vamos implantar o HTML, assim podemos fazer um belo menu semântico. Se quiser, aplique também um belo CSS, mas não se esqueça: não suma com os submenus neste momento, afinal, se o browser do usuário não possuir javascript ele não poderá mostrá-los. Então deixe os submenus à mostra porque depois vamos escondê-los via javascript.

<ul id="menu">
<li><a href="inicio">Inicio</a></li>
<li><a href="#" title="Estas são as categorias do meu site">Categorias</a>
<ul>
<li><a href="ferramentas">Ferramentas</a></li>
<li><a href="downloads">Downloads</a></li>
<li><a href="templates">Templates</a></li>
</ul>
</li>
<li><a href="#" title="Artigos técnicos">Artigos</a>
<ul>
<li><a href="tableless">Tableless</a></li>
<li><a href="javascript">JavaScript</a></li>
<li><a href="php">PHP</a></li>
<li><a href="#">Banco de dados</a>
<ul>
<li><a href="mysql">MySQL</a></li>
<li><a href="postgree">PostGree</a></li>
</ul>
</li>
<li><a href="python">Python</a></li>
</ul>
</li>
</ul>

Note que não há qualquer referência a quem é pai ou filho de sebmenu. Vamos usar as chamadas da própria jQuery para encontrar quem tiver submenu. O resultado deste menu, já com CSS aplicado pode ser visto aqui.

Agora, vamos desaparecer com os submenus de forma dinâmica. Lembre-se que não podemos aplicar a jQuery em qualquer lugar, afinal o html pode ainda não ter sido gerado quando o script rodar, então colocamos o “desaparecimento” dentro da função de carregamento da própria jQuery. Isto fará com que nosso script só seja executado quando todo o HTML for carregado.

<script type="text/javascript">
$(function(){ // Inicio da função de carregamento
$('#menu ul').hide()
}) // Fim da função de carregamento
</script>

Com uma simples linha, sumimos com os submenus com a função hide(), note que usamos os próprios atributos para os quais chamamos esses submenus com CSS. Veja como desaparecemos com os submenus de uma forma simples e fácil.

Agora, a dinâmica! Vamos usar a chamada aos submenus usando como referencia os links que tenham como href o valor de # (tralha, sustenido, lasagna, jogo-da-velha, plus, ou como você quiser chamar). Fica assim:

$('#menu a[href=#]')

Assim, filtramos todos os nossos links pegando somente os links dentro de #menu que tenham o href como #.

Neles vamos implantar os comandos de click para mostrar o menu e o submenu, mas primeiro precisamos navegar entre os elementos. Para isso, usamos next ou prev, funções próprias da jQuery que navega entre o elemento que estiver após ou antes (respectivamente) do elemento em questão. Levando em conta que as funções de ação da jQuery (click/hover/toogle/etc) recebem como parâmetro this o elemento que recebeu a ação temos:

$('a[href=#]').click(function(){
this // é o elemento "a" (link) que foi clicado naquele momento
})

Então vamos navegar até o submenu, que é o elemento que está após o link:

$('a[href=#]').click(function(){
$(this).next() // Agora sim, com base no link (dinamicamente) temos o submenu
}

Perceba que apesar de recebermos em this o elemento, precisamos usar mais uma vez a jQuery pois se trata do elemento em si e não uma chamada à ele via jQuery.

Agora sim, podemos sumir ou aparecer com os submenus, usando o slideToggle da jQuery vemos como isso é implantado de forma simples e prática. Precisamos aplicar também um return false para cancelar a navegação do link, afinal ele não deixou de ser um link.

$('a[href=#]').click(function(){
$(this).next().slideToggle() // Some, aparece, some, aparece, incrivelmente simples com a jQuery
return false
}

Com apenas seis linhas de código (real) concluímos um menu com submenu dinâmico, navegando entre os elementos com a jQuery. Ainda aplicamos uma animação para esse submenu. O resultado pode ser visto aqui.

Um dos motivos pelos quais a jQuery é uma das bibliotecas mais incríveis de se trabalhar porque seu aprendizado é simples e prático. Vale a pena investir um tempo para aprender a usá-la.

16 Comentários

Sua opinião:

Vamos elevar o nível de discussão. Exponha sua opinião, sua crítica.



RSS dos comentários deste post
URL para Trackback

16 Comentários

Neto 11/09/2008 às 09:14

Mais um ótimo post sobre JQuery, parabéns!

Erle Carrara 11/09/2008 às 11:06

Muito bom o post, mostra como é muito fácil usar a jQuery para coisas que ficariam complicadas fazendo de outro jeito.

Caio Moritz Ronchi 11/09/2008 às 12:44

Olá,

Parabéns pelo texto!

Há um pequeno erro na segunda listagem de código:

$(‘table tr:even’) // Chama apenas os tr’s impares

Onde se lê “ímpares” seria “pares”.

Guilherme Rambo 11/09/2008 às 13:50

jQuery é muito divertido, desde que conheci nunca mais parei de usá-lo!

PS: estou postando uns screencasts sobre jQuery no meu blog

Fabrício 11/09/2008 às 17:20

Muito bom o post, Michael! Dei uma olhada rápida e percebi que você usou o mesmo exemplo que usou no curso de Ajax. Valeu, sucesso!!

Raul Souza Lima 12/09/2008 às 14:39

Muito bom o post.
Recentemente me apareceu uma dúvida, se alguém ai souber como resolver, please!

Vamos supor que quero pegar uma ul filha do link q eu clicar. Mais ou menos como $(“#menu > ul”), mas irá depender do elemento que eu clicar, ou seja this. Seria algo como $(this > ul), mas como pode ver isso não funciona.

Alguém sabe como eu poderia fazer isso?

DGmike 12/09/2008 às 15:54

Raul, você pode usar o $(this).children(‘ul’)

Ajax Online » Tutoriais » Navegando com a jQuery 20/09/2008 às 15:29

[...] mais aqui no Tableless. Tagged as: botão voltar, historico, jquery, tableless, [...]

Diego Machado 30/09/2008 às 14:11

Muito bom para os iniciantes =D

Consertando um errinho, na segunda listagem de código pra pegar o primeiro elemento está escrito “fist”, quando na verdade é “first”.

;*

Fagner 02/05/2009 às 12:22

Ótima referência, pricipalmente para quem já sofreu muito para desenvolver esse tipo de menu apenas com lista e css ¬¬
Parabéns!.

Thiago 14/07/2009 às 11:19

Legal o post.
Só uma coisa, utilizo firefox e os tamanhos das fontes não estão legais aqui.

É impossível ler os códigos, ta minusculo.

Resolução 1280×1024

Vinicius WebMastes 02/09/2009 às 09:39

Excelente post!
Mostra como JQuery torna fazer efeitos uma tarefa muito facil!
Parabens!

Bem, como o Thiago ja disse, a fonte da tag

 ta muito pequena... fica ruim de ler, e tenho certeza que nao é essa a intenção.

Clica Aqui » 1a. Conferência Web W3C Brasil 02/09/2009 às 23:03

[...] Navegando com a jQuery Tags: Categoria: web [...]

Wellington Rodrigues 12/01/2010 às 13:00

Salve,

Mais um bom POST sobre quem realmente conheçe desenvolvimento web.

Parabéns!

Grande abraço

tiago sabadini 19/01/2010 às 08:29

A Jquery realmente veio para facilitar a nossa vida…ontem fiz uma função parecida com essa

$(function(){
$(‘.conteudo-slow’).hide()
$(‘.titulo-show’).click(
function(e){
e.preventDefault()
var id = $(this).attr(‘name’)
$(‘#’+id).slideToggle()
}
)
});