Eduardo Mendes (edumendes@gmail.com)
jQuery
1
Eduardo Mendes (edumendes@gmail.com)2
Biblioteca JavaScript
rápida, pequena e rica em recursos
Percorre e manipula documentos
HTML, trata eventos, animações
Facilita a utilização de AJAX
Eduardo Mendes (edumendes@gmail.com)33
32kB
CSS 3
Cross-Browser
Eduardo Mendes (edumendes@gmail.com)
O que você pode fazer com jQuery
4
revelar elementos da interface
Eduardo Mendes (edumendes@gmail.com)
O que você pode fazer com jQuery
5
alterar conteúdo baseado na interação do usuário
Eduardo Mendes (edumendes@gmail.com)
O5 maneiras
de utilizar jQuery
6
Eduardo Mendes (edumendes@gmail.com)
05 maneiras de utilizar jQuery
7
encontrar elementos no documento HTML
alterar conteúdo HTML
ouvir o que o usuário faz e reagir em conformidade
animar o conteúdo da página
comunicar-se pela rede para recuperar novos conteúdos
Eduardo Mendes (edumendes@gmail.com)8
Alterando o conteúdo
um documento HTML
<!DOCTYPE html>
<html>
<head>
<title>jQuery Festas</title>
</head>
<body>
<h1>O que eu quero fazer?</h1>
<p>Planejar minha próxima festa</p>
</body>
</html>
Como alterar o texto da tag <h1>?
encontre-o
altere-o
Eduardo Mendes (edumendes@gmail.com)9
Alterando o conteúdo
um documento HTML
<!DOCTYPE html>
<html>
<head>
<title>jQuery Festas</title>
</head>
<body>
<h1>O que eu quero fazer?</h1>
<p>Planejar minha próxima festa</p>
</body>
</html>
encontre-o
Como procurar um elemento/tag
HTML com jQuery?
Para isso precisamos entender como
um navegador organiza o seu conteúdo
Eduardo Mendes (edumendes@gmail.com)
Document Object Model
Os navegadores armazenam
os elementos de uma página HTML
em uma estrutura de árvores,
que permite encontrar e manipular
estes elementos através de JavaScript
10
DOM
Eduardo Mendes (edumendes@gmail.com)11
HTML -> DOM
um documento HTML
<!DOCTYPE html>
<html>
<head>
<title>jQuery Festas</title>
</head>
<body>
<h1>O que eu quero fazer?</h1>
<p>Planejar minha próxima festa</p>
</body>
</html>
DOM
navegador
0% 100%
Eduardo Mendes (edumendes@gmail.com)12
HTML -> DOM
um documento HTML
<!DOCTYPE html>
<html>
<head>
<title>jQuery Festas</title>
</head>
<body>
<h1>O que eu quero fazer?</h1>
<p>Planejar minha próxima festa</p>
</body>
</html>
DOCUMENT
html
head
titles
jQuery Festas
body
h1
O que eu quer…
p
Planejar minh…
Eduardo Mendes (edumendes@gmail.com)13
Como realizar uma busca na árvore DOM?
A árvore do DOM
DOCUMENT
html
head
titles
jQuery Festas
body
h1
O que eu quer…
p
Planejar minh…
JavaScript
JavaScript fornece
uma linguagem
capaz de interagir
com DOM
Eduardo Mendes (edumendes@gmail.com)14
Como realizar uma busca na árvore DOM?
navegador servidor web
JavaScript
DOM
JavaScript
Cada navegador
tem um DOM diferente
Eduardo Mendes (edumendes@gmail.com)15
Entretanto
JavaScript
DOM
DOM
DOM
DOM
Cada navegador
tem um DOM
diferente
Eduardo Mendes (edumendes@gmail.com)16
Entretanto
JavaScript
DOM
DOM
DOM
DOM
Um arquivo JS que utiliza jQuery
para se comunicar com o DOM,
será capaz de executar na maioria dos
navegadores modernos
Eduardo Mendes (edumendes@gmail.com)
jQuery Básico
17
Eduardo Mendes (edumendes@gmail.com)18
jQuery básico
JavaScri
jQuery(<code>);
função principal jQuery
Eduardo Mendes (edumendes@gmail.com)19
jQuery básico
JavaScri
jQuery(document);
O DOM
Como utilizar para encontrar algum elemento no DOM?
Eduardo Mendes (edumendes@gmail.com)20
para usar a função é preciso utilizar seletores CSS
Documento HTML
<!DOCTYPE html>
<html>
<head>
<title>jQuery Festas</title>
</head>
<body>
<h1>O que eu quero fazer?</h1>
<p>Planejar minha próxima festa</p>
</body>
</html>
Seletores CSS
h1 {font-size: 3em;}
p { color: red; }
Eduardo Mendes (edumendes@gmail.com)21
Utilizando funções jQuery para achar o nó
Documento HTML
<!DOCTYPE html>
<html>
<head>
<title>jQuery Festas</title>
</head>
<body>
<h1>O que eu quero fazer?</h1>
<p>Planejar minha próxima festa</p>
</body>
</html>
Seletores jQuery
jQuery(“h1”);
jQuery(“p”);
$(“h1”)
$(“p”)
==
short
Eduardo Mendes (edumendes@gmail.com)22
Alterando o conteúdo
um documento HTML
<!DOCTYPE html>
<html>
<head>
<title>jQuery Festas</title>
</head>
<body>
<h1>O que eu quero fazer?</h1>
<p>Planejar minha próxima festa</p>
</body>
</html>
Como alterar o texto da tag <h1>?
encontre-o
altere-o
Eduardo Mendes (edumendes@gmail.com)23
Selecione o elemento pelo seu nome HTML
um documento HTML
<!DOCTYPE html>
<html>
<head>
<title>jQuery Festas</title>
</head>
<body>
<h1>O que eu quero fazer?</h1>
<p>Planejar minha próxima festa</p>
</body>
</html>
DOCUMENT
html
head
titles
jQuery Festas
body
h1
O que eu quer…
p
Planejar minh…
Eduardo Mendes (edumendes@gmail.com)24
Selecione o elemento pelo seu nome HTML
DOCUMENT
html
head
titles
jQuery Festas
body
h1
O que eu quer…
p
Planejar minh…
$(“h1”);
Eduardo Mendes (edumendes@gmail.com)25
Selecione o elemento pelo seu nome HTML
DOCUMENT
html
head
titles
jQuery Festas
body
h1
O que eu quer…
p
Planejar minh…
$(“h1”);
Eduardo Mendes (edumendes@gmail.com)26
Recuperando o texto do elemento
DOCUMENT
html
head
titles
jQuery Festas
body
h1
O que eu quer…
p
Planejar minh…
$(“h1”).text();
método jQuery
"O que eu quero fazer?"
Eduardo Mendes (edumendes@gmail.com)27
Modificando o texto do elemento
DOCUMENT
html
head
titles
jQuery Festas
body
h1
O que eu quer…
p
Planejar minh…
$(“h1”).text(“Hello jQuery");
método jQuery
“Hello jQuery"
Eduardo Mendes (edumendes@gmail.com)28
Modificando o texto do elemento
DOCUMENT
html
head
title
jQuery Festas
body
h1
Hello jQuery
p
Planejar minh…
$(“h1”).text(“Hello jQuery");
método jQuery
“Hello jQuery"
Eduardo Mendes (edumendes@gmail.com)
DOM em 1.º Lugar
O JavaScript pode executar

antes do carregamento total do DOM
29
DOM
$(“h1”).text(“Hello jQuery");
0% 100%
50%
É preciso certificar-se que o DOM está 100% carregado
para executar jQuery com confiança
Eduardo Mendes (edumendes@gmail.com)
DOM em 1.º Lugar
É possível verificar o final do carregamento
30
DOM0% 100%
50%
"I'm ready"
Como ouvir este evento?
Após ouvir o evento execute o <codigo>
Eduardo Mendes (edumendes@gmail.com)31
Ouvindo o evento ready
jQuery(document).ready(function(){
<code>
});
DOM
"I'm ready"
O código só executará depois que
o DOM estiver "pronto"
Eduardo Mendes (edumendes@gmail.com)32
O código por inteiro
jQuery(document).ready(function(){
$(“h1”).text(“Hello jQuery”);
});
Eduardo Mendes (edumendes@gmail.com)
Utilizando jQuery
33
Eduardo Mendes (edumendes@gmail.com)34
Utilizando jQuery
dowload jQuery
carregue-o em seu documento HTML
<script src=“jquery.min.js”></script>
daí é só utilizar
<script src=“application.js”></script>
1
2
3
Eduardo Mendes (edumendes@gmail.com)35
Alterando múltiplos elementos
Como alterar o texto de cada elemento de lista (<li>) deste trecho de código?
<h1>Qual o tema da festa?</h1>
<h2>Temas de festas</h2>
<p>Planeje sua próxima festa</p>
<ul id="temas">
<li>Grécia antiga</li>
<li>Oscar</li>
<li class='promo'>White Party</li>
</ul>
$(“li”);
ache-os
altere-os
Eduardo Mendes (edumendes@gmail.com)36
Alterando múltiplos elementos
Como alterar o texto de cada elemento de lista (<li>) deste trecho de código?
<h1>Qual o tema da festa?</h1>
<h2>Temas de festas</h2>
<p>Planeje sua próxima festa</p>
<ul id="temas">
<li>Grécia antiga</li>
<li>Oscar</li>
<li class='promo'>White Party</li>
</ul>
$(“li”).text(“À fantasia”);
ache-os
altere-os
Eduardo Mendes (edumendes@gmail.com)37
Alterando múltiplos elementos
Como alterar o texto de cada elemento de lista (<li>) deste trecho de código?
<h1>Qual o tema da festa?</h1>
<h2>Temas de festas</h2>
<p>Planeje sua próxima festa</p>
<ul id="temas">
<li>À fantasia</li>
<li>À fantasia</li>
<li class='promo'>À fantasia</li>
</ul>
$(“li”).text(“À fantasia”);
ache-os
altere-os
Eduardo Mendes (edumendes@gmail.com)38
Outras formas de selecionar elementos
h1 {...}
CSS jQuery
$(“h1”);
#conteudo { . . . } $(“#conteudo”);
.temas {...} $(“.temas”);
Eduardo Mendes (edumendes@gmail.com)
Manipulando eventos
39
Eduardo Mendes (edumendes@gmail.com)40
Função como parâmetro
$(document).ready(<funcao de manipulacao de evento>);
O método ready recebe por parâmetro uma função como parâmetro
function(){
<code>
}
Definição de função
$(document).ready(function(){
<code>
});
Eduardo Mendes (edumendes@gmail.com)41
Drinks especiais
Eduardo Mendes (edumendes@gmail.com)42
Esperando um click
$(document).ready(function(){
<code>
});
<h3>Lemon Breeze</h3>
<p class="lemon">
Um drinks mais que saudavel, ...
<button>Consultar Preco</button>
</p>
$('button').on('click', function() {
!
!
});
Eduardo Mendes (edumendes@gmail.com)43
Esperando um click
$(document).ready(function(){
$('button').on('click', function() {
!
!
!
});
});
Eduardo Mendes (edumendes@gmail.com)44
Esperando um click
$(document).ready(function(){
$('button').on('click', function() {
!
!
!
});
});
var preco = $('<span>$399.99</span>');
$('.lemon').append(preco);
Eduardo Mendes (edumendes@gmail.com)45
Esperando um click
$(document).ready(function(){
$('button').on('click', function() {
!
!
!
});
});
var preco = $('<p>$399.99</p>');
$('.lemon').append(preco);
$('button').remove();
Eduardo Mendes (edumendes@gmail.com)46
Seletores descendentes
Como encontrar os elementos <li> questão em uma <ul> de ID “temas"?
<h1>Qual o tema da festa?</h1>
<h2>Temas de festas</h2>
<p>Planeje sua próxima festa</p>
<ul id="temas">
<li>Grécia antiga</li>
<li>Oscar</li>
<li class='promo'>White Party</li>
</ul>
seletor descendente
Eduardo Mendes (edumendes@gmail.com)47
Seletores descendentes
Como encontrar os elementos <li> questão em uma <ul> de ID “temas"?
<h1>Qual o tema da festa?</h1>
<h2>Temas de festas</h2>
<ul id="temas">
<li>Grécia antiga</li>
<li>Oscar</li>
<li class='promo'>White Party</li>
</ul>
$(“temas li”);
body
h1
Qual o tema…
ul
li
Grécia Antiga
h2
Temas de fes…
li
Oscar
li
White Party
Eduardo Mendes (edumendes@gmail.com)48
Seletores descendentes
Como encontrar somente os filhos diretos?
<h1>Qual o tema da festa?</h1>
<h2>Temas de festas</h2>
<ul id="temas">
<li>Europa</li>
<li>
<ul>
<li>Grécia</li>
</ul>
</li>
<li class='promo'>White Party</li>
</ul>
$(“temas li”);
body
h1
Qual o tema…
ul
li
Europa
h2
Temas de fes…
li
Grécia
li
White Party
ul
li
Eduardo Mendes (edumendes@gmail.com)49
Seletores descendentes
Como encontrar somente os filhos diretos?
<h1>Qual o tema da festa?</h1>
<h2>Temas de festas</h2>
<ul id="temas">
<li>Europa</li>
<li>
<ul>
<li>Grécia</li>
</ul>
</li>
<li class='promo'>White Party</li>
</ul>
body
h1
Qual o tema…
ul
li
Europa
h2
Temas de fes…
li
Grécia
li
White Party
ul
li
seletor de filho
Eduardo Mendes (edumendes@gmail.com)50
Seletores descendentes
Como encontrar somente os filhos diretos?
<h1>Qual o tema da festa?</h1>
<h2>Temas de festas</h2>
<ul id="temas">
<li>Europa</li>
<li>
<ul>
<li>Grécia</li>
</ul>
</li>
<li class='promo'>White Party</li>
</ul>
$(“temas > li”);
body
h1
Qual o tema…
ul
li
Europa
h2
Temas de fes…
li
Grécia
li
White Party
ul
li
Eduardo Mendes (edumendes@gmail.com)51
Selecionando múltiplos elementos
<h1>Qual o tema da festa?</h1>
<h2>Temas de festas</h2>
<ul id="temas">
<li>Europa</li>
<li>
<ul id="grecia">
<li>Grécia</li>
</ul>
</li>
<li class='promo'>White Party</li>
</ul>
$(“.promo, #grecia”);
body
h1
Qual o tema…
ul
ul
Europa
h2
Temas de fes…
Grécia
li
White Party
li
li
li
Eduardo Mendes (edumendes@gmail.com)52
Seletores com pseudo classes
$("#temas li:first").text("alterado");
$("#temas li:last").text("alterado");
$("#temas li:odd").text("alterado");
$("#temas li:even").text("alterado");
Eduardo Mendes (edumendes@gmail.com)
Transversing
53
Eduardo Mendes (edumendes@gmail.com)54
Filtros com transversing
$(“temas li”);
$(“temas”).find(“li”);
O código é maior,
mas é mais eficiente
$(“li:first”);
$(“li”).first();
$(“li:last”);
$(“li”).last();
Eduardo Mendes (edumendes@gmail.com)55
Caminhando no DOM
E como encontrar o elemento do meio?
<h1>Qual o tema da festa?</h1>
<h2>Temas de festas</h2>
<ul id="temas">
<li>Grécia antiga</li>
<li>Oscar</li>
<li class='promo'>White Party</li>
</ul>
Eduardo Mendes (edumendes@gmail.com)56
Caminhando no DOM
E como encontrar o elemento do meio?
$(“li”).first();
body
h1
Qual o tema…
ul
li
Grécia Antiga
h2
Temas de fes…
li
Oscar
li
White Party
Eduardo Mendes (edumendes@gmail.com)57
Caminhando no DOM
E como encontrar o elemento do meio?
$(“li”).first().next();
body
h1
Qual o tema…
ul
li
Grécia Antiga
h2
Temas de fes…
li
Oscar
li
White Party
Eduardo Mendes (edumendes@gmail.com)58
Caminhando no DOM
E como encontrar o elemento do meio?
$(“li”).first().prev();
body
h1
Qual o tema…
ul
li
Grécia Antiga
h2
Temas de fes…
li
Oscar
li
White Party
Eduardo Mendes (edumendes@gmail.com)59
Caminhando no DOM
Também é possível encontrar o elemento pai
$(“li”).first().parent();
body
h1
Qual o tema…
ul
li
Grécia Antiga
h2
Temas de fes…
li
Oscar
li
White Party
Eduardo Mendes (edumendes@gmail.com)60
Seletores descendentes
Como encontrar os filhos direto com transversing?
<h1>Qual o tema da festa?</h1>
<h2>Temas de festas</h2>
<ul id="temas">
<li>Europa</li>
<li>
<ul>
<li>Grécia</li>
</ul>
</li>
<li class='promo'>White Party</li>
</ul>
body
h1
Qual o tema…
ul
li
Europa
h2
Temas de fes…
li
Grécia
li
White Party
ul
li
$(“temas”).children(“li”);
Eduardo Mendes (edumendes@gmail.com)61
Caminhando no DOM
Como encontrar os filhos diretos utilizando transversing?
$(“temas”).children(“li”);
enquanto o método
find() seleciona
todos os <li>
o método children()
seleciona apenas os
<li> que são filhos
diretos
Eduardo Mendes (edumendes@gmail.com)
Trabalhando com DOM
62
Eduardo Mendes (edumendes@gmail.com)63
Anexando e Removendo no DOM
Eduardo Mendes (edumendes@gmail.com)64
Anexando um elemento ao DOM
anexar um novo nó no DOM
remover um nó do DOM
1
2
Eduardo Mendes (edumendes@gmail.com)65
Anexando um elemento ao DOM
$(document).ready(function(){
<code>
});
var preco = ”$399.99”;
var preco = ”<span>$399.99</span>”;
var preco = ”$(<span>$399.99</span>)";
span
$399.99
Não é HTML
Funciona, mas
é apenas uma String
Cria um nó manipulável
Eduardo Mendes (edumendes@gmail.com)66
Anexando um documento no DOM
$(document).ready(function(){
var preco = $('<span>$399.99</span>');
!
});
.append(<elemento>); .prepend(<elemento>);
.after(<elemento>); .before(<elemento>);
Eduardo Mendes (edumendes@gmail.com)67
HTML Original
Eduardo Mendes (edumendes@gmail.com)68
Before
$(document).ready(function(){
var preco = $('<span>$399.99</span>');
$('.lemon').before(preco);
});
Eduardo Mendes (edumendes@gmail.com)69
After
$(document).ready(function(){
var preco = $('<span>$399.99</span>');
$('.lemon').after(preco);
});
Eduardo Mendes (edumendes@gmail.com)70
Prepend
$(document).ready(function(){
var preco = $('<span>$399.99</span>');
$('.lemon').prepend(preco);
});
preco no topo
de .lemon
Eduardo Mendes (edumendes@gmail.com)71
Append
$(document).ready(function(){
var preco = $('<span>$399.99</span>');
$('.lemon').append(preco);
});
preco na base
de .lemon
Eduardo Mendes (edumendes@gmail.com)72
Anexando e removendo
$(document).ready(function(){
$('button').on('click', function() {
!
!
!
});
});
var preco = $('<p>$399.99</p>');
$('.lemon').append(preco);
$('button').remove();
Eduardo Mendes (edumendes@gmail.com)73
Anexando a partir do nó que se anexa
.appendTo(<elemento>); .prependTo(<elemento>);
.afterTo(<elemento>); .beforeTo(<elemento>);
$(document).ready(function(){
var preco = $('<span>$399.99</span>');
$('.lemon').append(preco);
});
preco.appendTo(”$(“.lemon”));
Eduardo Mendes (edumendes@gmail.com)
Trabalhando
com múltiplos elementos
74
Eduardo Mendes (edumendes@gmail.com)75
Trabalhando com múltiplos elementos
Eduardo Mendes (edumendes@gmail.com)76
Alterando a estrutura do código
Eduardo Mendes (edumendes@gmail.com)77
Alterando a estrutura do código
$(document).ready(function(){
$('button').on('click', function() {
!
!
!
});
});
var preco = $(‘<p>R$ 15,00</p>’);
$('.bebida').append(preco);
$('button').remove();
Eduardo Mendes (edumendes@gmail.com)78
Alterando a estrutura do código
Eduardo Mendes (edumendes@gmail.com)79
Uma introdução ao this
$(document).ready(function(){
$('button').on('click', function() {
!
!
!
});
});
var preco = $(‘<p>R$ 15,00</p>’);
$('.bebida').append(preco);
$('button').remove();
Quando o botão é clicado,
ele será o 'this'
Eduardo Mendes (edumendes@gmail.com)80
Apresentando o $(this)
Eduardo Mendes (edumendes@gmail.com)81
Corrigindo
$(document).ready(function(){
$('button').on('click', function() {
!
!
!
});
});
var preco = $(‘<p>R$ 15,00</p>’);
$('.bebida').append(preco);
$('button').remove();
this.remove();
$(this).remove();
Não é um objeto jQuery
OK! E removerá somente
o botão clivado
Eduardo Mendes (edumendes@gmail.com)82
Corrigindo
$(document).ready(function(){
$('button').on('click', function() {
!
!
!
});
});
var preco = $(‘<p>R$ 15,00</p>’);
$('.bebida').append(preco);
$(this).remove();
Eduardo Mendes (edumendes@gmail.com)83
Alterando a estrutura do código
Eduardo Mendes (edumendes@gmail.com)84
Alterando a estrutura do código
Eduardo Mendes (edumendes@gmail.com)85
Corrigindo
$(document).ready(function(){
$('button').on('click', function() {
!
!
!
});
});
var preco = $(‘<p>R$ 15,00</p>’);
$('.bebida').append(preco);
$(this).remove();
Eduardo Mendes (edumendes@gmail.com)86
Corrigindo
$(document).ready(function(){
$('button').on('click', function() {
!
!
!
});
});
var preco = $(‘<p>R$ 15,00</p>’);
$(this).after(preco);
$(this).remove();
Eduardo Mendes (edumendes@gmail.com)87
Comportamento correto
Eduardo Mendes (edumendes@gmail.com)88
E se o DOM for alterado
$(document).ready(function(){
$('button').on('click', function() {
!
!
});
});
var preco = $(‘<p>R$ 15,00</p>’);
$(this).after(preco);
$(this).remove();
O preço ficaria dentro
da <div> ao invés do <li>
Eduardo Mendes (edumendes@gmail.com)
89
Use .closest(<seletor>)
$(this).after(preco)
$(this).parent().parent().append(preco);
$(this).parents(“.bebida”).append(preco);
$(this).closest(“.bebida”).append(preco);
Retorna todos os ancestrais
com este seletor
Retorna apenas um nó
Eduardo Mendes (edumendes@gmail.com)
Adicionando dados
90
Eduardo Mendes (edumendes@gmail.com)91
Todas as bebidas têm o mesmo valor
Eduardo Mendes (edumendes@gmail.com)92
Adicionando um atributo data
<li class="bebida"
<p>
<img src="imagens/yellow.gif" />
</p>
<h3>Lemon Breeze</h3>
<p>Um drinks mais. . . <br/></p>
<button>Consultar Preco</button>
</li>
data-preco="15,00"> Este é um elemento faz parte
da HMTL5 que deve ser
utilizado para fornecer
informações adicionais
sobre os objetos das páginas
.data(<nome>)
.data(<nome>, <valor>)
$(‘.bebida’).first().data(‘preco');
“15,00”
Eduardo Mendes (edumendes@gmail.com)93
Refatorando o preco
$(document).ready(function(){
$('button').on('click', function() {
!
!
!
});
});
var preco = $(‘<p>R$ 15,00</p>’);
$('.bebida').append(preco);
$('button').remove();
var valor = $(this).closest(‘.bebida’).data(‘preco’);
var preco = $(‘<p>R$ ’ + valor + ‘</p>' );
Recupera o valor
do atributo data-preco
Concatenação das 02 Strings
Eduardo Mendes (edumendes@gmail.com)94
Refatorando o preco
Cada$(document).ready(function(){
$('button').on('click', function() {
var valor = $(this).closest(".bebida").data('preco');
var preco = $("<p>R$" + valor + "</p>");
$(this).closest(".bebida").append(preco);
$(this).remove();
});
});
Cada bebida terá
seu próprio preço
Eduardo Mendes (edumendes@gmail.com)95
Cada bebida com seu próprio preço
Eduardo Mendes (edumendes@gmail.com)96
Refatorando o preco
Cada
$(document).ready(function(){
$('button').on('click', function() {
var valor = $(this).closest(".bebida").data('preco');
var preco = $("<p>R$" + valor + "</p>");
$(this).closest(".bebida").append(preco);
$(this).remove();
});
});
var valor = bebida.data(‘preco’);
bebida.append(preco);
var bebida = $(this).closest(“.bebida”);
Eduardo Mendes (edumendes@gmail.com)
Refatorando o preco
Cada
$(document).ready(function(){
$('button').on('click', function() {
var bebida = $(this).closest(".bebida");
var valor = bebida.data('preco');
var preco = $("<p>R$" + valor + "</p>");
bebida.append(preco);
$(this).remove();
});
});
Eduardo Mendes (edumendes@gmail.com)
Adicionando mais elementos
98
Eduardo Mendes (edumendes@gmail.com)99
E se tivéssemos mais um grupo de botões?
Eduardo Mendes (edumendes@gmail.com)100
É necessário transversing + seletores
$(document).ready(function(){
$('button').on('click', function() {
. . .
});
});
$(‘#bebidas button').on('click', function() {});
$(‘#bebidas').on('click', ‘button’, function() {});
atinge somente os botoes
que estiverem um dentro de um
“#bebidas"
Eduardo Mendes (edumendes@gmail.com)
Filtrando
101
Eduardo Mendes (edumendes@gmail.com)102
Filtrando o HTML
<div id="filtros">
<button class="filtro-promo">Promocao do Dia</button>
<button class="filtro-sem-alcool">Sem Alcool</button>
</div>
Vamos adicionar dois tratadores de eventos
Vamos destacar as seções correspondentes quando clivados
Eduardo Mendes (edumendes@gmail.com)103
Filtrando bebidas em promoção
$("#filtros").on("click", ".filtro-promo", function() {
//encontrar todos os elementos <li> que estão
//promocao e adicionar uma classe a eles
});
<li class="bebida promo" data-preco="15,00">
<p>
<img src="imagens/yellow.gif" />
</p>
…
</li>
$(“.bebida”).filter(".promo") //
Eduardo Mendes (edumendes@gmail.com)104
Manipulação de classes
.addClass(<class>)
.removeClass(<class)
Eduardo Mendes (edumendes@gmail.com)105
Filtrando bebidas em promoção
$("#filtros").on("click", ".filtro-promo", function() {
$(".bebida").filter(".promo").addClass("destacada");
});
apenas bebidas em promoção adiciona a classe destacada
A mesma coisa para a outra classe
$("#filtros").on('click', '.filtro-sem-alcool', function() {
$(".bebida").filter(".sem-alcool").addClass("destacada");
});
Eduardo Mendes (edumendes@gmail.com)106
Bebidas destacadas
Eduardo Mendes (edumendes@gmail.com)
Qual a solução?
107
Eduardo Mendes (edumendes@gmail.com)108
Remover a classe que destaca
$("#filtros").on("click", ".filtro-promo", function() {
$(".destacada").removeClass("destacada");
$(".bebida").filter(".promo").addClass("destacada");
});
!
$("#filtros").on('click', '.filtro-sem-alcool', function() {
$(".destacada").removeClass("destacada");
$(".bebida").filter(".sem-alcool").addClass("destacada");
});
Eduardo Mendes (edumendes@gmail.com)109
Bebidas destacadas
Eduardo Mendes (edumendes@gmail.com)
Revelando elementos
110
Eduardo Mendes (edumendes@gmail.com)111
Página de receitas
Eduardo Mendes (edumendes@gmail.com)112
Apresentando a receita
<ul id="bebidas">
<li class="bebida promo" data-preco="15,00">
<h3>Lemon Breeze</h3>
<button>Receita completa</button>
<ul class="receita">
<li>Passo 1</li>
<li>Passo 2</li>
<li>Passo 3</li>
</ul>
</li>
.receita { display: none; }
Eduardo Mendes (edumendes@gmail.com)113
Apresentando a receita
<ul id="bebidas">
<li class="bebida promo" data-preco="15,00">
<h3>Lemon Breeze</h3>
<button>Receita completa</button>
<ul class="receita">
<li>Passo 1</li>
<li>Passo 2</li>
<li>Passo 3</li>
</ul>
</li>
.slideDown() .slideUp() .slideToggle()
Eduardo Mendes (edumendes@gmail.com)114
Apresentando a receita
<ul id="bebidas">
<li class="bebida promo" data-preco="15,00">
<h3>Lemon Breeze</h3>
<button>Receita completa</button>
<ul class="receita">
<li>Passo 1</li>
<li>Passo 2</li>
<li>Passo 3</li>
</ul>
</li>
Quando clicar
no <button>
aparecer a
<ul> receita
$(".bebida").on("click", "button", function() {
$(this).closest(".bebida").find(".receita").slideDown ();
});
Eduardo Mendes (edumendes@gmail.com)115
Outro evento
Aparecer quando passarmos o mouse por cima do nome da bebida
Eduardo Mendes (edumendes@gmail.com)
116
Escolhendo o evento
$(".bebida").on("click", "button", function() {
$(this).closest(".bebida").find(".receita").slideDown ();
});
!
$(“.bebida").on("?", "h3", function() {
$(this).closest(".bebida").find(".receita").slideDown ();
});
click
dbclick
focusin
focusout
mousedown
mouseup
mousemove
mouseout
mouseenter
mouseleave
diferenças em: http://www.quirksmode.org/js/events_mouse.html
Eduardo Mendes (edumendes@gmail.com)
Escolhendo o evento
$(".bebida").on("click", "button", function() {
$(this).closest(".bebida").find(".receita").slideDown ();
});
!
$(“.bebida").on("mouseenter", "h3", function() {
$(this).closest(".bebida").find(".receita").slideDown ();
});
Eduardo Mendes (edumendes@gmail.com)118
Ok!
Aparecer quando passarmos o mouse por cima do nome da bebida
Eduardo Mendes (edumendes@gmail.com)
Mais uma refatoração
$(".bebida").on("click", "button", function() {
$(this).closest(".bebida").find(".receita").slideDown ();
});
!
$(“.bebida").on("mouseenter", "h3", function() {
$(this).closest(".bebida").find(".receita").slideDown ();
});
function exibirReceita(){
$(this).closest(".bebida").find(".receita").slideDown();
});
Eduardo Mendes (edumendes@gmail.com)
Eventos do teclado
120
Eduardo Mendes (edumendes@gmail.com)121
Atualizando dados
Eduardo Mendes (edumendes@gmail.com)122
Eventos de teclado
<div class="bebida" data-preco="15">
<h3>Lemon Breeze</h3>
<p>R$ 15,00 por cada</p>
<input type="text" class="quantidade" value="1" />
</p>
<p>Preço total: R$ <span id="total">R$ 15</span>,00</p>
</div>
quando for alterado
alterar também o total
Eduardo Mendes (edumendes@gmail.com)123
Eventos de teclado
$(“.bebida”).on("???", ".quantidade", function() {
!
!
});
keypress keydown keyup
http://api.jquery.com/category/events/keyboard-events/
Eduardo Mendes (edumendes@gmail.com)124
Eventos de teclado
$(“.bebida”).on("keyup", ".quantidade", function() {
!
!
!
});
// Recuperar o preço da bebida
// Recuperar a quantidade de bebida
// Modificar o total para preço * quantidade
var preco = $(this).closest(".bebida").data("preco");
"15"
var preco = +$(this).closest(".bebida").data("preco");
15
Eduardo Mendes (edumendes@gmail.com)125
Eventos de teclado
$(“.bebida”).on("keyup", ".quantidade", function() {
!
!
!
});
var preco = +$(this).closest(".bebida").data("preco");
// Recuperar a quantidade de bebida
// Modificar o total para preço * quantidade
var quantidade = $this).val();
"2"
var quantidade = +$(this).val();
2
Eduardo Mendes (edumendes@gmail.com)126
Eventos de teclado
$(“.bebida”).on("keyup", ".quantidade", function() {
!
!
!
});
var preco = +$(this).closest(".bebida").data("preco");
var quantidade = +$(this).val();
// Modificar o total para preço * quantidade
$("#total").text(preco * quantidade);
Eduardo Mendes (edumendes@gmail.com)127
Eventos de teclado
$(“.bebida”).on("keyup", ".quantidade", function() {
!
!
!
});
var preco = +$(this).closest(".bebida").data("preco");
var quantidade = +$(this).val();
$("#total").text(preco * quantidade);
Assim o valor atualizará
imeditamente

Jquery