-
-- .
.... - ....
-
' M aurício Samy Silva
novatec ' www.mau;or.com
. \ '
Sumário
A radecimentos ....................................................................................................... 11
onsa bilidade.·-··· ............................................................................... 12
Sobre o autor 13
Introdução .............................................................................................................. 15
7
8 jQuery • A Biblioteca do Programador JavaScript
3.4 Manip ulação de textos .... ... ... .. .......... .... .. .... .... ..... .................. .. ..... ....... 109
3.5 Manip ulação de valo res ... ... ........................... ... .... ........... ... .... ....... ....... . lll
3.6 Manipulação de conteúdos .................... ................... .......... .................... 113
Agradeço a Deus por ter me dado forças, disposição e motivação para escrever
este livro.
11
'vlatenal com '111 J& autorais
Isenção de responsabilidade
Todos os esforços foram feiros na elaboração deste livro para assegurar o for-
necimento de informações as mais precisas, completas e exatas. Contudo, as
informações aqui contidas são fornecidas "como esrão" e sem nenhuma garantia,
seja expressa, seja implícita. O autor, a editora, os distribuidores e qualquer en-
tidade envolv ida direta ou ind iretamente na sua comercia lização não assumirão
nenhuma responsabilidade por qualquer prejuízo ou dano, direco ou indireto,
consequente às informações contidas nesre livro.
12
'vlatenal com d1re1to& autorais
Sobre oautor
13
'vlatenal com '111 1& autorais
14 jQuery • A Biblioteca do Programador JavaScript
Este livro tem por objetivo fornecer aos profissionais envo lvidos com o desen-
volvimento para a ·web os conceitos fundamenta is e técnicas de programação
necessár ias ao emprego da biblioteca jQuery na criação de efeiros especiais e
obtenção de comportamentos de variadas naturezas em sites web, tornando-os
mais interativos e visualmente mais agradáveis e amigáveis. Aborda o uso da
linguagem de programação JavaScript segundo a sintaxe especificamente criada
para fazer funcionar e tornar usável a biblioteca jQu ery.
A primeira parte compreende os capítu los dela 7 e tem por objetivo apresentar a
biblioceca,cxaminar sua sintaxe geral e escudar o emprego e finalidade dos métodos,
propriedades e d iferentes funcionalidades disponíveis na biblioteca ]Quer}(
Cada capítu lo desta parte está estruturado para escudar efeitos em elementos
específicos do HT ML O capítulo 8 introduz a parte prática do livro e dedica-se
ao estudo dos efeitos de animação básicos com ênfase nas técnicas de revelar e
esconder conteúdos marcados com diferentes elementos HTML.
15
'vlatenal com '111 1& autorais
16 jQuery • A Biblioteca do Programador JavaScript
Convenções tipográficas
Com a fina lidade de destacar diferentes tipos de informação neste livro, ado ra-
ram-se algumas convenções tipográficas mostradas a seguir.
Dica
Alerta
jQuery, ao contrario de JavaScript, não requer loops para construir arrays quando
busca elementos no DOM. O construtor S() armazena tudo que encontra,
automaticamente, em um objeto array.
Terminologia
Texco estabelecendo a adoção de grafia-padrão em todo o livro para termos ou
frases com mais de uma terminologia, tradução ou significado:
Chamada
Uma chamada para uma seção anterior na qual o assunto em questão foi expli-
cado com detalhes.
Por exemplo:
Esta função destina-se a servir de container para scripts jQuery que devam ser
executados somente após o carregamento do DOM. É uma função que substitui
o método ready() estudado em [C l Sl.1.6.2]. Neste exemplo a chamada é para a
seção 1.1.6.2 do capítulo 1.
Marcação e scripts
as marcações e scripts que exemplificam a reoria, transcreveram-se somente
os trechos que interessam ao assunto tratado. Omitiram-se os trechos que não
dizem respeito ou não são relevantes para o entendimento do assunto, para não
ocupar espaço des necessário no livro.
S('#btn-vermelha') . click(function() {
S('#cor ' ).css('color', ' #FFOOOO');
});
} );
</scri pt>
Para explicar passo a passo cada linha de um script, este é apresentado com
suas linhas numeradas e, a segu ir, os comentários são referenciados ao número
da linha comentada:
1.
2. S(' <h4 cl ass="l egenda"></h4> ' ). i nsertAfter(' 1egend ' );
3. var textolegenda = S('legend').remove().text();
4. $( ' .l egenda') . append(textolegenda) ;
5. S('fiel dset') .addClass( ' fieldset');
6. }) ;
Código comentado:
linha Descrição
Linha 2 lnsere logo após o elemento legend um elemento h4 com a classe
l egenda e vazio.
Linha 3 Armazena o cexro do elemenco legendem uma variável denominada
textolegenda e remove o elemenco do DOM.
Lin ha 4 Insere dentro do elemenm h4 criado anteriormente o texto da legen-
da.
Lin ha 5 Define a classe fieldset para o clernenco fie l dset, para fins de estili-
zação.
Códigos, marcações e sintaxe CSS contidos em textos são marcados com fonte
monoespaçada.
Arquivospara download
Os scri pts mostrados no livro estão dis poníveis para download e/ ou consu lta
o n-line no site do livro, em http://1w.w.livrojquery .com. br. Os documentos estão
separados em pastas por capítulos e fora m n o m eados com s intaxe própria , con-
forme o exemplo a seguir:
arquivo-2 . ld . html
Adicio nalm ente, ao fin al d o script, há uma indicação d o arquivo no qual foi
inserido conforme convenção mostr ad a no exemplo a seguir:
Destaques em geral
Palavras o u termos cujo significado deva ser destacado são grafados em itálico.
Por exemplo:
Variáveis
Por exemplo:
jQuery(expressão, [contexto])
Site do livro
O site de suporte a este livro está localizado em http ://vAYw. l ivrojquery. corn . br.
A p rimeira parte deste livro compreende os capítu los dela 7 e cem po r objetivo
apresentar a biblioteca, exa minar sua si ntaxe geral e escudar o emprego e fina-
lidade dos métodos, propriedades e diferences funcio nalid ades d isponíveis na
biblioteca JQuery.
23
'vlatenal com '111 1& autorais
Material com direitos autorais
CAPÍTULO 1
Oque é jQuery?
Neste capítu lo, será apresentada a biblioteca jQuery, relatando-se suas origens,
fin alidades e destinação. Será feito um breve relato histórico de sua evolução,
exam inando as motivações qu e resultaram em sua criação, e serão descritas
algumas de suas possibilidades, dando uma ideia do seu potencial e mostrando
a força e poder da programação j avaScripr com o uso da biblioteca jQuery.
25
26 jQuery • A Biblioteca do Programador JavaScript
1.1.1.1 Hist6rico
o dia 22 de agosto de 2005, John Resig, cuja foro é mostrada na figura 11,
um desenvolvedo r americano profundo conhecedor de JavaScripc, que atua na
Corporação Mozilla e é autor do livro Pro )avaScript Techniques, escreveu ern
seu blog um arcigo re latando sua frustração com a maneira verbosa de se escrever
JavaScript para obter os resultados pretendidos.
Nesse artigo, publ icou alguns exemplos no quais propunha o uso de seletores
CSS com o objetivo de simplificar e dar maior versatilidade ao cód igo. Escreveu,
então, que essa, ainda, não era a forma definitiva do que cinha em meme, mas
iria aperfeiçoar e restar suas propostas. O nome ainda não existia, mas nessa
ocasião foi lançada a ideia que traria como resulrado a biblioteca jQuery.
Em 2007, lançaram-se as versões 1.1, 1.1.l, 1.1.2, 1.1.3a, l.l.3, l.1 .3.l, 1.l.4,
1.2e1.2.1. No dia 11 de março ocorreu o primeiro encontro jQuery.
Em 2008, acé a data em que escrevi este livro, foram lançadas as versões 1.2.2,
1.23, 1.2.4, 1.2.5 e 1.2.6.
• prover interatividade;
• a lterar conteúdos;
Evidentemente, isso não significa q ue rodo código escrico com uso de jQuery
resulta em um d ocumento válido segundo os Padrões Web. A biblioteca fo i cria-
d a e escá de acordo com as diretrizes do W3C, m as cabe a você, desenvolvedor,
escrever seus scri prs em con formid ade.
Por não dispor de verba suficiente, Fu lano compra um carro, o modelo mais
simples da linha, e alguns meses d epois, ten do sobrado um a verba, resolve in-
vesti r no carro equipando-o com alguns acessórios, como insulfilm, som, alarme,
prorecor solar e algu ns outros irens, mudando o aspecco inicial do carro e faze n-
do-o parecer um modelo intermediário d a linha. Passado algum tempo e tendo
economizad o uma boa quantia, Fulano resolve melhorar o carro instalando
ca lotas de aço escovado, GPS, TV d igita l, frigobar, MP3 e oucros acessórios ma is
sofisticados, co nsegui ndo um visual de carro top d e linha.
O carro top de linha de Fulano continuará sendo um carro com todas as suas
funcionalidades, cumprindo rigorosamente todas para as quais foi projetado
quando saiu da fábrica, mesmo que dele seja m retirados todos os acessórios.
Com scripts em geral, e jQuery no nosso caso, acon tece a mesma situ ação. Seu
documenro estará em conformidade com os Padrões Web se continuar usável e
funciona l caso os scripts parem de funcionar. Um belíssimo menu de navegação,
com efeitos ulcrassofisricados, não valerá nada se não for acessível sem o script
que o faz funcionar. Pode tornar-se esteticamente horroroso, mas deve cumprir
sua fina lidade quando não sustentado pelo script.
Sempre que for o caso, os exemplos deste livro serão desenvolvidos de forma
li' não obstrutiva, contudo, como dito anteriormente, quando a obstrução depender
Por ser distribuída como software livre,j Queq1 tem o apoio e o envolvimento
de uma considerável comunid ade. Desenvolvedores do mundo rodo têm contri-
buído em larga escala com novas ideias, scripcs, plug-ins, extensões e toda sorte
de implementações, com a fina lidade de incrementar não só a biblioteca, mas
também as técnicas de desenvolvimento jQuer)\
<head>
Download jQuery
Tn.. "'~fW,ç! .,,....6tto~ ,,..Mi... 1~.,,-''1!> 1 l"'Sl'' J!)ni" u••,.. th• p 1~d •"""""'• lt vn.. ,...a-, t"-
:.Ul 4• n1o.n u u:.c trt ~recu:.tl~tl d e,,:.0-'ill'Hl'b. í ha ~l d-" '1 'l...ntt:n re1111lru ~trt.&tl
G'Í111Y.0$$:'.it IW\:l<A:it!f'« ~N to UTC'4-T"pr &i: tht <ca:!+
Current Relea$e
• t.l ~,.~\li tli•••»
~:f, Uii.J •,• fll~\H ~
Observe, na área de download em destaque na figura 1.2, que exis tem di-
ferences ripos de apresentação da biblioteca para download e um link para um
documento hospedado no próprio site, contendo um relatório das modificações
introduzidas na atual versão.
A apresen ração denominada "Uncom pressed" - jquery-1. 2. 6. js - destina-se ao
uso em tes tes, estudos e desenvolvimenro da biblioteca. Trata-se de um arquivo
no qual o ce.xto do script foi escrito com espaço entre cada linha de código, am-
plamente comentado, o que fac.ilita a leitura , análise e entendimento do códi.go
contido no arquivo. Esta é a apresentação recomendada para você baixar e fazer
uso nos estudos e acompanhamento dos experimentos desenvolvidos neste livro.
O tamanho desse arquivo é de 97,8KB.
Embora com ta m ano menor que o d a versão " M in ified" o tem po de carrega-
mento desta versão acaba sendo praticamente ig ual ao d aqu ela versão, pois há
que se computar o tempo de descompressão quando o usuário recebe a página.
Esta versão tem a d esvantagem em relação à anterior d e não ir p ara o cache,
tendo que ser carregada novamente toda vez que o usuário vo lta ao site. Outra
desvantagem que d esacon selha seu uso é o fa to de que o processo de descom-
pressão pode, evenrualmenre, ser imperfeito, introdu zindo bugs não existentes
n a versão sem compressão ou na compacta. A não ser que você tenha uma boa
justificativa para usá-la, não use-a .
Apartir daqui, para testar os exemplos do livro, supõe-se que você baixou e gravou
Para exemplificar, imagin e uma pág ina web na qual existe um botão que, ao
ser clicado, mud a a cor de um cabeçalho, de verde para vermelha.
<head>
<head>
~ [arquivo-1.1.6b.html]
<head>
function mudaCor() {
document.getElementByld( ' cor') .style.color = 'IFFOOOO ';
} j
</script>
</head>
<body>
<hl id,,"cor''>Cabeçalho muda de cor</hl>
<button type="button" id="btn-vermelha">Vermelha</ button>
.i) [arquivo-1.1.6c.html]
Agora, sim! A m arcação HTML está isenta d e cód igo JavaScript, pois se
incorporo u o script à seção head do d ocumen to. Resta agora colocar o
script em um arquivo externo separado e linkar para a(s) página(s). Essa
é um a boa soluçã o sob o ponto de vista da separação do comporta mento,
m arcação e estilização.
Caso você nada conheça de jQuery, não se intimide com o script a seguir.
Limite-se a observar com atenção cada linha do código que seu conheci-
mento de JavaScript lhe dará uma noção bem próxima de seu f unciona-
m ento. Com o prosseguimento da leirura, você entenderá a finalidade de
cada linha do script:
<head>
~ [arquivo-1.1 .6d.html]
Ao contrário das soluções tradicionais com javaScripr, como as mos-
tradas anteriormente, o uso da biblioteca jQuery não permite misturar
script com marcação HTML Não é previsto nem existe uma sincaxe para
jQuery in-line. Você é obrigado a inserir seu script incorporado na seção
head do documento ou escrevê-lo em um arquivo separado e linkar para
os documentos onde serão utilizados. Como regra geral, adote as m esmas
diretrizes que regem a vinculação de folhas de estilo, isto é, se seu script
serve a mais de uma página, adote a solução de linkar, senão, a solução de
incorporar na seção head do d ocu mento..Mas lembre-se que mesmo para
uso em uma só página, em scripcs que demandem tempo de carregamento
n ão desprezível, a solução de linkar é melhor, pois neste caso o script vai
para o cach e da máquina do usuário.
Os quatro exemplos aqui apresentados tiveram por objetivo único mostrar na
prática um efeito bem simples criado de três maneiras diferentes com JavaScript
e à maneira jQu ery. Ainda que seus con hecimentos básicos de j avaScripc sejam
limitados, não se intimide, simplesmen te consulte com acenção os cód igos e vá em
frence. M.as can to você quanto aqueles fa mi liarizados com j avaScript não d eixem
de abrir cada um a d as páginas contendo os scripts, conscara r seu fun cionamento
e o lhar no código-fo nte da p~íg in a . Os arqu ivos das páginas estão no sire do livro,
d ispo níveis para consulta o n-line e ta mbém para download.
~ Toda pãgina na qual se pretende fazer funcionar um script jQuery deverá estar
Na p rácica, isso sign ifica que se você inserir na marcação de uma página um
scripr que se refira a u m elemento hl, por exemplo, em local aci ma d aquele no
qual foi escrito o elemenro hl , seu scripc não irá fu nciona r, porque será car regad o
na página a ntes d o carregamen to do elemento hl.
<head>
</script>
</head>
<body>
<hl id="cor">Cabeçal ho muda de cor</hl>
<button type="button" id="btn-vermelha">Vermelha</button>
<head>
~ [arquivo-1.1.6. la.html)
Observe que o que se fez foi retirar do script a declaração que diz:
windovi.onload = function() {
... faça i sso ...
}
Agora, com a retirada que se fez, o script ( ... faça isso ... ) não esperará a página
ser carregada e, consequentemente, não funcionará e o botão não trocará a cor do
cabeçalho, conforme se pode constatar no arquivo existente no site do livro. Isso
ocorre pela razão explicada anteriormente: o scripc foi escrito ames dos elementos
hl e button com seus ids cor e btn-vermelha constantes do script, ou seja, quando o
script é carregado, ainda não existem os ids de que precisa para funcionar.
<head>
~ [arquivo-1.1.6.1 b.html]
Conclusão
Tal como vimos para javaScript, jQuery, que se baseia nessa linguagem, tam-
bém precisa que seus scripts conheçam a árvore do documento para poder
funcionar.
Essa notação é conhecida como sintaxe formal para escrita do método ready(),
que significa o segu inte: "quando o documento estiver pronto, faça isso''. Faça isso
é o script a executar.
Você pode omitir o parâmetro document passado para a função jQuery cons-
trutora SO e escrever com a segu inte sincaxe:
$().ready(function() {
... faça isso ...
}) ;
• O script está pronto para funcionar tão logo a árvore do documento tenha
sido carregada. Não é necessário que todos os componentes da página, tais
como imagens, folhas de estilo, animações e mídias em geral, tenham sido
carregados. Basca que a estrutu ra de marcação da página esteja disponível
e o scripc já poderá funcionar.
• Não há variações funcionais para o método e pelo fato de jQuery não ad-
mitir mistura de script com marcação, utiliza-se a sintaxe mostrada para
servir de container aos scripts.
[ e Nos códigos desenvolvidos neste livro, será adotada a sintaxe formal, pois se
considera que, apesar de ser mais extensa, oferece melhor legibilidade, sendo
em consequência mais fácil de ser visualizada. Em seus desenvolvimentos
reais, sinta-se à vontade para usar a sintaxe abreviada que, certamente, reduz
o trabalho de digitação.
1.1.7.1 ConstrutorjQuery
Outras bibliotecas JavaScript também usam a função S() . Isso pode ca usar
conflitos e mau funci onamento descripts quando se usa mais de uma biblioteca
no mesmo documemo. Nesses casos, ex istem métodos para evitar conflitos e u m
deles é usar a sin taxe alternativa mostrada a seguir. O utros métodos para evitar
conflitos serão apresentados p osteriormente.
jQuery()
m
e.-. Nos códigos desenvolvidos neste livro, será adotada a sintaxe: S() .
r:mmJ
Bem símplcs, não é m esmo? Você escá inscruíndo seu construtor a enconrrar
todos os elementos hl, p, span e table resp ectivamente.
jQuery, ao contrário de JavaScript, não requer loops para construir arrays quando
busca elementos no documento. O oonstrutor $() armazena automaticamente
em um objeto array tudo que encontra.
Por exemplo: quero encontrar o terceíro parágrafo do d ocu mento. Bem, neste
caso, urna solução seria marcar o terceiro parágrafo com o atribuco id para íden-
tificar sua ocorrência:
<P id="xpto">Texto do terceiro parágrafo</ p>
Você conhece CSS? Ainda não? É essencial começar a aprender hoje mesmo,
sob pena d e ficar ultrapassado nas técnicas d e d esenvolvimento web. jQuery
n ão é exceção à regra e faz a mplo emprego de seletores CSS. Com o se d isse
anteriormente, ad ota os poderosos seletores CSS 3 para localizar elementos no
documento. E não se preocupe, pois o uso de seleto res CSS em jQucry em nada
se relaciona com suporte pelos navegadores. Use e abuse d esses seletores que seus
scripts funcionarão em qualquer navegador.
Aqui o co nstrutor está usa ndo um seletor CSS 3 que cem com o alvo o ter-
ceiro parágrafo d escendente do elemento body. Trata-se d e uma busca simp les,
sem necessidade de atribuir um identificador ao terceiro parágrafo como se fez
anteriormente.
A verd ad e é que jQuery usa ampla mente seletores CSS e, assim sendo, é
pré-requisíto para bem desenvolver jQuery o conh ecim ento profundo desses
seletores. No apêndice A, você encontra um guia de consulta aos seletores que
irá ajudá-lo a aco mpanhar os exemplos deste livro.
N ão se preocupe se o cód igo parecer con fuso o u in inteligível, pois logo você
estará en tendendo-o. O código d iz o seguinte:
"Construtor, enconcre rodos os elemen tos parágrafos que sejam fil hos
dos elementos di v, neles aplique um cfeico de esmaecimento (fadeOu t) e
ad icione a classe xpto''.
Servir com o inspetor e selecio nad or de compo nen tes d o DO M, con forme visto
an terio rmente, n ão é a única atribuição d a função S() . jQ uery prevê u m conjunto
d e funções cha mad as utilitárias que usa o sinal Scomo um identificador cal qual
qualquer o utro identificado r previsto em JavaScript. A sintaxe para as funções
ucili tárias é mostrad a n o exemplo a segu ir:
$. browser ;
e
jQuery()
Funções-padrão e
seletores jQuery
Para adicionar estilos em uma seleção jQuer)~ pode-se usar duas sintaxes
que serão estudadas com detalhes em [C4 54.l], contudo veja a apresentação
da sintaxe mais simples que será usada neste capítu lo com o fim proposto no
parágrafo anterior.
45
46 jQuery • A Biblioteca do Programador JavaScript
$(expressão, [contexto])
Esra é a principal função jQuery mencionada no capítulo 1, a qual aceita dois
argumentos. Veja-os a seguir.
Argumento Oescriçáo
expressão Um selecor CSS ou um dos selewres específicos da biblioceca.
contexto O concexto em que será feita a procura do seletor. Omitindo esse
argumenco, o valor-padrão de procura são os elementos do DOM
no documenco atual. Você pode limitar a procura ao contexto de
um elemenco o u conjunto de elementos do DOM ou mesmo a um
o bjeto jQuer y.
Exemplo:
<head>
<style type="textl css" medi a""all ">
div {width:200px; height:lOOpx; border: l px solid #000; margin:20px;}
<lstyle>
<scri pt type="text/ javasc ri pt" src=" .. l j query-1. 2. 6. js"></ sc ri pt>
<script type="textljavasc ri pt">
S(document) .ready(function() {
S('#diferente').css('background' , ' red'); li semuso do parâmetro contexto
S('p' , S(' #container')) .css( ' color', ' green' ); li com uso do parâmetro contexto
});
<lscript>
<lhead>
<bOdY>
<di v></di v>
<div id="diferente"></div>
<diV></diV>
<div id="container">
<p>Parágrafo dentro do di v#container<IP>
</diV>
<p>Parágrafo fora do di v#container<IP>
~ [arquivo-2.1a.html]
Nesse scripc, verifica-se o uso do co nstrutor SO sem o parâmetro contexto,
quando se dá a busca pelo elemento cujo id é diferente, busca esta em rodo o
documento, para estilizar seu fund o na cor vermelha. Na outra situação, cons-
tata-se o uso do parâmetro contexto igual a S('#container') , quando se dá a busca
pelos paragráfos dentro do div#contai ner, para estilizá-los na cor verde. Se omiásse
o parâmetro contexto nesse segundo caso, rodos os parágrafos no documento
seriam estilizados na cor verde.
$(hrmn
Exemplo:
<head>
<scri pt type="text/ javasc ri pt" src=" .. / j query-1. 2. 6. js"></scri pt>
<script type="text/ javascript">
S(document) .ready(function() {
S('<p>Eu sou um parágrafo criado com jQue ry.</p> ') .prependTo( 'body' );
});
</scri pt>
</head>
<body>
</ body>
</ html>
.iJ [arquivo-2.lb.html]
Este script cria a marcação para um parágrafo e seu respectivo texto e usando o
método prependTo(), que será apresentado adiante, escreve a marcação no elemento
body. Se você visualizar o cód igo-fome d a pági na, a marcação do parágrafo não
estará lá e é isso que um leitor d e tela encontra, ou seja , absolutamente nada.
$(elementos)
Esta função desti na-se a procurar elementos HTML no DOlvl. Aceita também
documentos XML e objetos window, ainda q ue não sejam compo nentes d o D OM,
como argumentos.
Exemplo:
<head>
<scri pt type="text/ javasc ri pt" src=" . ./j query-1. 2. 6. js"></scri pt>
<script type="text/javascript">
S(document) .ready(functi on() {
S('div, p') .css( 'background' , 'green');
});
</scri pt>
</head>
<body>
<div>DIV</div>
<p>Parágrafo</p>
<div>DIV</div>
</body>
</htmh
.iJ [arquivo-2.1c.html)
S(callback)
Esca função descina-se a servi r de concainer para scripts jQu ery que devam ser
execucados somente após o carregamento do DOM. É uma funç ão idênàca ao
mérodo ready() escudado cm [C l 5 1.1.6.2]. Tecnicamente, pode-se dizer que se
trata de uma forma abreviada de escrever S(document) . ready() .
Observe, no exemplo a seguir, que se crara do mesmo exemplo mostrado no
item anterior, no qual se subscicuiu o mécodo ready() por esta função.
Exemplo:
<head>
<scri pt type="text/javasc ri pt" src=" . ./j query-1. 2. 6. js"></scri pt>
<script type="text/javasc ript">
$(function($) {
S( 'div, p').css('background' , ' green');
}) ;
</sc ript>
</head>
<body>
<div>DIV</div>
<p>Parágrafo</p>
<diV>DIV</div>
</body>
</htmh
.iJ [arquivo-2.1 d.html)
se/etorjQuery.each(callback)
Usamos o termo se letorjQverypara designar genericamente umobjeto ou array
de objetos retomado por um simples seletor jQuery ou por um encadeamento
jQuery.
Este método destina-se a executar tuna função roda vez que encontra um elemento
constante do conjunto procurado. Por exemplo: você deseja percorrer o DOM e
mud ar a cor de fundo de rodos os divs do documento. Observe, a seguir, que se
criou um botão para disparar o evenro e percorreu-se o DOM usando o método
each() para executar a mudança de cor de fundo.
Exemplo:
.iJ [arquivo-2.1e.html)
O scripr começa procurando o botão e a este atribui a tarefa de disparar a
execução de uma função ao ser clicado. Tal função procura cada um dos divs
no documento e estiliza-os com fundo na cor vermelha. Você deve estar se per-
guntando: por que complica r se basta decla rar S(' div') .css('background' , 'red')?
Certo, essa simples declaração teria o mesmo efeito, contudo note que ex isce um
parâmetro i na função defi nida em each() . Esse parâmetro retorna um contador
dos elementos encontrados. Essa fu nção fu nciona como um loopfor do JavaScript.
No arquivo de exemplo, acrescentou-se um alert(i) para você acompanhar o
funcionamento da função.
se/etorjQuery.length
Exemplo:
.iJ [arquivo-2.1f.html]
seletorjQuery.eq(posição)
Exemplo:
<hody>
<Uh
<l i>Item 1</ l i>
<l i>Item 2</l i>
<li >ltem 3</l i>
<l i>Item 4</ l i>
<l i>Item 5</l i>
</uh
.iJ [arquivo-2.lg.html]
seletorjQuery.get()
Esra fun ção desrina-se a acessar elernenros do DOM sem emprego das funcio-
nalidades jQuery. Pode ser usada para manipu lar direramence o DOM e foi
criada para resolver problemas de retro-compatibilidade. Retorna um array de
elementos.
Exemplo:
S('button' ) .click(function()
conteudoParagrafos(S('p ' ).get(). reverse ());
}) ;
<hody>
<button type="button">Rodar script</button>
<button type="button" class="reset"> Reset</button>
<p>Parágrafo um.</ p>
<p>Parágrafo dois.</p>
<P>Parágrafo t rês.</P>
<diV></di V>
.iJ [arquivo-2.1h.html]
seletorjQuery.get(índice)
seletorjOuery.index(olvo}
Esta função retorna o índice do elemento defin ido no parâmetro a1vo. A contagem
começa em O (zero) e, caso não exista um índice para o alvo, a função retorna o
valor -1. No exemplo a seguir, o script percorre e encontra todos os parágrafos
do documento e recolhe seus índ ices. A demonstração, no exemplo, se faz com
um clique em cada um dos parágrafos.
Exemplo :
<body>
<button type="button" class.."reset">Reset<lbutton><br I>
<b>Clique em cada um dos parágrafos abai xo <br />
para revelar seu i ndice<lb>
<p>Parágrafo um.</p>
<P>Parágrafo dois.<IP>
<p>Parágrafo três.<IP>
<div></di V>
});
O primeiro e segundo exemplos não são uma boa escolha para um alias, pois
deve-se procurar simplicidade e redução de digitação. O último exemplo é bem
melhor e o mais si mples possível, pois se escolheu uma ]erra apenas para alias.
Veja a seguir a sintaxe para sua criação:
});
li Segue scri pt para outra biblioteca usando alias S()
S('#nome-i d').show();
$( .. . ;
<lscri pt>
}) (jQuery);
)};
li Segue scri pt para outra biblioteca usando alias$()
$('#nome-i d').show();
$( ... ;
<Is cri pt>
<body>
<div id="topo">
<hl>empresa<l hl>
<Ul id="nav">
<li><a href="#">l i nk l<la><ll i>
<li><a href="#">Link 2<1a><lli>
<li><a href="#">Link 3<1a><lli>
<lul>
<ldiv>
body
div dlv
hr h2 p h2 blockquote
em p
li
a a a
$(id)
Exemplo:
~ [arquivo-2.2.la.html)
$(classe)
Seleror de classe: acessa os elementos cL1jo valor do atriburo class tenha sido
especificado no argllmenco.
Exemplo:
~ [arquivo-2.2.lb.html]
$(elemento)
Exemplo:
.iJ [arquivo-2.2.1c.html)
N esse exemplo, utilizai-aro-se um botão pa ra disparar o evento e o seletor d e
elemento S(' div') para acessar codos os divs existentes no documento, os quais
será a nexado o cornporra rnento definido no scr ipt (mud a r a cor d e fundo para
vermelha).
Exemplo:
<Uh
<li>Item l</li>
<li>Item 2</li>
<li>Item 3</l i>
</uh
Sinal de maior ">" div > p ou div>p Espaçamento facultativo entre seletores 1
$(ancestral descendente)
Acessa o elemento descendente do ancestral especificado no argumento.
Exemplo:
S(document).ready(function() {
S('button') .click(funct ion() {
S(' div span') .css('background' , ' red') ;
}) ;
}) ;
</script>
</head>
<body>
<but ton type=" button">Vermel ha</button>
<div>
<P>Parágrafo filho do div com <span>texto</span> marcado com span</P>
</div>
<p>Parágrafo filho de body com <span>texto</span> marcado com span </p>
~ [arquivo-2.2.2a.html]
$(pai> filho)
Exemplo:
<div>
<p>Parágrafo filho do div com <span>texto</span> marcado com span</p>
</diV>
<p>Parágrafo fi l ho de body com <span>texto</span> marcado com span </P>
.iJ [arquivo-2.2.2b.html)
Utilizaram-se um botão para d isparar o even to e o selcror-pai-filho para acessar
os elementos span filho do div (nesse exemplo, há duas ocorrências do elemento
span) aos quais será anexado o comportamento defi nido no script (mudar a cor
de fun d o para vermelh a). Observe que a marcação usad a nesse exemplo é a
mesma do exemplo anterior, no entanto como não há elemento span filho do div
- são filhos dos parágrafos - , nada acontece quando se clica o botão. Caso rivesse
usado o seletor S(' p > span ' ), os dois e lementos span seriam alvo do seletor. Faça
uma cópia do arquivo e altere o seletor como sugerido.
$(anterior+ próximo)
Acessa o elemento próximo q ue se segue imediatamente ao elemento anterior.
Exemplo :
.iJ [arquivo-2.2.2c.html)
'vlatenal com d1re1to& autorais
Capitulo 2 • Funções-padrão e seletores jQuery 63
$(anterior~ irmãos)
Este é um seleror previsto nas CSS 3 que acessa codos os elementos irmãos e que
se seguem ao elemento anterior.
Exemplo:
<button type="button">Vermelha</button>
<P>Parágrafo antes do cabeçalho h2</p>
<h2>Cabeçalho h2</h2>
<p>Primeiro parágrafo após o cabeçalho h2</p>
<p>Segundo parágrafo após o cabeçalho h2</p>
<div>DIV</div>
<p>Terceiro parágrafo após o cabeçal ho h2</p>
<dÍV>
<P>Parágrafo dentro de um di v</P>
</div>
.iJ [arquívo-2.2.2d.html)
Nesse exemplo, utilizaram-se um botão para disparar o evento e o seletor
anterior irmão para acessar todos os elementos p irmão que estão após o cabeçalho
h2 e aos quais será anexado o comportamento definido no script (mudar a cor
de fundo para vermelha).
Note o seguinte:
• O elemento div que se segue não é selecionado, pois o seletor é para pará-
grafos.
• O parágrafo que se segue ao div é selecionado, pois é filho de body, está após
h2 e, portanto, é irmão dos parágrafos anteriores.
• O parágrafo dentro do div que se segue não é selecionado, pois não sendo
filho de body (é filho de um div), não é irmão dos parágrafos anteriores.
se/etor.first
Acessa a primeira ocorrência do conjunto de elementos selecio nados por
seletor.
Exemplo:
.ij [arquivo-2.2.3a.html)
seletor.last
Acessa a última ocorrência do conj unto de elementos selecionados por seletor.
Exemplo:
.ij [arquívo-2.2.Jb.html)
se/etor1:not(seletor2)
Este é um seletor previsto nas CSS 3 que acessa o conj unto de selerores se1etorl,
exclu indo as instâncias d efinidas em se1etor2.
Exemplo:
~ [arquivo-2.2.3c..html]
Nesse exemplo, utili zaram -se um botão para disparar o evento, o seletor l i para
acessar rodos os elementos irens de lista e o seletor :not para exclu ir o primeiro
item da lista ao qua l será an exado o comporcamenco definido no scripc (mudar
a cor de fundo para vermelha). Todos os itens da !isca serão selecio nados, menos
o primeiro (not(li :first)).
se/etor:even
Esre é um seletor não previsto nas CSS e exclusivo da biblioteca, que acessa as
ocorrências de ordem par do conjunto de elementos selecionados por seletor.
Exemplo:
.iJ [arquivo-2.2.3d.html)
Nesse exemplo, utilizaram-se um botão para disparar o evento e o seletor tr:
even pa ra acessar todas as linhas pares da tabela às quais será anexado o comporta-
mento definido no script (mudar a cor de fundo para vermelha). Lembre-se ele que,
na linguagem javaScript, roda contagem começa em O (zero) e, em consequência,
as ocorrências pares são a primeira (índice O, que é contado como seleção par), a
terceira (índice 2), a quinta (índice 4), e assim por diante.
se/etor.odd
Este é um seleror não previsto nas CSS e exclusivo da biblioteca, que acessa as
ocorrências de ordem ímpar do conjunto de elementos selecionados por se1etor.
Exemplo:
.iJ [arquivo-2.2.3e.html]
Nesse exemplo, utilizara m-se um botão para disparar o evento e o seletor tr:
odd para acessar todas as li nhas ímpares da tabela às quais será anexado o com-
ponamemo definido no script (mudar a cor de fundo para vermelha). Lembre-
se de que, na linguagem javaScript, toda contagem começa em O (zero) e, em
consequência, as ocorrênc ias ímpares são a segunda (índice 1), a quarta (índice
3), a sexta (ú1d ice 5), e assim por diante.
se/etor:eq(fndice)
Este é um seletor não previsto nas CSS e exclusivo da bib lioteca, que acessa a
ocorrência de ordem índice no conjunto de elementos selecionados por selet or.
Exemplo:
.i) [arquivo-2.2.3f.html]
Nesse exemplo, uri lizaram-se um botão para disparar o evento e o seletor td:
eq(4) para acessar a célula da tabela que ocupa a quarta posição no conjunto das
células selecionadas à qua l será anexado o comportamento definido no script
(mudar a cor de fundo para vermelha). Lembre-se de que, na linguagemjavaScript,
toda contagem começa em O (zero) e, em consequência, a quarta ocorrência
corresponde à quinta célula.
se/etor:gt(índice)
Esre é um seletor não prevista nas CSS e exclusivo da biblioteca, que acessa rod as
as ocorrências do conjunta de elementos selecionados por se1etor cujo índice é
maior que o índice definido no parâmetro indice.
Exemplo:
<button type="button''>Verme1ha</button>
<table border="l">
<tr>
<td>td 0</td>
<td>td l</td>
</tr>
<tr>
<td>td 2</td>
<td>td 3</td>
</tr>
<tr>
<td>td 4</td>
<td>td 5</td>
</tr>
<tr>
<td>td 6</ t d>
<td>td 7</ td>
</tr>
</table>
.iJ [arquivo-2.2.3g.html)
Nesse exemplo, utilizaram-se um botão para disparar o evento e o seletor td:
gt(4) para acessar as células cujo índice é maio r que quatro no conjunto das células
selecionadas, às quais será anexad o o comporta mento defin ido no scripc (mudar
seletor.lt(índice)
Este é um seletor não previsto nas CSS e exclusivo da biblioteca, que acessa rodas
as oco rrências do co njunto de elementos selecionados por seletor cujo índice é
menor que o índice defin ido no parâmetro indice.
Exemplo:
<scri pt type="text/ javasc ri pt" src=" . ./j query-1. 2. 6. js"></ scri pt>
<script type="text/javasc ri pt">
S(document) . ready(function() {
S('#btn-vermelha').click(function() {
S(' td:lt(4)') .css('background' , 'red');
}) ;
} );
</scri pt>
</head>
<bOdY>
<button type=" button">Vermel ha</button>
<tabl e border="l">
<tr>
<td> td 0</td>
<td>td 1</td>
</tr>
<tr>
<td>td 2</td>
<td>td 3</td>
</tr>
<tr>
<td>td 4</td>
<td>td 5</td>
</tr>
<tr>
<td>td 6</td>
<td>td 7</td>
</ tr>
</table>
~ [arquivo-2.2.3h.html]
$(:header)
Este é um seletor não previsto nas CSS e exclusivo da biblioteca, que acessa todas
as ocorrê ncias de cabeçalhos de qualquer nível, ou seja, rodos os elementos hl
até h6 .
Exemplo:
.iJ [arquivo-2.2.3i.html)
Nesse exemplo, utilizara m-se um botão para disparar o evento e usamos o
selewr :header para acessar todos os cabeçalhos, aos quais será anexado o com-
portamento definido no script (mudar a cor de fundo para vermelha).
se/etor.animated
Esre é um seletor não previsto nas CSS e exclusivo da biblioteca, que acessa as
ocorrências do elemenro seletor para as quais se tenha definido um script de
animação. Esse seletor será visto com mais detalhes ao se abordarem as técnicas
jQuery de animação.
.i) [arquivo-2.2.4a.html]
se/etor.empty
Esre é um seletor previsto nas CSS 3 que acessa todas as ocorrências vazias de
seletor.
Exemplo:
~ [arquivo-2.2.4b.html)
Nesse exem plo, uti lizaram-se u m botão para disparar o evento e o seletor td:
empty para acessar todas as células da rabeia que estão vazias, às quais será anexado
o compor tamento definido no script (mudar a cor de fundo para vermelha).
se/etor1:has(seletor2)
Este é um seletor não prevista nas CSS e exclusivo da biblioteca, que acessa rodas
as ocorrências do elemento definido pelo se1etorl que contenham pelo menos
uma ocorrência do elemento definido pelo se1etorZ.
Exemplo:
.iJ [arquivo-2.2.4c.html]
Nesse exemplo, utilizaram-se um botão para disparar o evento e o seletor
p:has(strong) para acessar todas as ocorrências de parág rafos que contenham o
elemento strong, aos quais será anexado o comportamento definido no scripr
(mudar a cor de fundo para vermelha).
se/etor:parent
Este é um seletor não previsto nas CSS e exclusivo da biblioteca, que acessa todas
as ocorrências de elementos que seja m elementos-pai, o u seja, elementos que
tenham fi lhos, inclusive texto (texr-node) como filh o.
Exemplo :
.i) [arquivo-2.2.4d.html)
:hidden
Este é um seletor não previsto nas CSS e exclusivo da biblioteca, que acessa todas
as ocor rências de elementos que estejam ocultos no documento, inclu indo campos
de formu lário input do tipo hidden.
Exemplo:
.iJ [arquivo-2.2.Sa.html]
Nesse exemplo, utilizaram-se um botão para disparar o evento e o seletor :
hi dden duas vezes: a primeira para acessar o total de ocorrências de elementos
ocultos e a segunda para acessar a ocorrência de elementos input do tipo hidden.
Os números de ocorrências fora m passados a variáveis e escritos no d ocumento
para constatação do funcionamento do script.
Sintaxe Descrição
S(' : hi dden') Acessa todos os elementos oculros no documento, incluindo
os clememos constantes da seção head, cais como ti tle, style,
scri pts, meta etc.
:visible
Este é um seleror não previsto nas CSS e exclusivo da biblioteca, que acessa rodas
as ocorrências de elementos visíveis (não ocu ltos) no docu mento.
Exemplo:
~ [arquivo-2.2.5b.html)
Nesse exemplo, utilizaram-se um botão para disparar o evento e usamos o
seletor :visibl e para acessar o cocal de ocorrências de elementos visíveis na seção
body do documenro. Os resultados foram passados a uma variável e escritos no
documento para constatação do funci o namento do scripc.
Note que elementos ocultos pelas declarações CSS display :none ou visibility:
hi dden não são acessados pelo seletor.
seletor[atributo]
Exemplo:
~ [arquivo-2.2.6a.html]
seletor[atributo = "valor"]
Acessa todas as ocorrências do elemento seletor para o qual se cenha declarado
O par atributo "' "valor".
Exemplo:
~ [arquivo-2.2.6b.html)
seletor[atributo != "valol']
Exemplo:
i) [arquivo-2.2.6c.html]
N ote que o seletor d e negação não procurou somente os elementos que pos-
suem o atributo negad o. Caso o elemento não possua o atributo, é considerado
alvo do seletor. Ao usar o seletor de negação, é mais seguro raciocinar com a
seleção complementar da seleção negada .
Exemplo:
~ [arquivo-2.2.6d.html)
Nesse exemplo, uàlizaram-se um botão para disparar o evento e o seleror p[ti tle
A= "out") para acessar os elementos parágrafo que contêm o valor do arriburo title
começando com a string "out" aos quais será anexado o comporcamenro defi nido
no script (mudar a cor de fundo para vermelha). O acesso será ao parágrafo com
o arributo title de valor igual a outro_titulo.
seletor[atributo $="valor'1
Acessa todas as ocorrências do elemento seletor para o qual o valor do acriburo
declarado em atributo termina com a string valor.
Exemplo:
S(document) .ready(function() {
S('button' ) .cl ick(function() {
S('p[titl e S= ''tulo'']'). css( ' background', 'red ') ;
}) ;
});
</ script>
</head>
<body>
<button type=" button">Vermel ha</button>
<h3>Cabeçalho nível 3</h3>
<P>Texto de um parágrafo <b>sem</b> atributo title e "meu_titulo".</P>
<P ti tle="meu_titul o">Texto de um parágrafo <b>corn</b> atributo
ti tle = "meu_titulo".</P>
<P lang="pt -br">Texto de um parágrafo com atributo lang. </p>
<P title="outro_titulo">Texto de umparágrafo com atributo
title = "outro_titulo".</ P>
.i) [arquivo-2.2.6e.html]
seletor[atributo *="valor'']
Exemplo:
.iJ [arquivo-2.2.6f.html]
Nesse exemplo, utilizaram-se um botão para disparar o evenro e o seletor
p[title ~= "_tit"] para acessar os elementos parágrafo que contêm no valor do
atributo title a string _tit aos quais será anexado o comportamento definido no
scripr (mudar a cor de fundo para vermelha).
Exemplo:
.iJ [arquivo-2.2.6g.html)
se/etor:first-child
Exemplo:
~ [arquivo-2.2.7a.html]
se/etor.last-child
Acessa o elemenro que é o último filho do elemento definido em se1etor.
Exemplo:
~ [arquivo-2.2.7b.html]
se/etor.only-child
Acessa o elemento que é o filho único do elemento definido em se1etor.
Exemplo:
~ [arquivo-2.2.7c.html]
Exemplo:
,iJ [arquivo-2.2.7d.html)
Nesse exemplo, utilizaram-se um botão para disparar o evento e o seletor ol
l i :nth-child(3) para acessar o elemenco l i , que é o tercei ro fil ho na lisca ordenada
ol , ao qual será anexado o comportamento definido no script (muda r a cor ele
fundo para vermelha).
:input
Acessa os elementos i nput, textarea, select e button em um formulário.
Exemplo :
<hody>
<button type="button">Bordas nos inputs</button>
<form action="">
<P><label>input de texto: <i nput type="text" /></label></p>
<P><label>input de senha: <i nput t ype="password" /></labeh</p>
<P><label>input oculto: <input type="hi dden" /></label></P>
<P><label>input checkbox: <i nput type="checkbox" /></labeh</p>
<P><labeh input radio: <input t ype="radio" / ></labeh</p>
<P><label>input imagem: <input type="image" src="ok .gif" /></label></p>
<P><label >Sel ect : <select>
<option>Opçào l</opti on>
<option selected="selected">Opção selecionada</opti on>
<Opt ion>Opçào 3</option>
<Opti on disabl ed="disabled">Opção desabi litada</option>
<opt ion>Opção 4</option>
<Option>Opçào 5</option>
</select></label ></P>
<P><label> Textarea: <textarea cols=" 25" rows="8"></textarea></l abe h</P>
<P><labehinput submit: <input type="submit" /></labeh</p>
<p>< labe hi nput reset: <i nput t ype=" r eset" /></l abe h</p>
<P><labeh input botao: <input type="button" /></labeh</p>
<P><1abeh el emento botao: <hut ton>Botão</button> </l abe l></P>
</form>
.iJ [arquivo-2.2.Sa.html]
Nesse exemplo, uà lizara m-se um botão para d isparar o evento e usamos o
sele tor :input para acessar os elemen tos input, textarea, select e but ton do fo rmulá-
rio aos quais será anexado o comportamento definido no script (ad icionar uma
borda na cor vermelha).
:text
Acessa os elementos i nput do tipo t ext e m um formulário.
Exemplo:
<hody>
<button type="button">Bordas nos inputs de texto</button>
<form action="">
<P><l abel>input de texto: <input type="text" / ></label></p>
<P><l abel>input de senha: <i nput t ype="password" /></labeh</p>
<P><label>input checkbox: <input type="checkbox" /></label></ P>
<P><l abel>input submit: <input type="submit" /></label></p>
<P><l abehinput reset: <input t ype="reset" / ></labeh</p>
<P><label>input botao: <input type="button" /></label></P>
</ form>
.iJ [arquivo-2.2.Sb.html)
N esse exemplo, utilizaram-se um botão para disparar o evento e o seletor :text
para acessar o elemento input d o tipo text no fo rmulário ao qual será anexado o
comportamento definido no script (adicionar uma borda na cor vermelha).
:password
Exemplo:
.iJ [arquivo-2.2.Sc.html)
'vlatenal com d1re1to& autorais
Capitulo 2 • Funções-padrão e seletores jQuery 91
:radio
Acessa os elementos input do tipo radio em um formulário.
Exemplo:
.iJ [arquívo-2.2.Sd.html)
Nesse exemplo, utili zaram-se um botão para disparar o evento e o seletor : radio
para acessar o elemento input do tipo radio no formulár io ao qual será anexado o
comportamento definido no script (adicionar uma borda na cor vermelha).
:checkbox
Acessa os elementos i nput do tipo checkbox em um formulário.
Exemplo:
.iJ [arquivo-2.2.8e.html]
Nesse exemplo, utilizaram-se um botão para disparar o evento e o seletor
pai do checkbox existente no formu lário ao q ual será anexado o comportamento
definido no script {adicionar uma borda na cor vermelha).
:submit
Acessa os elementos input do tipo submi t em um formulário.
Exemplo :
</head>
<body>
<button type="button">Bordas nos inputs submit</button>
<form acti on='"'>
<P><l abel>input de texto: <input type="text" /></label></p>
<P><label>input de senha: <Ínput type="password" /></label></P>
<P><l abel>input checkbox: <Ínput type="checkbox" /></labeh</p>
<P><l abehinput radio: <Ínput t ype="radio" / ></label></P>
<P><label>input reset: <i nput type="reset" /></label></p>
<P><labehinput submit: <input type="submit" /></label></P>
<P><l abel>input botao: <input type,,"button" /></label></P>
</form>
.i) [arquivo-2.2.8f.html]
:reset
Acessa os e lementos input do tipo reset e m um formulário.
Exemplo:
~ [arquivo-2.2.8g.html)
Nesse exemplo,
. utilizaram-se um botão para
. disparar o evento e o selecor : reset
para acessar o elemento i nput do tipo reset no formu lário ao qual será anexado o
componamento definido no scripc (adicionar uma borda na cor vermelha).
:image
Acessa os elementos input do tipo image em um formu lário.
Exemplo:
~ [arquivo-2.2.8h.html]
:button
Acessa os elementos i nput do tipo button e os elementos button em um formu lário.
Exemplo:
,iJ [arquivo-2.2.Si.html]
:file
Acessa os elementos i nput do ripo fi le em um fo rmulário.
Exemplo:
S('button') . click(function() {
S( ':file ' ).css('boder', '2p~ solid #ffOOOO');
});
});
</ script >
</ head>
<body>
<button type.. "button''>Bordas nos inputs fil e</ button>
<form action: "">
<P><labehi nput de texto: <input type="text" / ></ labeh</ P>
<P><l abehinput de senha: <input type="password" / ></ labeh</ P>
<P><l abehinput file : <input type="file" / ></l abeh</p>
<P><l abehi nput radio: <i nput t ype=" radio" / ></labeh</P>
<P><l abeh i nput reset: <input type.."reset" / ></ labeh</p>
<P><labehi nput submit: <input type,,"submit" / ></l abeh</ p>
<P><labehinput botao: <input type=" button" / ></labeh</p>
<P><l abel >elemento button: <button> Botão</ button></ label></ P>
</form>
.i) [arquivo-2.2.8j.html)
Nesse exemplo, uti lizaram-se um botão para disparar o evento e o seletor :fil e
para acessar o elemento input d o tipo fil e no formulário ao qual será anexado o
comportamento d efinid o no scripr (adicionar uma borda na cor vermelha).
:hidden
Acessa os elementos input do tipo hi dden em um formulá rio.
:enabled
Acessa os elemenros que estejam habilitados em um formu lário.
:disabled
Acessa os elementos que estão desabilirados em um formulário.
Exemplo:
.iJ [arquivo-2.2.9a.html]
'vlatenal com d1re1to& autorais
98 jQuery • A Biblioteca do Programador JavaScript
:checked
Exemplo:
.i) [arquivo-2.2.9b.html]
:selected
Acessa os valores que renham sido selecionados em controles de um formulário.
Exemplo:
~ [arquivo-2.2.9c.html)
Métodos de
manipulação do DOM
101
Vale a pena ter este livro como fonte de consulta
102 jQuery • A Biblioteca do Programador JavaScript
</scri pt>
</head>
<body>
<button type="button">Atributo</ button>
<hl title="l ogotipo">Cabeçal ho nivel 1 com atri buto title="logotipo"</ hl>
<P id•"um">Primei ro parágrafo com atributo i d,."um"</P>
<P cl ass="diferente">segundo parágrafo com atri buto class .. "diferente"</P>
<P cl ass="diferente">segundo parágrafo com atributo class="diferente"</P>
.iJ [arquivo-3.1a.html]
Nesse exemplo, utiliwu-se um botão para disparar o evento. Acompanhe a se-
guir o fu ncionamento de cada linha do código desenvolvido para esce exemplo.
Código comencado:
Linha(s) Descrição
Linhas 1e6 Conrainer obrigatório para todo script jQuery. Veja [Cl Sll.6.2].
Lin ha 2 Define uma fu nção a ser execurada quando o usuário clica o borão
exisrente na página.
Linha 3 Pega o valor do atriburo t itle do primeiro elemenro hl que aparece
na marcação e armazena na variável val orAtributo.
Linha 4 Seleciona o div#resultado que foi inicialmente escondida com a re-
gra CSS #resultado {display: none; } e a torna visível com o método
jQuerycss('display', 'block ' ). Em seguida, usando o método jQuery
text('O valor do atri buto t i t le é: ' + valorAtributo),escrevedentro
do div#resul t ado a frase apresentando o valor do atributo ace.<;sado,
que havia sido armazenado em valorAtri buto.
seletorjQuery.attr({atributo:valor})
.iJ [arquivo-3.1b.html]
Nesse exemplo, utilizou-se um botão para disparar o evento. Acompanhe a seguir
o funcionamento de cada linha do código desenvo lvido para esse exemplo.
Código comentado:
Linha(s) Descrição
Linhas 1 e 7 Conraincr obrigatório para todo script jQuer)i Veja [Cl $1.1.6.2].
Linha 2 Define uma fu nção a ser executada quando o usuário clica o botão
existente na página.
Linha 3 Seleciona o(s) elemento(s) img existente(s) na página (no exemplo, há
um elemento) e revela-o com uma declaração CSS. A seguir, insere
no elemento os atributos src que definem o cam inho para uma
imagem e o atriburo al t que descreve su mariamente a imagem.
seletorjQuery.attr(atributo, valor)
Exemplo:
.iJ [arquivo-3.1c.html]
N esse exemplo, utilizou-se um barão pa ra disparar o evento. O func iom1menro
deste script é idêntico ao anterior, mas aqui não se inseriu o atributo alt.
seletorjQuery. removeAttr(atributo)
Exemplo:
<hody>
<button type="button">Remover</button>
<div id="remover"></div>
.i:J [arquivo-3.1d.html]
Nesse exemplo, utilizo u-se um botão para disparar o evento. Observe que um
di v com id = "remover" é estilizado com CSS. A cor d e fundo verde (#OfO) foi d ecla-
rada em uma regra CSS para o div. Se remover o id do div, a regra CSS perderá o
efeito. O script faz exara mente isso, remove o ide o div perde o fundo verde.
Veja o funcio namento desse script clicando o botão "Remover" no arquivo
indicado, disponível no site do livro.
Exemplo:
.i:J [arquivo-3.2a.html]
Veja o funcionamento desse script clicando o botão '~d i cionar " no arquivo
indicado, disponível no site do livro.
seletorjOuery.hasClass(valor_ classe)
Exemplo:
.iJ [arquivo-3.2b.html]
Acessa o elemento definido em se7etorjQuery e remove a classe cujo nome foi de-
finido no parâmetro valor_classe se este estiver presente ou adiciona o valor caso
não esteja presente.
Exemplo:
.i) [arquivo-3.2c.html]
Nesse exemplo, utilizou-se um botão para disparar o evento. Aqui cada vez
que você clica o botão, a classe do elemento pé alterada e o script entra em ação.
lote que com a classe, o parágrafo recebe uma estilização definida nas regras
de esti lo.
Veja o fun cionamento desse script clicando segu idamente o botão "Mudar"
no arquivo indicado, dispo nível no sire do livro.
Exemplo:
.iJ [arquivo-3.3a.html]
Nesse exemplo, utilizou-se um botão para disparar o evento. Observe que se
usou o método jQuery html O para selecionar a marcação HTML do primeiro
parágrafo p que aparece na marcação. O resultado foi armazenado na variável
conteudoHtml e a seguir se escreveu o resultado em um elemento span que havia
sido oculto por regras CSS.
Note que o elemenro span é vazio. Tivemos q ue ocu ltá-lo com regra CSS por-
que ele foi estilizado com uma borda e um fundo, fazendo com que estas fossem
renderizadas, mesmo estando o elemento vazio.
se/etorjQuery.htm 1(valor)
Acessa o elemento definido em se1etorjQuery e nele insere o html (conteúdo e mar-
cação) definido no parâmetro valor.
Exemplo:
iJ [arquivo-3.3b.html)
Nesse exemplo, utilizou-se um botão para disparar o evento. Observe que se
usou o método jQuery htrnl (valor) para inserir um parágrafo p dentro de um div.
O parágrafo recebeu uma classe que havia sido estilizada por regras CSS.
seletorjQuery.text()
Acessa o conteúdo textual do elemento definido em seletorjQuery.
Exemplo:
.iJ [arquivo-3.4a.html]
Nesse exemplo, utilizou-se um botão para disparar o evento. Observe que
se usou o método jQuery t extO para inspecionar o conteúdo html do primeiro
parágrafo p que aparece na marcação. O resultado foi armazenado na variável
conteudoTextual e a seguir se escreveu o resultado em um elemento span que havia
sido ocu lco por regras CSS.
Veja o funcionamento desse script clica ndo o botão "Texto" no arqu ivo indi-
cado, disponível no site do livro.
se/etorjQuery.text(valor)
Acessa o elemento definido em seletorjQuery e nele insere o conteúdo definido no
parâmetro valor.
Exemplo:
</script>
</head>
<body>
<button type="button">Texto</button>
<diV></di V>
..ij [arquivo-3.4b.html]
Veja o funcionamento desse script clicando o botão "Texto" no arq uivo indi-
cado, disponível no site do livro.
<script type="text/javascript">
S(document) .ready(function() {
S('button' ) .click (function()
var valorValue = S('input' ) .val();
S( 'span').text(valorValue);
}) ;
});
</scri pt>
</head>
<body>
<button type="button">Va l or</button><br />
<i nput type="text" val ue="Entre U'll texto qual quer" /><br />
<span> </span>
..ij [arquivo-3.Sa.html]
se/etorjQuery.vai(valor_atributo_ value)
Exemplo:
~ [arquivo-3.Sb.html]
Exemplo:
.iJ [arquivo-3.6a.html]
.iJ [arquivo-3.6b.html]
Como você poderá constatar no arquivo indicado, o script retira o link
de sua posição no documento e insere-o após o conteúdo existente no
parágrafo, ou seja, o conteúdo a inserir foi movido de sua posição para a
posição definida em append().
<script type="text/javascr"pt">
S(document).ready(function() {
'S('button').click(function() {
'S'('p') .append(S( 'a ')) ;
}) ;
});
</script>
</head>
<body>
<button type="button">Inseri r texto</button><br /><br />
<a href="#">Aqui um link</p>
<p>Texto dentro do elemento parágrafo. </p>
<P>Texto dentro do elemento parágrafo. </p>
<p>Texto dentro do elemento parágrafo. </P>
.iJ [arquivo-3.6c.html]
Como você poderá constatar no arquivo indicado, o script faz cópias do link
e insere-as após o conceúdo de cada um dos três parágrafos, ou seja, o conteú-
do a inserir permanece em sua posição inicial, sendo copiado para as posições
definidas em append().
Mover ecopiar
Como se mostrou nos dois arquivos anteriores, o método jQuery append O, quando
roma como parâmetro marcação previamente existente no documento, compona-
se de maneiras distintas. Se o alvo de append() é único no documento, a marcação
tomada como parâmetro é movida de seu lugar no documento para a posição
onde será inserida. Se o alvo de append() é múltiplo, são feiras cópias da marcação
para as inserções e a marcação orig inal permanece em seu lugar.
seletorjQuery.appendTo(alvo)
Exemplo:
.i) [arquivo-3.6d.html]
Tal como estudado para o método appendO, este método também admite inserção
de conteúdos já existentes na árvore do documento e as duas situações estudadas
para aquele método são válidas para este, ou seja, havendo um alvo, o elemento
é movido; havendo dois ou mais alvos, o conteúdo movido é cópia do original.
se/etorjQuery.prepend(conteúdo)
se/etorjQuery. prependTo(a/vo)
Estes dois métodos são eq uivalentes aos métodos appendO e appendTo(), com a
diferença de que a inserção do conteúdo se faz antes do conteúdo que receberá
a inserção.
seletorjQuery.after(conteúdo)
seletorjQuery.insertAfter(alvo)
Estes dois mérodos são equivalentes aos métodos appendO e appendTo(), com a
diferença de que a inserção do conteúdo se faz antes do elemento (e não do
conteúdo do elemento) que receberá a inserção. Veja o mesmo exemplo mos-
trado para append() - arquivo-3.Ga.html) - alterando o mérodo para after(), com a
fina lidade de caracterizar a diferença. Compare o arquivo desse exemplo com
o arquivo-3.Ga .html .
Exemplo:
..iJ [arquivo-3.6e.htm11
Conforme se pode constatar nos dois arquivos (arquivo-3. 6a.html e arquivo-3. 6e.
html), o método append() coloca a marcação do elemento span em linha com a do
parágrafo, ficando claro que foi inserida dentro do parágrafo, e o método afterO
causa renderização da marcação span embaixo, indicando que foi inserida fora
do parágrafo.
Para esses dois métodos, são válidos os critérios de mover e copiar, como
descritos para os métodos append() e appendTo().
se/etorjQuery.before(conteúdo)
se/etorjQuery.insertBefore(alvo)
Estes dois mécodos são equ ivalentes aos métodos anteriores, com a diferença d e
que o conteúdo é inserid o antes do alvo.
Para esses dois mérodos, são vá lidos os critérios de mover e copiar, como
descricos para os métodos append() e appendTo().
seletorjQuery.wra p(htmn
Cria o container definido no parâmetro htm1 para cada um dos elem entos d efi-
nidos em se1etorjQuery.
Exemplo:
.iJ [arquivo-3.6f.html]
Nesse exemplo, util izou-se um botão para disparar o evento. Observe que a
marcação passada pelo parâmetro do método é um div com class = "container"
que será inserida na marcação como um conrainer para cada um dos parágrafos.
Para faci li tar a visualização d o funcionamento do script, definiu-se uma regra
CSS para a classe .container. Veja o funcionamento desse script clicando o botão
"Definir container" no arqu ivo indicado, disponível no site do livro.
se/etorjQuery.wrap(elemento)
O parâmetro elemento é um concainer para os elementos definidos em se1etorjQuery,
mas em vez de ser escrito no método, é escrito com JavaScript.
O container definido deve ser um elemento vazio, isto é, não pode haver conteúdos
denlro dele.
Exemplo:
.i) [arquivo-3.6g.html]
seletorjQuery.wrapAll(hrmn
Cria o container definido no parâmetro htm1, para todos os elementos d efinidos
em se1etorjQuery. A diferença para wrap(html) é que naquele método o container é
para cada um dos elementos e neste, para todos.
Exemplo:
~ [arquivo-3.6h.html]
Nesse e,-xemplo, util izou-se um botão para disparar o evento. Observe que a
marcação passada pelo parâmetro do método é um div com class = "container"
que será inserido na marcação como um concainer para rodos os parágrafos.
Para facilitar a visualização do funcionamento do script, definiu-se uma regra
CSS para a classe .container. Veja o funcionamento desse scripc clicando o botão
"Defi nir concainer" no arqu ivo indicado, disponível no site do livro.
seletorjQuery.wrapAll(elemento)
Este método é semelhante ao método wrap(e ]emen t o), com a diferença de que o
container é para rodos os elementos-alvo.
seletorjQuery.wraplnner(hrmn
seletorjQuery.remove(filtro)
Exemplo:
</styl e>
<script type="text/javasc ri pt">
S(document) .ready(function() {
S('button').click(function() {
$('p') .re110ve( ' .remover ');
}) ;
});
</scri pt>
</head>
<bOdY>
<button type="button">Remover</button><br />
<P>Texto dentro do elemento parágrafo.</ P>
<P class="remover">Texto dentro do elemento parágrafo com classe remover.</P>
<p>Texto dentro do elemento parágrafo.</ P>
.iJ [arquivo-3.6i.html)
Nesse exemplo, utili zou-se um botão para disparar o evento. Observe que
o mérodo remove todos os parágrafos do documento cujo atributo classe tem
o valor remove r. O mérodo remove o elemento do DONL Veja o funcionamenro
desse script clicando o botão "Remover" no arquivo indicado, d ispo nível no s ite
do livro.
se/etorjQuery.empty()
Exemplo de sintaxe:
$(' p' ). empty();
seletorjQuery. replaceWith(conteúdo)
Exemplo:
.iJ [arquivo-3.6j.html]
Veja o f unciona1nenro desse script clicando o botão "Substituir" no arquivo
indicado, disponível no site do livro.
conteúdo.replaceAll(seletorjQuery)
Este método cumpre a mesma fina lidade do anterior com uma sintaxe reversa,
ou seja, substitui o seletor defin ido cm seletorjQuery pelo parâmetro conteúdo, que
pode ser marcação HTML ou elemento e conteúdos criados com JavaScript.
seletorjQuery.clone()
Exemplo:
.iJ [arquivo-3.6k.html)
Veja o funcionamento desse script clicando o botão "Clone" no arquivo
ind icado, disponível no site do livro.
seletorjQuery.clone(true)
li'• Nos títulos de cada item usamos o termo seletorjQuery, genericamente, para
indicar um seletor, um método de seleção ou a seleção resultante de um
encadeamento.
123
'vlaterral corn 1111<> os autorais
124 jQuery • A Biblioteca do Programador JavaScript
</ head>
<body>
<button type="button">CSS</button><br />
<div>DIV estilizado com CSS</diV>
<span></span>
.ij [arquivo-4.1a.html]
Propriedades CSS com nomes compostos de duas palavras cuja sintaxe CSS
adota separação com hífen, tais como background-col ore li ne-hei ght, devem
ser escritas em sintaxe jQuery com a notação conhecida como ·camelCase•, ou
seja, backgroundColor e li neHei ght seguindo a sintaxe fonnal JavaScript.
Nesse exemplo, utili zou-se um botão para di spa rar o evenro. Observe que se
acessou o va lor da propriedade CSS background-col or para o div e armazenou-se
esse valor em uma variável denominada corFundo. A seguir, escreveu-se o resultado
em um elemento span existenre na marcação. Veja o funcionamento desse script
clicando o botão "CSS" no arquivo indicado, disponível no site do livro.
seletorjQuery.css('propriedade: 'valor')
Exemplo:
~ [arquivo-4.1b.html]
Esti liza o elem ento se1etorjQuery com as declarações CSS definidas no parâmetro
propriedade: valor. A diferença para a anterior é que com esre mécodo se pode defin ir
duas ou mais declarações CSS.
Exemplo:
<script type.."text/ javasc ript" src=!' . ./ jquery-1.2 .6. js"></script>
<script type="text/javasc ript">
S(document).ready(function() {
S( ' button') .click(function()
S('div' ) .css({
width : '400px' ,
lineHeight:'60px' , li camelCase para lineHeight
background:'lffO',
border:'lpx dotted #000
});
}) ;
});
</script>
<lhead>
<bOdy>
<button type="button">Estilizar</ button><br />
<div>DIV esti lizado com regra CSS declarada por jQuery</diV>
~ [arquivo-4.1 c.html]
4.2 Posicionamento
seletorjQuery.offset()
Acessa o valor das coordenadas CSS top e left do elemento seletorjQuery e m relação
à viewport.
Exemplo:
.iJ [arquivo·4.2a.html]
Nesse exemplo, utilizou-se um botão para disparar o evento. Observe que se
acessaram os valores das coordenadas, os quais se armazenaram em uma variável
denominada coordenadasOiv. A segui r, escreveu-se o resu ltado em um elemento span
exiscence na marcação.
seletorjQuery.positionO
Acessa o va lor d as coordenadas CSS top e left do elemento seletorjQueryem relação
ao offset do elemento-pai.
Exemplo:
p {background:red;}
</Style>
<Scri pt type="text/javasc ri pt" src=" . ./j query-1. 2. 6. js"></sc ri pt>
<script type="text/javascript">
S(document).ready(function() {
S('button').click(function()
var coordenadasPara = $('p:eq(2)'). position() ;
S('span' ).html('As coordenadas do 3o. parágrafo são:<br /> left: ' +
coordenadasPara.left +' px<br /> top : '+ coordenadasPara .top +' px');
});
}) ;
</script>
</head>
<body>
<button type="button">Coordenadas</button><br />
<div>DIV para determinar as coordenadas</div>
<span></span>
~ [arquivo-4.2b.html]
se/etorjQuery.scrollTop()
Acessa o valor da coordenada top que mede a distância em pixel de uma rolagem
vertical.
Exemplo:
.iJ [arquivo-4.2c.html)
seletorjQuery.scrollleft()
Funciona de modo idêntico ao método scrollTop escudado anteriormente, reror-
nando a posição da barra de rolagem horizontal. O arquivo-4.2c.htm1 do exemplo
anterior demonstra o funcionamento deste método.
seletorjQuery.scrollTop(valor)
Este método, quando defi nido com o parâmetro valor, permite movimentar a barra
de rolagem vertical para a posição indicada em valor. O parâmetro é um número
inteiro e a unidade de medida de valor é o pixel. O arquivo- 4.2c.html do exemplo
anterior demonstra o funcionamento deste método, quando se execu ta a função
disparada pelo botão "Reset" que define o valo r para scrollTop igual a O (zero).
seletorjQuery.scrollleft(valor)
Esce mécodo, quando definido com o parâmetro va lor, permite movimentar a
barra de rolagem horizontal para a posição indicada em valor. O parâmetro é um
número inteiro e a unidade de medida de valor é o pixel. O arquivo-4.2c.html do
exemplo anterior demonstra o funcionamento deste método, quando se executa
a função disparada pelo botão "Reset" que define o valor para scrol lleft igu al a
O (zero).
Exemplo:
.iJ [arquivo-4.3a.html]
Nesse exemplo, utilizou-se um botão para disparar o evento. Observe que se
acessaram os valores das larguras do div e d o p, os quais se armazenaram em duas
variáveis denominadas larguraDiv e larguraPara respectivamente. A seguir, escreveu-se
o resultado usando o comado after() [C3 53.6] para inserção de conteúdos. Veja
o funcionamento desse script clicando o botão "Larguras" no arquivo indicado,
disponível no site do livro.
É certo afirmar que o SCtipt desenvolvido neste exemplo, assim como em muitos
dos exemplos puramente demonstrativos dos métodos jQuery, não é a melhor
solução prática. Contudo, cumpre a finalidade do script, ou seja, demonstrar o
funcionamento do método. Na segunda parte do livro, quando se estudarem scripts
de aplicação prática, serão desenvolvidas soluções otímizadas.
seletorjQuery.width(valor)
Exemplo:
iJ [arquivo-4.3b.html]
Nesse exemplo, utilizou-se um botão para disparar o evento. Observe que as
larguras do div e do p não foram definidas por regras CSS e assumem o valor-
padrão que é igual ao va lor d a largura do elemento-pai, nesse caso a largura da
janela. Definiram-se, com o método jQuery width(va7or), as larguras de 350px e
200px, respectivamente, para o div e o p. Veja o funcionamento desse script clicando
o botão "Larguras" no arquivo indicado, disponível no site do livro.
se/etorjQuery.height()
Exemplo:
.iJ [arquivo-4.3c.html]
Nesse exemplo, urilizou-se um botão para disparar o evento. Observe que se
acessaram os va lores das alturas do div e do p, os quais se armazenaram em duas
variáveis denominadas a1turaDivea1 turaPara rcspectivamen te. A seguir, escreveu-se
o resultado usando o comado after() [C3 53.6] para inserção de conteúdos. Veja
o funcionamento desse script clicando o botão '/\lturas" no arquivo indicado,
disponível no site do livro.
se/etorjQuery.heig ht(valor)
Exemplo:
~ [arquivo-4.3d.html]
seletorjQuery.outerWidth([boo/eano])
Acessa o valor da largura do elemento seletorjQuery computando os valores dos
paddings e das bordas horizontais e retorna o resultado em unidade pixel mesmo
que as definições de largura e/ou padding tenham sido definidas em regra CSS
com outra unidade. No exemplo a segu ir, a largura do elemento div foi definida
em 275px e o padding esquerdo e direito, 20px, totalizando um padding de 40px.
Exemplo:
,iJ [arquivo-4.3e.html]
seletorjQuery.outerHeight([booleano])
seletorjQuery.innerHeight()
Figura ilustrativa
ofntto~.J.••••••••
otfset left
LEGENOA:
conteúdo
seletorjQuery.filter(filtro)
Exemplo:
iJ [arquivo-4.4a.html]
Nesse exemplo, utilizou-se um botão para disparar o evento. Veja o funcio-
namento desse script clicando o botão "Filtrar" no arqu ivo indicado, disponível
no site do livro.
se/etorjQuery.filter(função)
seletorjQuery.is(expressão)
Exemplo:
.iJ [arquivo-4.4b.html]
Nesse exemplo, utiliza-se um botão para disparar o evento. Veja o funciona-
mento desse script clicando o botão "Resulcado" no arquivo indicado, disponível
no site do livro.
se/etorjQuery.not(expressão)
Exemplo :
.i) [arquivo-4.4c.html]
seletorjQuery.slice(infcio [fim])
Exemplo:
.ij [arquivo-4.4d.html]
Nesse exemplo, uti lizou-se um botão para disparar o evento. Veja o funciona-
mento desse scripr clicando o botão "Resultado" no arquivo indicado, disponível
no site do livro.
seletorjQuery.add(expressão)
Exemplo :
.iJ [arquivo-4.4e.html)
Nesse exemplo, utilizou-se um botão para disparar o evento. Veja o funciona-
mento desse script clicando o botão "Resulcado" no arquivo indicado, disponível
no sire do livro.
seletorjQuery.chi ld ren([expressão]}
Exemplo:
.iJ [arquivo-4.4f.html)
Nesse exemplo, utilizou-se um botão para disparar o evento. Veja o funciona -
mento desse script clicando o botão "Resultado" no arquivo indicado, disponível
no site do livro.
seletorjQuery.find( [expressão])
Exemplo:
.iJ [arquivo-4.4g.html)
Note que este método cumpre a mesma função do seletor composto S(p span).
Avantagem de seu uso está no fato de aceitar uma expressão como parâmetro
de busca, o que não é possível com seletores compostos.
seletorjQuery. pa rent([expressão])
Exemplo:
.iJ [arquivo-4.4h.html]
Nesse exemplo, urilizou-se um botão para disparar o evento. Veja o funciona -
mento desse script clicando o botão "Resultado" no arquivo indicado, disponível
no site do livro.
se/etorjQuery.pa rents([expressão])
Exemplo:
.iJ [arquivo-4.4i.html)
Nesse exemplo, utilizou-se um botão para disparar o evento. Veja o fu ncio na-
mento desse script cl icando o botão "Resultado" no arquivo ind icado, di sponível
no site do livro.
seletorjQuery. prev([expressão])
Exemplo:
~ [arquivo-4.4j.html)
seletorjQuery.next([expressão])
Selecio na o elemento adjacente imediatamente posterior ao seletorjQuery. Admire
o parâmetro expressão como filtro.
Este método fun ciona da mesma maneira que o anterior, selecionando ele-
mentos em orde m crescente.
Esse script está no arqu ivo indicado a seguir.
.iJ [arquivo-4.4k.html)
.iJ [arquivo-4.41.html)
seletorjQuery.nextAll([expressão] )
Seleciona rodos os elementos-irmão adjacentes de se1etorjQuery. Admire o parâ-
metro expressão como filtro.
Este método funciona da mesma maneira que prevAll O, selecionando rodos
os elementos-irmão adjacentes subsequentes.
Este script está no arquivo indicado a seguir.
.iJ [arquivo-4.4m.html]
Nesse exemplo, util izou-se um botão para disparar o evento. Veja o fun cio-
namento desse script clicando seguidamente o botão ''Próxi mo" no arquivo
ind icado, disponível no site do livro.
seletorjQuery 7.....seletorjQueryN.end().método_continua()
Este método perm ite interferi r e m um encadeamento de métodos jQueq~ rever-
tendo a seleção ao objeto anterior ao último objeto adjacente ao método end() na
cadeia . Na sintaxe mostrada, os efeitos contidos no método método_continua() serão
aplicados ao se1etorjQuery(N-1).
Os objetos jQuery aos quais se apl ica este método são add, andSelf, children ,
filter, fi nd, map, next, nextA11, not, parent, paren ts , prev, prevA11, si b1i ngs e s1ice e ram bém
à fu nção clone.
Exemplo:
.i) [arquivo-4.4n.html]
Exemplo:
S('button:eq(l)').click(function() {
S('di v, p') .css('border ', ' ' );
}) ;
});
</scri pt>
</head>
<body>
<button type="button">andSelf()</button>
<button type="button">Reset</button>
<dÍV>
<p>Este parágrafo está dentro do div</p>
</div>
.iJ [arquivo-4.4o.html]
Exemplo:
.iJ [arquivo-4.4p.html]
se/etorjQuery.map(função)
Exemplo:
~ [arquivo-4.4<1.html]
Eventos
Quando o usuário abre uma página web, clica um botão, pressiona uma tecla,
seleciona um campo etc., ocorre o evenco.JavaScripc possui mecanismos capazes
de detectar a ação do usuá rio e desencadear o script. O conhecimento da sintaxe
que captura um evento é fundamenta l para o desenvolvimento de scripts.
Quando o se1etorjQueryperde o foco, ocorre o evento blu r() e entra em ação o script
definido no parâmetro função. Esse evento é amplamente usado em campos de
formulário para disparar um scripc (por exemplo: um script para validar os dados
inseridos no campo) quando o usuário abandona o cam po.
Exemplo:
151
152 jQuery • A Biblioteca do Programador JavaScript
.iJ [arquivo-5.1a.html]
Os eventos jQuery seguem uma sintaxe ligeiramente diferente dos da linguagem
li'• JavaScript. Note que o evento jQuery b1ur tem seu correspondente JavaScript
comsintaxe onblur. Se você desenvolve JavaScript e algo der errado com seu
script que usa eventos, antes de mais nada verifique a grafia dos eventos .
se/etorjQuery.change(função)
O evento change() ocorre quando o valor em um campo de formulário perde
o foco em favo r de oun-o va lor. O uso clássico desse evento é em campos de
formulá rio do ripo select , no qual o evento ocorre quando o usuário seleciona
uma das opções.
Exemplo:
<option>Escol ha cinco</option>
<option>Escolha seis</option>
<Option>Escol ha sete</option>
</select>
<P class="mensagem"></p>
..ij [arquivo-5.1b.html]
seletorjQuery.click(função)
seletorjQuery.dbld ick(função)
O evento dblcll ick() ocorre quando o usuário clica duas vezes seguidas o ponteiro
de um dispositivo apontador (por exemplo: o ponteiro do mouse) sobre se1etor-
jQuery, disparando o script definido no parâmetro função.
Exemplo:
<hody>
<p>Umduplo clique no div e ocorre o evento dblcl ick.</ P>
<diV></diV>
<P class,,"mensagem"></P>
.i) [arquivo-5.1c.html)
seletorjQuery.error(função)
O evenro error() ocorre quando um erro é detectado, quer seja de programação
(por exemplo: sintaxe errada), quer seja com um elemento na árvore do docu-
mento. Um exemplo de erro com o elemento img ocorre quando o caminho para
a imagem definido no atributo src está errad o, é inválido ou quando não existe
a imagem. Nesses casos, o navegador internet Explorer renderiza um pequeno
ícone com aproximada mente 30 x 30px indicando quebra da imagem. Para
esconder o ícone, use o script mostrado a seguir.
S( ' img ').error(function () {
S(this) .hide();
}) ;
seletorjQuery.focus(função)
Quando o se1etorjQuery recebe o foco, ocorre o evento focus() e entra em ação o
script definido no parâmetro função. Esse evento é amplamente usado em campos de
formulário para disparar um script (por exemplo: um script mostrando um pop-up
com dicas para o preenchimento do campo) quando o usuário entra no campo.
Exemplo:
</head>
<body>
<P>Clique dentro do campo de texto abaixo.</ P>
<l abe l>CPF: <input type=" text" /></l abe h
<P class="mensagem"></p>
seletorjQuery. keydown(função)
Exemplo:
se/etorjQuery.keyup(função)
Ocorre o evento keyup() quando o usuário solta uma tecla qualquer d o redado
que renha sido pressionada.
seletorjQuery. keypress(função)
seletorjQuery.load(fUnção)
seletorjQuery. mousedown(função)
Exemplo:
<hody>
<h2>Faça acontecer mousedown aqui.</h2>
~ [arquivo-5. lf.html]
se/etorjQuery.mouseup(função)
Exemplo:
~ [arquivo-5.1g.html]
}) ;
});
</se ri pt>
</head>
<body>
<h2>Clique, segure e sol te.</h2>
Exemplo:
di v {vri dth: 90px; hei ght: 90px; background: green; border: 2px sol i d b1ack;}
</Style>
<scri pt type="text/javasc ri pt" src=" . ./j query-1. 2. 6. js"></sc ri pt>
<script type="text/javasc ri pt">
S(document) . ready(function() {
S('div').mouseover(function() {
S(this).css ( ' background ' , 'red');
}) ;
}) ;
</se ri pt>
</head>
<body>
<p>Passe o mouse sobre o div</P>
<div>DIV</div>
Exemplo:
.iJ [arquivo-5.lj.html]
O scri pt a segui r dem o nstra o emprego conjunto dos dois eventos a n teriores.
Observe que ao combinar os métodos mous eover() e mouseout(), obtém-se o clássico
efeito rollover, cão usado em menus de navegação.
~ [arquivo-5.1 k.html)
se/etorjQuery.mousemove(função)
Exemplo:
.iJ [arquivo-5.11.html)
seletorjQuery.resize(função)
Exemplo:
S(document).ready(function() {
S(window). resize(funct ion() {
S('body ' ) . text('Ops! Você redimensionou a janela do navegador.');
}) ;
});
</script>
</head>
<body>
<Span></span>
</body>
</html>
~ [arquivo-5.lm.html)
Para visualizar o funcionamenco do script, abra o arqu ivo correspondente em
seu navegador e redimensione a janela do navegador.
seletorjQuery.scroll(função)
O evenco scroll ()ocorre quando o usuário aciona uma das barras de rolagem do
seletorjQuery, d isparando o script definido no parâmetro função.
Exemplo:
~ [arquivo-5.1n.html]
se/etorjQuery.select(função)
Exemplo:
.iJ [arquivo-5.1o.htm11
seletorjQuery.submit(função)
O evento submi tO ocorre quando o usuário submete ou envia os dados co lhidos
ou contidos em seletorjQuery, disparando o script d efinido no parâmetro função.
Esse evento é amplamente empregado para verificação dos dados preenchidos
pelo usuário em u m formulá rio tão logo ele rente enviá-lo.
Exemplo:
<script type="text/javascript">
S(document) .ready(function() {
S('form') .submit(funct ion() {
if ($('input:first') .val() == '') {
S('div').text('Por favor ! Preencha o campo.') ;
return false ;
}
if ($('input:first').val() !== 'jQuery') {
S( 'div') .text('Lamento ! entrou a palavra errada. ');
return false;
} else {
S('div') .text('Parabéns! entrou a palavra certa.');
}
}) ;
}) ;
</scri pt>
</head>
<body>
<P>Entre a palavra jQuery no campo abaixo e clique o botão Enviar.<br />
Atenção: campo sensível ao tamanho de caixa~/p>
<form action="javascript:void()">
<label>Campo de texto</label><br />
<i nput type="text" />
<i nput type=" submi t" va l ue="Envi ar" />
</form>
<dÍV></dÍV>
.ij [arquivo-5.1p.html]
seletorjQuery.unload(função)
Ocorre o evento unoad() quando o usuário aband ona o seletorjQuery que tenha
sido carregado anteriormente e nesse momento entra em ação o script d efinido
n o parâmetro função. Esse evento é usado para o objeto 1vindow e ocorre quando o
u suário fecha uma página.
Exemplo:
</scri pt>
</head>
<body>
<p>Feche esta janela para constatar o evento unload em ação.</P>
</body>
O evento t oggle() permite executar duas, e opcionalmence mais, funções, segu idas
e alcernadamcnce mediante cliques sucessivos no bocão d e um dispositivo apon-
tador (por exemplo: o ponteiro do mouse) sobre o se1etorjQuery, fazendo entrar
em ação os scripts definidos nas funções fl e f2. Quando o usuário clica uma vez
no seletorjQuery, é executada a função fl, clicando outra vez, é executada a função
f2, mais uma vez, é executada a função fl e assim sucessiva e indefinidamente
alcernando a execução das funções.
Esse evento admite a opção de adicionar mais de dois scripts e nesse caso a
execução deles se faz ele f1 até fN, volta a fl e repete-se o ciclo indefinidamente.
Exemplo:
$(' img') .css(' di splay', 'block'). attr( {src: '1.gif ' });
})
});
</script>
</head>
<bOdY>
<p>Cl i que seguidamente aqui,<br />
para ver o evento toggle() em ação.</P>
<img alt="Bate coração" src=" l. gif" />
~ [arquivo-5.2a.html]
~ [arquivo-5.2b.html]
keyup e error.
Exemplo:
S('div').bind('dblclick', function() {
S(thi s) .css( ' background ' , 'red');
S('span:eq(2)' ) .text('Ocorreu o evento dblclick. Mudou a cor de fundo .' );
});
}) ;
</script>
</head>
<body>
<P>Eventos vinculados com bind():</p>
<uh
<li>mouseover - aumenta espessura das bordas.</ li>
<li>click - amazena e mostra as coordenadas do click. </ li>
<li>dblcl ick - troca cor de fundo.</ li>
</ Uh
<diV></diV>
<span></span>
<Span></span>
<span></span>
.i) [arquivo-5.3a.html]
Exemplo:
.i) [arquivo-5.3b.html]
se/etorjQuery.trigger(tipo [dados])
Exemplo:
.i) [arquivo-5.3c.html]
se/etorjOuery.unbind(tipo [dados])
event.type
Este método retorna uma su·ing que descreve a natureza do evento.
Exemplo:
S( 'a ' ).click(function(event) {
alert(event.type);
)};
Retorna:
"click"
event.target
Exemplo:
$(' a[href=http: //1'/11\1. mauj or. com] ') . cl ick(functi on (event) {
alert(event.target);
return fa1se;
});
Retorna:
"http: //1wm. maujor. com/"
event.pageX/Y
Exemplo:
S('div').click(function(event) {
alert('Você clicou na posição: x = ' + event .pageX + " px, y = " + event.pageY
+' px');
}) ;
Retorna:
"As coordenadas do click"
.iJ [arquivo-5.4a.html]
event.preventDefault()
Exemplo:
$('a(href=http://1'/l"v.maujor.com]').click(functi on(event) {
event.preventDefault();
}) ;
event.stopPropagation()
Esre método impede que o evento anexado a um elemento se propague para os
ancestrais do elemento. É conhecido na programação JavaScript como "efeito
bolha''. Por u-acar-se de um efeito que depende de situações particulares, apenas
se informará que existe a funcionalidade de se poder cancelar o efeito bolha
existente na biblioteca, ficando a critério do desenvolvedor usá-la quando estiver
diance de problemas causados por propagação indevida de eventos. A sintaxe
gera l é mostrada a seguir:
S('p ' ).click(function(event) {
event.stopPropagation();
//script vai aqui;
}) ;
Efeitos
Neste capítulo, serão tratados os métodos para obtenção de efeitos. São os efei-
tos um dos objetivos do emprego de jQuery. As tarefas de esconder e revelar
conteúdos e fazer funcionar um menu de uma forma visualmente agradável com
transições suaves e surpreendentes são uma funcionalidade da linguagem que
cercamente irá enriquecer a experiência do usuário. E, com um planejamenro
bem feiro, você conseguirá implementar efeitos sem bloquear o acesso ou pre-
judicar a usabilidade.
seletorjQuery.show()
O efeito s how() revela abruptamente o elemento se1etorjQuery que tenha sido es-
condido anterio rmente, quer co m uso de script, quer com regra CSS.
Exemplo de si ntaxe:
$( 'div') . show()
173
174 jQuery • A Biblioteca do Programador JavaScript
Para tirar o máximo proveito de seus estudos, após conhecer todos os efeitos
básicos descritos neste capítulo, consulte os arquivos desenvolvidos para
demonstrar cada um deles, dispon1veis para download no site do livro.
seletorjQuery.show(velocidade [função])
Exemplos de sintaxes :
$('div') .show('sl ow ' )
ou
$(' di v'). show(lOOO)
ou
$('div' ) .show('fast ' , functi on() {
li seu script aqui;
}) ;
seletorjQuery.hide()
O método hideO causa o efeito contrário ao criado pelo método show(), escondendo
abruptamente o elemento se1etorjQuery qu e tenha sido revelado.
Exemplo de sincaxe:
$(' div' ) .hide()
se/etorjQuery.hide(veloádade [função])
O m étodo hide( ve1ocidade [função]) ca usa o m esmo efeito criado p elo método
anterior, porém o u so do parâmetro velocidade p ermite esconder suavemente o
elemento se1etorjQuery.
O parâ metro função é opc ional e perm ite definir u ma funçã o cuja execução
será desencadeada tão logo o efeito termine.
Exemplos de sintaxes:
S('div') .hi de('sl ow ' )
ou
$( 'di v' ) .hi de(1000)
ou
S( 'div' ) .hi de('fast ' , function() {
li seu script aqui;
});
seletorjQuery.toggle()
Exemplo de sintaxe:
S('button' ) .cl ick(f unction() {
S('p ' ). toggle();
});
Cons ulte o arquivo referenciado a seguir, para ver todos os efeitos básicos
estudados anterio rnence em ação:
<styl e type="textl css" medi a="all">
div {width:200px; height:300px; margi n: 30px O;border :2px solid #OOO;color :#fff;
background:#fOO; display: none;}
<lstyl e>
seletorjQuery.slideDown(velocidade [função])
O parâmetro função é opcional e permite definir uma função cujo script entrará
em ação tão logo se letorjQuery seja revelado.
Exemplo d e sintaxe:
$( 'div'). slideDovm(' slow')
seletorjQuery.slideUp(velocidade [função])
Essa animação apresenta o que parece ser um bug, pelo menos até a versão
atual da biblioteca. Quando se aplica o efeito em um ele mento para o qual se
tenha definido um paddi ng vertical, o efeito esconder ignora o padding como sendo
integrante da altura total do elemento. Isso causa um salto ao final da animação,
pois ao ser recol hida uma amplitude igual à altura do elemento menos o valor
do paddi ng, esce desaparece bruscamente. Na página conscance do sice do livro, que
demonsa·a esse efeito, mostra-se o suposto bug.
Exemplo de sintaxe:
$('div').slideUp( 'slow')
Exemplo de sintaxe:
$( 'div').slideToggl e(1500)
Consul te o arquivo que contém o script mostrado a seguir para ver todos os
efeitos corrediços estudados anteriomenre em ação:
<style type="text/css" media="all ">
div {width:200px; height:300px; margi n:30px O; border:2px sol id #000;
color:#fff ; background:#fOO; di splay:none;}
.bug {height :140px; paddi ng:80px O;}
</style>
<scri pt type="text/javasc ri pt" src=" . . / j query-1. 2. 6. js"></sc ri pt>
<script type="text/ javasc ri pt">
S(document) .ready(function() {
S('button') .eq(O).click(function() {
$('div') .eq(O) .slide0own('slow');
}) ;
S('button' ) .eq(l).cli ck(function() {
S('div') .eq (O).sli deUp( 'slow' ) ;
}) ;
S('button' ) .eq(2).cl ick (function() {
$(' .bug' ). slideDown( 'slow');
}) ;
S( 'button' ) .eq(3).click(function() {
$( ' .bug ' ). slideUp('slow');
}) j
</scri pt>
</head>
<body>
<button type=" button">Efei to sl i deDown(' slow') </button>
<button type="button">Efeito sli deUp('sl ow ' )</button><br /><br />
<button type="button">BUG slideD0·1m(' slow')</button>
<button type="button">BUG slideUp(' slow' )</button><br /><br />
<button type="button">Efei to sl i deToggl e(1500) </ button>
<div>DIV em todo seu esplendor.</ div>
<div class="bug">DIV em t odo seu esplendor.<br />
Com declaração de padding</diV>
<div class="alterna">Demonstração do efei to sl i deToggl e(lSOO).<br />
Cl ique seguidamente no botão Efeito slideToggle() . </diV>
~ [arquivo-6.2a.html]
seletorjOuery.fadeOut(velocidade [função])
O método fadeOut() d estina-se a criar o efeito de esconder o elemento se1etorjQuery
que esteja visível, fazendo a transição de visível para invisível por meio da dimi-
nuição gradativa da opacid ad e do seletorjQuery visível. O elemento va i send o es-
condido por mudança da o pacidade de 100% (opaco ou visível) a O (i nvisível).
.iJ [arquivo-6.3a.html]
O mécodo animate() perm ite-lhe criar animações personal izadas para o se1etorj-
Query. Conforme mostrado, exisrem duas sincaxes para esse método.
Existem vários plug-ins que permitem criar an imações, além das permitidas
por padrão pela biblioteca, como descrito anteriormente. Não é o escopo deste li-
vro exa minar tais plug-ins. Serão destacadas as animações-padrão que, em resu mo,
são aquelas que manipulam as propriedades top, left, wi dth, height e opacity, além
de outras possíveis de estilização numérica , como font-size e border-wi dth. Além de
valores numéricos, permite-se também especificar o valor das propriedades com
o uso de uma d as seguintes palavras-chave: hide show e toggle. Por exemplo:
S( 'div ') .click(function () {
S(this). animate(
{opacity:'toggle' ,
wi dth : 'hide'},
{duration:'2000 ' }
);
}) ;
O parâmetro velocidade é opcional e adm ite três va lores d efinidos por palavras-
chave, que são: slow, normal e fast , para obtenção de velocid ad es de animações lema,
norm al e rápida respectivamente. De modo opcional, a velocidade pode ser defi-
nida po r um número rep resentando o tem po da ani mação em milissegundos.
O parâmetro função é opcional e permite defini r uma função cujo script entrará
em ação tão logo a animação termine.
Exemplo:
~ [arquivo-6.4a.html]
se/etorjQuery.stop()
O método stop() permire q ue você interrompa uma animação em andamento.
Exemplo:
.i) [arquivo-6.4b.html]
Funções utilitárias
7.1 Introdução
1 os capítulos anter iores, estudaram-se os métodos jQuery. Denominou-se ge-
nericamente de métodos jQuery todos os métodos e fun ções possíve is de serem
aplicados a um conjunto de elementos do DOM. Por exemp lo: quando se estuda
o método para adicionar estilos aos parágrafos de um documento, mostra-se a
. .
smtaxe a seguir:
S('p ').css({propriedade: 'valor', propriedade: ' valor', ... })
185
186 jQuery • A Biblioteca do Programador JavaScript
Então, é lícito perguntar: por que jQuery inclui em sua biblioteca essas fun-
ciona lidades de detecção? A resposta é simples: a ferramenta está disponível,
evite usá-la, esgote rodas as alternativas a seu uso, mas se seu projeto reveste-se
de condicionantes e características que justifiquem seu uso, utilize-as.
jQuery.browser
Flag Descrição
msie Retoma t rue se o navegador é identificado como Microsoft Internet
Explorer.
mozilla Retoma true se o navegador é identificado como Firefox, Camino,
Necscape ou outro baseado no Mozi lla.
safari Retoma true se o navegador é idenrificado como Safari, OmniWeb
ou outro baseado no Safari.
opera Retorna true se o navegador é identificado como Opera.
version Retorna a versão da engine de renderização cio navegador.
Convém ressaltar que a dececção se faz para uma decerminada fam ília de
navegadores e não para um navegador específico. A detecção se faz por famílias
baseadas no pressuposco de que navegadores perrencemes a uma mesma família
possuem caracteríscicas idêncicas. A maioria dos navegadores modernos enqua-
dra-se em uma das quaa-o famílias citadas anceriormence.
if (jQuery.browser.mozilla) {
S('p').append('Este navegador pertence à familia: <b>Mozil l a</b><br />')}
else if (jQuery.browser.1sie) {
S('p').append('Este navegador pertence à familia:
<b>Mi crosoft Internet Explorer</b><br /> ')}
else if (jQuery.browser.safari) {
S('p' ) .append('Este navegador pertence à familia: <b>Safari</ b><br /> ')}
else if (jQuery.browser.opera) {
S('p').append('Este navegador pertence à familia: <b>Opera</b><br />' )
} else {
S('p ' ).append('Não foi possível i dentificar a que famí l ia pertence
este navegador .' )};
}) ;
.iJ [arquivo-7.2a.html]
jQuery.boxModel
Bordcr
raa<lml(
"
Lcft
Conteúdo'> ... height lligJH
- width .
,
Bottom
Neste diagra ma , destacou-se uma área mais interior deno minada área d os
conteúdos, cujas dim ensões (largura e altura) são definidas pelas propriedades
CSS vfidth e height. Segue-se uma área d eno minada enchimento, cuja espessu ra é
definida pela propriedade CSS paddi ng.
Em volta do enchimento, há uma borda cujas espessura e cor e cuj o tipo são
definidos pela propriedade CSS border. Finalmente, há um espaço d enominad o
margem, com espessura d efinida pela propriedade CSS margi n.
O Box Model quebrado considera as dimensões CSS wi dth e height como cocais,
ou seja, nelas escâo incluídos os valores de padding e border. As margens continu am
exteriores ao box.
\la.r~io
Bordcr
P!litrl ine
•
("ontcÍldo~ •..
Lcfr
BOX MODEL STANDARD
, vlittth '
'\.la~in
Uorclcr
l'.1ddi11R
Conteúdo~ ...
Lcfr BOX MODEL QUEBRADO Righ r
Dottom
.i) [arquivo-7.2b.html]
Esta função utilitária permite fazer interações tanto por um conjunto de elemen-
tos da árvore do documenco como pelos elementos de um array. O parâmetro
objeto define uma coleção d e objetos ou um array no qual será feira a interação e
o parâmetro função d efin e a ação sobre cada um dos itens da interação.
Esta função difere do método each() estudado em [C2 52.l ], pois enquanto
cal método faz interações exclusivamente em objetos jQuery, esra fução utilitária
tem uma abrangência mais ampla, permitindo interação em qualquer enridade
da linguagem, incluindo arrays.
Exemplo:
<script type="text/javascript">
S(document).ready(function() {
$(' .versao') .click(function() {
jQuery. each(jQuery.browser, function(i, val) {
S('p').append(i + ' : <b>' + val + ' </b><br /> ' );
});
}) ;
S(' . reset' ) .click(function() {
$(' p') .empty();
}) ;
});
</script>
</head>
<body>
<button type="button" class="versao">Flags deste navegador</button>
<button type="button" class="reset">Reset</button><br />
<P></p>
~ [arquivo-7.3a.html]
Exemplo:
.iJ [arquivo-7.3b.html]
jQuery.makeArray(objero)
É improvável que você prec ise usa r essa função utilitár ia uma vez que a bi-
blioteca jQuery dela se uti liza nativamente. Lembre-se de que todos os objetos
jQuery retornam um conjunto de elementos.
• mapear o array resu lranre e consrrui rum novo array cujos elementos serão
acrescidos de um sinal asterisco(•) irnediacamenre seguido pela divisão do
índice do elemento por cinco.
Exemplo:
.iJ [arquivo-7.3c.html)
jQuery.inArray(valor array)
Exemplo:
var arr "' [ 'site', 'maujor ' , 'h', 2, ' jquery' , 105, 'l eitor' , 'xpto ' ];
S(' di v' ) .append( ' <p>' + arr.join(', ') + '</p>' );
.iJ [arquivo-7.3d.html]
jQuery.unique(array)
Esra função remove os elem entos qu e tenham s ido anteriorm ente duplicados
(ou clonados) e m um array constituído de elem entos da árvore do documento
e retorna o array sem as duplicaras.
jQuery.isFunction(objeto)
Exemplo :
function maujor() {} ;
var objetos = [ maujor, 'si te ' , null, fal se, 'div', function() {} , 105 ];
S('div').append('<P>' + objetos.join(', ') + '</ p>' );
jQuery.each(objetos, function(i) {
var resultado= jQuery. isFunction(objetos[i] );
S('span: eq('+ i +' )' ) . html( ' <b>' +resultado+ '</b>');
}) ;
$( ' .reset').click(function() {
S('div, span ').empt y();
}) ;
}) ;
} );
</ se ri pt>
</head>
<hody>
<button type="button" cl ass.."versao"> jQuery. i sFunction() </button>
<button type="button" class="reset"> Reset</button><br />
<di V></di V>
<Span></span>
<span></span>
<span></span>
<span></span>
<Span></span>
<span></span>
<span></span>
.iJ [arquivo-7.4a.html]
jQuery.trim(string)
Esta fu nção remove os espaços em branco existentes antes e depois de uma string.
O parâmetro string é a string contendo os espaços a remover.
Exemplo:
var mi nhaString = " Foi lançado o livro jQuery do Maujor . " ·'
alert ('String antes do t rim :\ n\ n''' + minhaString + ' '' ' );
.iJ [arquivo-7.Sa.html]
Nes ce icem do capítulo, será criada uma função utilitária simples, com o ob-
jetivo de mostrar a técnica envolvida no desenvolvimento de tais funções, para
o emprego em conj unto com a bibl ioteca jQuery.
Mes mo que você esteja desenvolvendo seu projero com exclusividade de uso
para a biblioteca jQuery, é de boa prática prevenir conflitos, pois nada garante
que futuramente seu proj eto venha a ser atualizado ou expandido e você ou ou-
tro desenvolvedo r tenha que implantar uma outra biblioteca no projeto. Adoce
como regra não confiar no uso do alias $ sem um mecanismo de prevenção de
conflitos.
Traca-se de uma fun ção utili tária muito simples, d estinada a ser usada co m a
biblioreca jQuery, mas pocencialmeme conflicante com ou eras bibliotecas. Veja a
segu ir duas formas de chamada para essa função:
,i) [arquivo-7.6.la.html]
Mas, co mo usar o alias ssem o risco de conflitos? Seria ó timo se isso fosse pos-
sível, n ão é mesmo? E é possível. A sintaxe javaScript permice passar jQuery como
se fosse um parâmetro d e substitu ição ao a lias$ conforme mostrado a seguir:
(function (S) {
li Aqui vai o scri pt da função personalizada
})(jQuery);
Adotando essa sintaxe para escrever a f unção, h averá segura nça de qu e o alias
S não será usu rpado por outras bibliotecas.
Em uma primeira etapa, cria-se a fun ção pa ra muda r a cor d e textos de pa-
rágrafos e, a seguir, aperfeiçoa-se a função para mudar seletivamente a cor d e
outros elementos da página.
Código comentad o:
Linha(s) Descrição
Li nhas 1 e8 A fu nção está contida denrro de function(S) , descacada em negrito,
conforme a sintaxe estudada no item anterior.
Li nha 2 A função admite o parâ metro e, que define o elemento, e opa-
râmetro cor, que define a cor a ser adotada para o elemento.
Linha 3 Cria-se urna variável denominada e1que armazena,ern um array,
todos os elementos e existentes na página.
Lin ha 4 Cria-se um loop para percorrer os elementos armazenados na
variável el.
Lin ha 5 Aplica-se um a regra de estilo defin indo a cor passada no parâ-
metro cor para todos os elementos el.
.i:J [arquivo-7.6.2a.html]
É verdad e. Se a função terminasse aqui, não reria valor práúco algum, pois
se limitou a replicar com mais código um método nativo. E funções utilitárias
não se destinam a substitui r métodos nativos, e sim complem entá-los ou suprir
suas fa ltas.
Assim sendo, adicione cerra flexibilidade a essa função, justificando sua criação,
ainda que de uso limitado, pois como se disse, o objetivo é mostrar a sintaxe e
fundamentos de criação de fun ções nativas.
Que cal se em vez de clicar um botão para mudar a cor dos parágrafos, você
úvesse um menu de seleção de cores de modo que roda vez que o usuário sele-
cionasse uma cor, houvese m udança sem necessid ade de cliques?
Nessa nova solução, a cor será coletada do menu de seleção e não mais passada
como um parâmetro da função, como era na solução anterior. Assim, tal fun ção
terá apenas o parâmetro el e será necessár io informar qual fo i a cor escolhida
pelo usuá rio no pró prio corpo da função.
Nessa nova solução, cão logo o usuário escolha a cor, esta será automaticamente
aplicada aos parágrafos, sem necessid ade de clicar um botão.
<hody>
<form action=-"" method="">
<label>Escolha uma cor para os parágrafos<br />
<select id="selecionaCor">
<opti on va lue="#999999''>Defaul t</opti on>
<Option value.. "#FFOOOO">Vermelha</option>
<option value.. "#OOOOFF">Azul </option>
<option value.. "#OOCCOO">Verde</option>
</sel ect></label >
</form>
<P>Parágrafo um</P>
<p>Parágrafo dois</P>
<P> Parágrafo três</P>
~ [arquivo-7.6.2b.html]
Você seria capaz de dizer se os resu ltados obtidos com essa solução podem ser
conseguidos com métodos nativos do jQuery?Tal desafio foi lançado como exercício
prático. Encontro u uma solução? Poste na :lrea de come ntários do site d o livro.
Que ca l incremenrar mais um pouco essa fun ção permitindo que o usuário
esco lha, além da cor, os elementos que devam ser a fetados pela escolha?
As modificações a introduzir no script são as descritas a seguir.
• C riar botões pa ra selecionar cada elemento a mud ar de cor e um botão
para selecionar todos os elementos a mudar de cor:
<but ton type.. "button">Parág ra fos</button>
<button type="button">Cabeçalhos</button>
<button type="button">Li stas</button>
<button type="button">Tudo</button>
Com essas modificações, chega-se a uma terceira solução para a função per-
sona lizada cujo funcionamento pode ser visco no arqu ivo a seguir.
,iJ [arquivo-7.6.2c.html]
Modifique tal função criando outro elemento select para permi tir ao usuário
escolher o elemento a m udar d e cor, ta l como se fez para a escolha da cor. Esse
novo sel ect substituirá os borões de seleção dos elementos. A técnica é idêntica
à adotada anteriormente para o select de cores e a mod ificação em relação ao
scripc anterior é mostrada a segu ir:
S('button') . click(function()
S. corTexto();
});
} );
.i) [arquivo-7.6.2d.html)
Urna amí lise atenta da solução proposta mostra que esta é fa lha e deve ser
melhorada. Note qu e se utilizou um método javaScripr sem testar seu suporte
pelo navegador. As boas práticas de programação recomendam a segu inte veri-
ficação para o método usado:
i f ( !document.getEl ementByid) {
return fa l se;
}
Isto assegura que o navegador não tentará executar o código caso não ofereça
su porre para o método. Além disso, continu a-se tal desenvolvimen co usando
métodos javaScript não específi cos à biblioteca jQuery.
~ [arquivo-7.6.2. la.html)
.iJ [arquivo-7.6.2.lb.html)
A função pode ser aperfeiçoada ainda mais e ganhar funcionalidades ad icio-
nais, mas tal exemplo será finalizado aqui, pois já cumpriu o objetivo de mostrar
as técnicas de criação de funções personalizadas. Ressalta-se que a função criada
manipula elementos do DOM, mas como já se disse, é possível manipular obje-
tos não pertencentes ao DOM com funções personalizadas. Que tal desenvolver
uma função capaz de manipular o objeto Date() e personalizar a apresentação de
datas em uma página web?
A partir do capírulo 8, inicia-se a segunda pane deste livro que é dedicada a apli-
cação prática dos conceitos e fundarnencos estudados na primeira parte. Todos
os exemplos desenvolvidos são comentados e estão disponíveis para download
no site do livro. Recomenda-se que o estudo dos casos mostrados seja sempre
complementado com a visualização do respectivo arquivo.
211
'vlatenal com '111 J& autorais
Material com direitos autorais
CAPÍTULO 8
Animações básicas
213
214 jQuery • A Biblioteca do Programador JavaScript
16. </head>
17. <body>
18. <!-- Conteúdo da pági na aqui -->
19. </body>
20. </ht mh
.i) [arquivo-8.1a.html]
Código comentado:
linha(s) Descrição
Linhas 1e2 Todo documento HTML deve começar com a declaração do
DOCTYPE. t nessa declaração que o navegador busca as in-
formações sobre a sintaxe da marcação, bem como instruções
de como renderizar cada elemento da marcação. A maioria dos
documentos existentes omite essa declaração e a renderização se
processa no chamado modo de render ização k irks, em oposição
ao doeu mentocorreramente marcado cujo modo de renderização
é chamado de standard. Uma das mais notáveis inconsistências
em consequência da fa lta de DOCTYPE em um documento é
o " Box Model quebrado» no navegador Internet Explorer. Veja
jQuery. boxMode l em [C7 $7.2].
Linha 3 Segue-se ao DOCTYPE a cag de abertura do elemento html que é
o elemento-raiz do documento. Use o atributo l ang para indicar
o idioma principa l do documento.
Linha 5 Sempre declare a codificação de caracteres do doc u mento.
Lin ha 6 Não om ita o título de seu documento. Use títulos que informem
o conteúdo da página, pois os mecanismos de busca dão muita
importância ao conteúdo do elemento t i tle. O título que se
u tilizou "Exemplos prá ticos" tem caráter puramente didático.
Na prática , é u ma péssima escolha. Melhor seria descrever su-
mariamente quais são os tipos de exemplo contidos na página,
por exemplo: exemplos dos métodos jQuery show() e hide().
Linhas 7 a 9 A folha de estilo do documento será escrita dentro do elemento
style. Serão usadas fo lhas de esrilo incorporadas ao documento
para facilitar a leitura e o escudo. Folhas de esti lo, salvo exceções,
devem ser colocadas cm arqu ivos externos e linkadas ao docu-
mento.
Linha 10 Aqu i se linkou para a biblioteca jQuerr g ravada em u m arqui-
vo externo chamado jquery-1. 2. 6. j s, que é a ú ltima versão da
biblioteca à época que este livro fo i escrito e a qual fo i baixada
em http://docs.jquery.com/Downloading_jQuery.
Linhas 11 a 15 Comido dentro do elemento script, inseriu-se o método jQuery
S(document) . ready() que é o equivalente ao método javaScript
window.onload. Todo script ali contido só entra em ação depois
que o DOM estiver pronto, ou seja.depois que o documento civer
sido carregado.
Código comentado:
Llnha(s) Descrição
Linha 1 Esta regra CSS se emprega nos parágrafos em que se aplico u a clas-
se esconde. A declaração display:none faz q ue os conteúdos desses
parágrafos não sejam renderizados e tudo se passa como se tais
conteúdos não constassem da marcação. Os conteúdos são retirados
do fluxo norma l do documento e o espaço fís ico por eles ocupado
na renderização é preenchido pelo elemento que se segue no fluxo
da marcação. Convém ressaltar que clemenros com display:none
são ignorados também por tecnologias assisrivas, como leitores de
tela, e assim permanecem inacessíveis tanto visualmenre como para
qualquer tipo de mídia.
Linha 2 Esta regra CSS se emprega nos parágrafos em que se aplico u a clas-
se mos t ra. A declaração display:block faz que os conteúdos desses
parágrafos sejam renderizados normalmente. Esta declaração é a
declaração-padrão para parágrafos e rodos os demais elementos
nível de bloco da marcação HTML.
Para elementos in -l ine, cais como span, st rong, em, img etc., a condição de visibi-
lidade-padrão é determinada pela reg ra CSS display:inl ine.
Código comentado:
Unha(s) Descrição
Lin ha 1 Este encadeamenro jQuery destina-se a encontrar todos os parágrafos
aos quais se tenha arribuído a classe esconde e a retirá-los do processo
de renderização tal como se tivesse sido declarada para eles a regra
CSS display:none.
Linha 2 Este encadeamento jQuery destina-se a encontrar todos os pará-
grafos aos quais se tenha atribuído a classe mostra e a renderizá-los
normalmente cal como se tivesse sido declarada para eles a regra
CSS di sp1ay:b1ock.
Criou-se uma página web simples para exemplifica r os efeitos que serão
esrudados neste capítulo. A página inicia-se com um cabeçalho nível 1 e cinco
parágrafos, sendo atribuída a dois deles a classe esconde. Esta página servirá de
laborató rio para os scripts de exemplo. Serão explicados cada componente da
m arcação, bem com o a folha de estilo a esta incorporada. À medida qu e for ne-
cessário acrescentar o u suprimir con teúdos na página, para d emo nstrar um novo
efeito, este será acresccmado e será explicada sua necessidade.
A marcação inicial é a seguinte :
1. <div id="com-classe">
2. <label>Parágrafos com classe "esconde"<br /></l abel>
3. <button type="button">Esconder</ button>
4. <button type="button">Mostrar</button>
5. </diV>
6. <div id="todos">
7. <label>Todos os parágrafos<br /></l abel>
8. <button type="button">Esconder</ button>
9. <button type="button">Mostrar</button>
10. </diV>
11. <hl>Folhas de estilo em cascata</hl>
12. <P>CSS é a sigla em ... </ P>
13. <P> A grande vantagem ... </P>
14. <P>HTML marca e ... </P>
15 . <P class="esconde">A adoção desta ... </p>
16. <P class.."esconde''>Projetar um ... </P>
Código comentado:
linha(s) Descrição
Lin has l a 5 Um div com seu respectivo id serve de container para os dois
botões que se destinam a disparar os evencos esconder e mostrar
os parágrafos aos quais se tenha atribuído uma classe esconde.
Código comentado:
linha(s) Descrição
Linha 1 Linka a biblioteca jQuery no d ocumento.
Linhas 2e17 Abre e fecha o conrainer <scri pt></scri pt> para o código.
Lin has 3e16 Abre e fecha o container para o mécodo docurnent. ready() que faz
que codo o scripr nele comido aguarde o carregamenro do DOM
para entrar em ação.
Linha 4 Define uma função a ser execu tada quando o usuá rio clicar o
primeiro elemenrobutton na página. Lembre-se de que os mérodos
jQucr)' retornam um conjunto d e objetos, sem necessidade de
se proceder a loops. Assim S(' button') retorna todos os botões
encontrados no documento e a esres atribui um índ ice começando
a contagem em O(zero), logo eq(0) se refere ao prime iro elemento
button encontrado.
Linha 5 Este é o script da função que será executada ao se clicar o pri-
meiro bolão. Enconcra rodos os parágrafos com a classe esconde,
e esconde-os, caso esrejam visíveis.
Linhas 7 a 9 Este é o script da função que será executad a ao se clicar o se-
gu ndo botão. Encontra todos os parágrafos com a classe esconde
e mostra-os, caso esteja m escondidos.
Linhas 10 a 15 Cumprem funções idênticas às anteriores para todos os parágrafos
do docu mento.
.i) [arquivo-8.2a.html]
Gene ricamente, o método toggl e() permite alterna r d o is comporta mentos, e não
somente a vis ibilidade, a cada clique do rno use. Você d efin e do is comportame ntos
corno parâm etros para o mé todo toggleO e quando o us uário clica uma vez, dispara
o primeiro comportamento d efinido, outro clique, o segundo comportame nto,
mais um clique, o primeiro comportamento, e ass im indefinidamente vão se
alternando os comportamentos definidos conforme o clique s eja par ou ímpar.
Observe que no scrípc a seguir, definiu-se o método toggle() aplicado a um div. A
p rimeira função reduz a o pacidade do div pa ra 20% e a segunda fun ção restitui
a o pacidade orig inal pa ra 100% , ou seja, o paca.
CSS:
Código comentado:
Linha(s) Descrição
Lin ha 4 Encontre todos os parágrnfos com a classe esconde e rorne-os invisí-
veis, caso estejam visíveis, ou ''isíveis, caso estejam invisíveis.
Linha 7 Cumpre as mesmas funções descritas ameriormcmc para rodos os
parágrafos do documento.
Código comentado:
Linha(s) Descrição
Lin ha 3 Utilizou-se o método text( ' Esconder ' ) ,que se destina a inserir o cexco
"Esconder'; como comeúdo do botão. Assim, quando o documemo
é carregado, o botão aparece com esse texto.
Lin ha 12 Ao ser clicado, inicia-se um teste condicional que determ ina o se-
guinte: se o elemento que acaba de ser clicado, S(this), contiver o
texto ''Mostrar': altere esse texto para "Esconder'; se não, altere para
"Mostrar''. Esse teste condiciona l faz a mágica, a lternando o texto
do botão.
Para demonstrar esse novo efeito, com alternância do texco do botão, consulte
o arquivo indicado e mostrado na figura 83.
--
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
-
-
~
~
~
~
~
~
-
u l):emplos práticos · Mo7i1111 Firefox ~@(E)
H'ThíL marca e estrutura textos. cabeçalhos. parágrafos. IW<.s. bot.Ses. formul.ãrios. imagens e demais
elementos da página e CSS define cores, posicionamento na tela, estilos de linhas. bordas e rudo o mais
relacionado à apresentação
A adoção desta técruca resulta cm múltiplas vant~ens e benefic1os que não são conseguidos quando se
. . ...
Note que os botões são renderizados, mas perderam o respectivo texto indica-
tivo de Slla fina lidade. É necessário corrigir isso. Você saberia an tecipar a solução
para esse novo problema? Ou seja, como a presencar os botões completos na
situação em que javaScript está habilitado e CSS está desabilitada?
5. $('hl').before(ht1l8ota0Um)i
6. $(' lco11-cl asse'). after(htmlBotaoDois);
iJ [arquivo-8.3e.html)
Código cornenrado:
linha(s) Descriçáo
Linha 3 Criou-se a variável htmlBotaoUmque armazena a marcação HTML do
primeiro botão.
Linha 4 Criou-se a variável htmlBotaoDois que armazena a marcação HTML
do segundo bocão.
Linha 5 lnseriu-se a marcação do primeiro botão imediatamente antes do
elemento hl.
Linha 6 inseriu-se a marcação do segundo botão ímediatameme após a
marcação do primeiro botão que fora inserido conforme descrito
na linha 5.
Para demonstrar esse novo efeito, que contempla o caso de CSS desabilitada,
consulte o arquivo indicado e mosa-ado na figura 8.7.
CSS é a sigla em inglês para Casca<hng S!yle Sheet que em portu~s foi traduzido para folha de esblo
cm cascaia e ! wn mecarusmo Sllllplts para adicionar estilos (p.tit . fontts. cores. espaçamentos) aos
docUtl\entos Web
lITML marca e est.ftl!Ura te:noi. cabeçalhos. parágrafos. links. bo~es. fol'lllulãrios. imagens e demais
elementos da página e CSS define core~. posicionamento na tela, elllilos de linhas, bordas e tudo o mais
relacionado à apresentação.
( to •• ;1, t-r• •1J1t'. 'l'•' .. ~1. .1!:q ~: .... -r11··· l•f' ,,... , l 'J't,-; ..... 1·1 ~1-41': rj;
j t .. f•~\"•'jr•I fl•t!1' t \º• • :~1•fl,..!>fl .. ·~.ir1.1t111 '1í••· l• l 'l4':1 1.1••.fl • ;1,!1
1 • 1 1• , 1•., .. ·1, • ,,r.1.H.rc 1 t r 1 1 ·1 " ' '·, •'•lfl"t
<hody>
<hl>Folhas de esti lo em cascata</hl>
<div id="tudo">
<p>CSS é a sigla em . . . </p>
<P> A grande vantagem ... </p>
<p>HTML marca e estrutura . . . </P>
<P>A adoção desta . .. </P>
<P class.. "esconde">Projetar u11 ... <p>
</div>
~ [arquivo-8.4c.html]
.iJ [arquivo-8.Sa.html]
Uma fun cio nalidade interessante da biblioteca j Queq~ muito útil para an ima-
ções, são as chamadas opciona is d e uma função denominadas callback. Sem outras
considerações teóricas, callback para animações pode ser definida como uma
chamada para uma funç ão que será executada tão logo a animação termine.
Todos os métodos que você coloca em uma anim ação são executados simul-
raneamenre, respeitado o tempo d e execução, resultando na animação.
Caso qu eira incluir uma ação a ser executada tão logo a animação termine,
você d everá passar uma função para o m étodo da an imação, como se fora um
parâmetro.A sintaxe geral para callback é mostrada na animação seguinte, que é
uma modificação da animação vista no exemplo anterior. Note no código a segu ir
que callback é uma função qu e, ao terminar a animação definida com slideDown()
(revelar), executa a ação d e adicio nar uma regra CSS definindo uma cor verm elha
para os textos contidos e uma cor vermelha para a borda do elemento body. Da
mesma forma, a fu nção a executar ao término da animação definida com slideUp()
(esconder) executa uma ação de mud an ça d e cores.
} else {
S(this) .text ('Mostrar');
$('#tudo') .slideUp(lSOO, function() {
S('body').css({color: ' gree.n', borderColor: 'green ' });
});
};
.iJ [arquivo-8.Sb.html)
.iJ [arquivo-8.6a.html]
.... CSS:
1. <style type="text/css" media="all">
2. body {/* sem alterações ~;}
3. label {/* sem alterações •/}
4. p {background:#444;color:#fff; paddi ng:8px 20px;}
5. button {/• sem alterações •/}
6. </style>
Código comentado:
linha(s) Descrição
Linhas l a 6 Altere sua folha de estilo em função d a retirada de elementos da
marcação. Use um só parágrafo com fundo cinza-escuro e !erras
brancas conforme a regra CSS na linha 4.
..,.. jQuery:
1. <script type="text/javascript" src=" .. / jquery-1. 2.6. js"></scri pt>
2. script type="text/javascript">
3. S(document) .ready(function() {
4. S('html').css('height', '101%')
5. S('hl').aher(' <button type="button">Esconder</button> ');
6. var erM.ndamento = '<img src="carregando.gif" class="gif-andamento" />';
7. var alturaJanela = S(window).height ();
8. var al turaObjeto - S('p').outerHeight();
9. var posicaoObjeto = $('p').position().top;
10. var ampl itudeOeslocamento = alturaJanela - alturaObjeto - posicaoObjeto;
11. S('button' ).click(function() {
12. if (S(thi s) .textO == 'Mostrar ' ) {
13. S(this).text('Esconder').hide().after(emAndamento);
14. S('p').show().animate({top:O, opacity:l}, 2500, function() {
15. $( ' .gif-andamento').css('display', 'none ') ;
16. S('button').show();
17. }) ;
18. } else {
19. S(thi s) . text ('Mostrar ' ) . hide() . after(emAndamento);
20. S(' p') .css({position: ' relative'})
21. .animate({top:amplitudeOeslocamento, opacity:O}, 2500, function() {
22. S('p ' ) .hide();
23. S(' .gif-andamento') .css('display', ' none ' );
24. S('button').show();
25. });
26. };
27. }) ;
28. }) ;
29. </script>
~ [arquivo-8.7a.html]
Código comentado:
Unha(s) Descrição
Linha 4 Esta regra CSS força o aparecimenro d a barra de rolagem ver-
tica l nos navegadores-padrão, mesmo sem necessidade dela, ao
contrário do Imernet Explorer que reserva o espaço indepen-
denremente do espaço vertical requerido pelo conteúdo. Nessa
animação, o o bjero é colocado para fora da rela por sua parte
inferio r e, nesse momento, apa rece a barra de ro lagem, o que
causa um desloca mento horizontal, como um pulo lateral, d a
página. Forçando o aparecimento d a barra de rolagem,corrige-se
esse pulo. Experimente retirar essa linha do código e visualize a
a nimação para ver o desagradável pulo.
Lin ha 5 Inseriu-seu m botão logo após o elemento hl, que, ao ser cl icado,
irá execucar a animação.
Linha 6 Armazenou-se, na variável emAndamento, uma marcação HTMLque
define a inserção de umagif-animada indicativa de carregamento.
Para uma ferramenta on-line geradora d esses tipos de g if, visite:
http: //M~w .ajaxload. i nfo/ .
$(window).hei gh10 :
umpllludeOe slocamen10
..,
Consulte o arquivo-8. 7b . html p ara visualizar os cálcu los dos valores para as
variáveis mostrad as nesse exemplo. Abra o arquivo e proceda a a lguns redimen-
sio namencos d a janela do navegador, recarregando a página a cada redimensio-
namento, para visualiza r os resultados dos cálculos.
Revelando conteúdos
Neste capítu lo, serão estudados a lguns efeitos da bibl ioteca jQuery destinados
a esconder e revelar conteúdos. Não se pode esquecer que efeitos obtidos com
scripts rodando no lado do cliente, tais como são os efeitos jQuery, devem ser
projerados de modo a não bloquear nem obstru ir o acesso a contetídos. É o que
se denomina JavaScript não obstrutivo.
239
240 jQuery • A Biblioteca do Programador JavaScript
Marcação básica
Para desenvolver o efeiro revelar e esconder da FAQ adorada como exemplo,
será utilizada uma marcação HT tv1L básica na qual se escolhe um coral de dez.
perguntas. Veja a seguir essa marcação devidamente comentada.
Para melhor entendimento das técnicas de desenvolvimento, optou-se por ini-
ciar co m um script simples em uma primeira erapa e, a partir daí, ir modifica ndo,
aperfeiçoando e apresentando alrernacivas ao scripc em etapas sucessivas.
O foco principal deste capítulo é o aprendizado d as técnicas de desenvolvi-
menro com jQuery. Vários são os caminhos para se conseguir um mesmo efeito.
Certamente você, à medida que progredir no estudo, encontrará alternaàvas
para os scripts apresentados, não devendo limitar-se a um simples copiar e colar.
Agindo assim, esta rá en riquecendo e aperfeiçoando seu aprend izad o.
A marcação HTML e CSS da página básica para os exemplos é mostrada a
seguir.
l!IJ.. CSS:
L <style type,," text/ css" media,,,"all ">
2. body {
3. wi dth:400px;
4. font:80%/l.2 Arial, Helvetica , sans-serif;
S. margi n:O auto;
6. padding: O;
7. }
8. dt {
9. margin:20px O 3px O;
10 . font -weight:bold;
11. border-top:lpx solid #ccc;
12. }
13. dd {
14. margin:O;
15 . paddi ng: Spx O O O;
16. text-align:justi fy;
17. }
18. </Style>
.... HTML:
1. <hl>FAQ CSS</hl>
2. <h2 id='' i ndice''>Índice</h2>
3. <Oh
4. <l i ><a href="#css">O que significa a sigla CSS?</a></li>
5. <!-- omitidos oito itens -->
6. <li x a href="#comentario">Posso inclui r canentários nas regras CSS?</a></li>
7. </Ol>
8. <h3>Perguntas e respostas</ h3>
9. <dh
10. <dt id="css">O que significa a sigla CSS?</dt>
11. <dd>CSS é a si gla ... </dd>
12 . <dd><a href="#indice">lndice</a></dd>
13. <!-- omiti dos oito itens -->
14. <dt id="comentario">Posso incluir comentários nas reg ras CSS?</dt>
15. <dd>Sim . Comentários podem e ... ></dd>
16. <dd><a href="lli ndice">lndice</a></dd>
17. </dl>
18. </body>
19. </htmh
~ [arquivo-9.1a.html]
FAQCSS
lndice
1 Q ª"'sigo ljq u \l\f CSS?
2 Qual ~ ~ littahdade dai CSS?
3 Pt'r pue dAVn u11111r C~
4 Qll1'Ul IJ \1&n•Jqê1'! d• HJI' t$$.?
5 A,.,, CSS tttáll dp a -1udp t::on ?'> Wrb,Sa-nd;Jrúfi'
6 Ç) QL• ~ re!Jla C')S 1
7 CC'n10 .rScr~<l \ lrníil t'1qr..t CSS ?
9 Ou11it r ,.,ayteuu !tl\e. P!1""1hd'11 ftm CSS~
9 Ao. <i:.mttr" r.ss ê •rn,&e;!., ma n5r 11!.ietrn1ni'!ar.11htt?
10 Poa~o lpç'uir romcrn;jnos na~ .f':il?rttc CSS'
Pergun~s • respost;as
Tal documento encontra-se em sua forma mais elementar com a lguma esti-
lização básica , conrndo um usuário ainda que desabilite suporte às CSS em seu
navegador ou abra a página em um navegador de texto, terá acesso a rodas as
perguncas e respostas do FAQ e nenhum conteúdo será perdido.
esses assuntos aos quais se dispensa a máx ima arenção. Assim , no caso da FAQ
em quescão, é de vital importâ ncia que o usuár io idenrifique insrantaneamenre
como revelar o conteúdo.
Cada vez que o usuário clicar um dos .links para ver a resposta, esta será
revelada. Adicionalmente, acrescentam-se uma borda e urna cor de fu ndo para
destacar a resposta revelada.
Observe, na figura 93, o que aconteceu após o usuário rer clicado sucessi-
vamente os link5 para revelar as resposta.s a duas perg untas. Note que aci m a
da resposta se disponibilizou um link para fechá-la e abaixo dela 1 um link que
remere ao índ ice.
Veja, nas figuras 9.2 e 93, o ciclo completo do efeito que se pretende obter
nessa primeira etapa.
Veja a segu ir os códigos para desenvolver o efeiro proposco para esta etapa.
Não se irão acrescentar nen huma marcação nem reg ra CSS ao documento.
Toda a marcação necessária e a fo lha de estilo serão inseridas v1a script.
Será que esta é uma boa escolha? Afinal se estão misturando marcação e
apresentação com comportamento. É boa prática manter essas crês camadas do
desenvolvimento independentes. Toda a marcação fica no HTML da página, a
apresentação, em arquivos de folhas de estilo e o comportamento, em arquivos
de scripr.
Quando se trata de usar jQuery e scriprs de maneira geral, com a fina lidade
de incrementar a apresentação da página, nada há de errado em se adicionar
marcação e estilização via scripc. Uma criteriosa escolha do que deve ser inserido
e, principalmente, o uso de bom senso pelo desenvolvedor são mais importan-
tes que despender tempo com discussões dessa ordem. O objetivo principal do
uso de script é enriquecer a experiência do usuário, sem bloquear seu acesso a
conteúdos. Para cumprir esse objetivo, é perfeitamente válido inserir marcação
e esti lização via script.
Nessa etapa, será utilizado o scripc para cais inserções e, na sequência do de-
senvolvimento, em etapas futuras, serão mostradas inserções em sua respectiva
camada, misturadas com inserções por script, rodas sendo soluções válidas e
funcionais.
.i) [arquivo-9.1b.html]
Pode-se, então, concluir que ao final d esta primeira etapa o efeito qu e se aca-
bou de desenvolver trouxe como resultado uma págin a bem mais interessante e
com apelo visual bem melhor que o da página básica. Contudo, alguns pontos
podem e devem ser melhorados.
Segunda etapa
Nesta etapa, o objetivo será retirar a estilização e marcação do script e m questão.
Um d os fund amentos do desenvolvim ento, segundo os Padrões Web, preconiza
independência entre ca madas d e marcação, apresentação e compo rtam ento.
1111- HTML:
<h3>Perguntas e respostas</h3>
<dh
<dt id="css">O que signi fica a sigla CSS?</dt>
<dd>Ver re.sposta</dd>
<dd>Fechar</dd>
<dd>CSS é a si gla para Cascading Style
Fazendo isso, veja, na figura 9.4, o que acontece com a página básica.
FAQCSS
lndlce
1 \1 º"" "'S"'~"" • ..iQI• e<;~
2. Qyol li a 'n!ll!ldldll d•• r,SS?
3. E'oc.CllJH<M> 1riar. C$S?
4. Cus.f ile: v~n_!!l_en-; de usat..CSS[
5, As CS.9 @91'-o d@ acoglq cor!" a• \ \"e b 9 andards?
6 0 tu J,. '1 tlVHft ~8 ?
7. C"«O;Q ee(#i'(O: 1m;, 1rg1 CSS '
8. Quaja Ç-iHtÇUHtp ~ So pennfido2 em CSS?
9. ~&@ CSS ~ S.Jí't fyel a rna útç ylf~~
10, ?ottq indyi1 cem9nt,riu "ª', tFJ! CS.$?
Pergunta~ e respo~ta:
Embora esrn não seja a solução, veja comenri rios adicionais sobre essa inserção
de código. Talvez você esteja se perguncando o porquê de não se rer sugerid o o
uso de um elemenro neu tro como span ou, mais apropriad amenre, o elemento a,
que é o semantica men te correto para marcar o link.
Terceira etapa
esta etapa, será efetuada uma mudança na apresen tação dos links para abrir
e fechar as resp ostas. Em vez de links textuais, será utilizada uma imagem como
link. É comum encontrar, na web, imagens d e um sinal de mais e m enos(+/ -)
para tais links. Na solução que será desenvolvida, você utilizará a imagem de olho
aberro e fechado. Não está em questão o design da solução, o que importa é o
objetivo final do estudo: mostrar a técnica d e uso d e uma imagem. Conhecendo
a técnica, você pode usar a imagem que m elhor se adapte a seu projeto.
. e ,,.1
FAQCSS
ln dice
1 0 t!U@ Stgnfiica a srgla C SS~ ·
2 <lln1 A A finftilt d:\if~ tfA• cS":::?
3. Por qu~ d!rffi 11a!)r CSS'>
4. OV.112 az: '"1ntaggr' de YJJ.ãr CSS?
5. 6$ CSS eitáo> ~i!. aço!4o mo •• WW S:~ndu•M
6. Ô gutt Wli!JC" C$S?
/ , Ctn9 ~IC-UIVQ WJI t!Q r-1 ($;$ ~·
8 Ot@'j r :Jract11rP5 Mr p;Arrrdtç-M oro Ç ~C ?
9 . ~R CS-S p :;encifçJ a m;júcct4n'minumtn C
10, eossq mely!r cpm!!Q[âfron. tl3$ requis CSS?
P •rgunt~ s • r•~post.~s
A novidade aqu i é o uso de uma regra CSS para retirar a borda azul padrão que
os navegadores colocam em volta de uma imagem quando esta é um link. Lembre-se
de que você irá utilizar a imagem como se fosse um link morto para proporcionar
acesso via teclado. Faça uma cópia do arquivo desta etapa, recire essa regra CSS,
salve o arquivo e visualize-o no navegador. Constate o aparecimenro de uma borda
horrível em volta de cada um dos (não tão lindos e azuis) olhos.
Tal como se fez para o link que leva ao índice, inseriu-se marcação para servir
de concainer à imagem do olho. Noce que o atributo src da imagem está vazio. Por
que não optar por simplesmente o mitir o atributo? Porque a página não passaria
no va lidador, pois esse atribuco é obrigatório. Mas a inserção dele, ainda que
vazio, irá acarretar um problema que será tratado a segu ir.
Você seria capaz de dizer qual a finalidade da declaração display: none, mostra-
da anreriormenre na regra CSS, para a imagem? Por que esconder a imagem se
precisará dela na página?
.i) [arquivo-9.1d.html]
Quarta etapa
Seria muico bom se a FAQ em questão oferecesse a facilidade ao usuário de ele
não ter que clicar o link fechar toda vez que passasse para a visualização de outra
resposta. Na verdade, ele não é obrigado a fechar uma resposta para revelar outra,
podendo abrir as respostas uma de cada vez, mas isso aumencará o conceúdo na
cela e a rolagem vertical também, enchendo a cela de respostas e dificu ltando a
consulta a uma resposta revelada anceriormenre.
Suponha que o usuário cenha iniciado a lei cura com a primeira resposta e, a
seguir, clicado para abrir a segunda resposca. Veja, na parte superior da figura
9.6, o instante logo após o dique para abrir a segunda resposta e, na tela inferior,
o fim da a nimação prevista no scripc.
A regra CSS ucilizada para esta solução é a mesm a que se usou para a classe
esti l o-um, qu e define borda , padding e cor de fundo para a resposca.
~ [arquivo-9.1 e.html]
Código comentado:
Unha(s) Descrição
Lin ha 3 Criou-se uma variável para armazenar o link para ver a resposta.
Aqui, oprou-se por criar a marcação e a escihzação via jQuery e
atribuiu-se à classe denominada ver o elemenro link. Ucilizou-se o
elemenro a pa ra links, com a finalidade de garanriracesso via teclado.
Note que, nesta solução, não foi necessá rio um link para fechar a
resposta,já que uma resposta revelada fechará, de modo automático,
outra eventualmente aberta.
Linha 4 Esta você conhece das ecapas anteriores.
Linha 5 lnseriu-se a marcação HTML do link para ver a resposta, imediata-
mente após o elemento dt que contém a pergunta.
Linha 6 Ao se clicar o elemento com a classe denom inada ver (o link para
ver a resposta), o scr ipr entra em ação.
Lin ha 7 Tem o mesmo efeiro de return false; da li nguagem JavaScript, evi-
tando que o navegador siga o link; no caso em questão, a janela rola
para o copo.
Linha 8 Retira o texco do link para mostrar a resposta.
Sugestões:
• Faça uma cópia deste arquivo e experimente os efeitos hide(), show() , fadeln()
e fadeOut(), com diferentes velocidades. Depois, altere o disparador do evenco
de cli ck para mouseover, mouseout,mousemove, keydown, keyup (estes dois últimos só
para navegação por teclado).
• Nesta solução, não se mostra o link para o índice quando se revela ares-
posta. Mod ifique o script para mostrar o link. Dica : adicione, via script,
classe(s) aos elementos HTML para viabilizar a solução. Por exemplo:
use S('dt + dd ' ).addCl ass('resposta-ocul ta'). Utilize o seletor de atributo
S('a [href,,"#i ndice"] ')para selecionar o link para o índice.
Quinta etapa
'esta quinta etapa, será desenvolvida uma solução na qual o usuário, ao entrar
na página da FAQ, encontrará somente a lista das perguncas e uma instrução
orientando-o a clicar uma pergunta para revelar sua resposta.
O efeito final dessa solução pode ser visto na figura 9.7, onde constam, na
pane superior, o estado inicial da página ao ser carregada e, na parte inferior,
o resu ltado após o usuário ter clicado a primeira pergunta. O clique em outra
pergunta fecha automaticamente a resposta anterior já revelada.
FAQCSS
indice
O qu • signnca o .,g1;1 CSS?
2. Qual é a fih•lidade d.,; C:iS?
3 Por ~tl\l de,oo usar CSS'I
~ Ow1~a.,.:1:111i•g~n~dQ """' CSS?
5 As C$S <!$hÍo d• • :ordo corn •s Web Sla ~daids?
G O 111 ' e ••9.'• CSS 7
7 Como e 3c~.o uma 1e9rif CSS t
8 Ou:i1e ~aracme~ ~~o permílido~ cm CSS'
9. /\e sinmo CSS & ~911~i'IOI 3 m~10hcUC;slm nu:;cuk>~?
10;. Potiso •otlua cornenl.a «os nu ~e.9ra; CSS?
..... CSS:
.invisível {display:none;}
. vi sive1-fina1 {
border:lpx solid #c30;
padding: Spx lOpx;
background:#ff9;
}
ol li a {
color:blue;
text-decorati on :none;
}
.cor-um{color:red;}
.cor-dois {color :blue; }
..,.. jQuery:
1. <script type="text/javascript">
2. $(document) .ready(function() {
3. S('dt, dd').addClass('invisivel');
4. S('ol').a~er('<P>Clique ern uma pergunta para visual izar a resposta</p>');
5. S('ol li a') . click(function() {
6. $(' dt' ) . css({display: 'nane'});
7. $(this).removeClass('cor-dois ') .addClass('cor-um');
8. S(this).parent().siblings().children().addClass('cor-dois ' );
9. var i dCl i cado = S(this) .attr('href ' );
10. S(idClicado +' + dd').siblings ( 'dd:visible').hide();
11. $(i dCl i cada) . s l i deOown(1500);
12. S(idClicado +' + dd').fadeln(2500).addClass('visivel-final');
13. S(idClicado +' + dd + dd ' ) .show() ;
14. }) ;
15 . }) ;
16. </scri pt>
.iJ [arquivo-9.1f.html]
Código comentado:
Unha(s) Descrição
Linha 3 lnsere a classe invisivel em todos os elementos dt (este elemento
contém a pergunta, logo acima na respos ta) e dd (texto da resposta
e link para índice logo abaixo da res posta).
Linha 4 Insere um parágrafo, logo após o índice, contendo um rcxro expli-
cativo do funcionamento da página.
Linha 5 O script entrará em ação quando se clicar o texto de uma pergunta.
Linha 6 Retira a pergunta anterior quando se revela uma nova resposta. Sem
esse mérodo, a cada resposta revelada, as perguntas logo acima dela
permanecerão no lugar, uma embaixo da outra. Experimente retirar
esra linha e navegar nas respostas.
Linha 7 Atribui a classe cor-um (vermelha) à pergunta clicada, com a finali-
dade de destacá-la. Remove a classe cor-dois (azul) se p resente no
elemento.
Lin ha 8 Seleciona todos os elementos a no ú1dice, que são irmãos do ele-
mento clicado, e aplica neles a classe para a cor azul, garanàndo
que somente a pergunta clicada será destacada na cor vermelha.
Para melhor entender a explicação para as linhas 7 a 9, considere
que o usuário realizou um segundo clique no link. Se quiser tentar
entender a lógica do script partindo do primeiro clique do usuário,
talvez tenha dificuldades para compreendê-la.
Linha 9 Armazenou-se em uma variável ova lor do atributo href do elemenco
a clicado (pcrgunca clicada).
Com a conclusão dessa quinta etapa, fin alizou-se a explicação dos fundam en-
tos básicos para revelar e esconder conreúdos de uma FAQ com o uso de jQuery.
Utilizou-se uma FAQ CSS como exemplo para desenvolver os códigos, mas os
conceitos se a plicam a qualquer tipo de conteúdo, incluindo menus e im agens. É
importante que você tenha entendido a lógica e o funcionamento de cada script
mostrado nessas cinco etapas.
Uma sol ução seria criar um container para a área da marcação HTivlL onde
será aplicado o scripr e fazer referência a esse container, como elemento-raiz para
todos os seleto res jQueql Observe os códigos a seguir.
..... HTML:
<div id="faq">
... H~L à aplicar jQuery
<ldiV> <!-- Fim do divlfaq -->
Marcação básica
Tal como fez para a FAQ, você uti lizará uma marcação HTML básica na qual
consta um total de quaa·o notícias. O script será desenvolvido de modo a ser
aplicável a qualquer número de notícias. Considere uma inserção d inâmica de
notícias.
A renderi zação da página básica de notícias, para a qual o scripr será desen-
volvido, é mostrado na figura 9.8.
.~I ·
Not icias
Í Notfcla~~-· - - - - · --- - - · - --··--
:1 Lo1"'1l ipsum dolor srt arn e-1, cons«l~tu• r acípi;,m~ elrl. t.Wrlll • l• lfenll,
punn: qúrs lauceret faucibus, arte auQ'lia: rn; Jesuad<t mj. id rhom-us
~ugue torem egfl f M
UI Wlí<iludiri S'OÓ~l~s PU!U'- Pha$9llu<l (iJtijrO (Q"1$, blindil - ·
1 COh\n"O!lJ UI. lh\pcnJ CI IJ1. ntbh SIJ"..l!CM~~e 9 Qlll((li. Ooncc
ullamco1per '"''"~ dotc r. Outs vllae lp•urr~.Maeten•s oapll>~s hend1ertl
dlam. Mort>I vartus. m~S!i;;- td pro!ium ac;cum~an, nunc. torom conq.uo
t boro, til ~• ls mod motu• t•btro ld nu I• Oui• pó~u e1 e oolo u d "1!li1
\dpt&t~ wneni tl9.. Su~pendi s: s;e f t dlJt at metus 8(J(~CM tr1ng1 11:a-
• C:U-.b1ru1ínterdum •uQU• a pede.
Notici a dois
UI •Olitiludin Jlld ~l i $ Puni$ Ph ~$~!tu i lll>ijr(> 1\1'1$, à lanClil !UI<,
cGh\rrooa UI, 1moctll' ct u1, nlbh Sus~tnGis~e P-01C1!11. Done<
... CSS:
1. <style type="text/ css" media="all ">
2. body {width :400px; font:12px/1.2 Aria.l, Hel vetica, sans-serif; margin: l Opx
auto O auto; padding:O; }
3. hl {width:41Spx; color:#c60; font-s i ze:20px; padding-left:Spx; border-
bottom:lpx sol i d #c60;}
.iJ [arquivo-9.2b.html]
Código comenrado:
llnha(s) Oescriçào
Linha 3 Analise este seletor por panes. O sinal estrela (*) identifica o
seletor universal, que enconLra rodos os elementos HTML É
o seu conhecido curinga. A sintaxe «:not (h2. tit) significa o se-
gu ince: todos os elementos menos os cabeçalhos h2 com a classe
t it. Então, .noticias ~ :not(h2 .t it) é um seletor composro que
seleciona tudo, dentro dos divs com a classe noticias , menos o
tírulo com a classe tit, e esconde hide(). Resu mindo : rodos os
conteúdos serão escondidos menos seus rftulos.
Linha 4 Seleciona os títulos das no tícias e insere dentro deles um link
denom inado "Saiha mais... " com a classe sm. O mérodo append()
insere marcação HTML em um conrainer existente. Esca linha
resu lca na seguinte marcação: <h2>Noticia xxx <br /><a href="#"
class .."sm">Saiba mais ... </a></h2> . Criou-se um link dentro
do títu lo da notícia. A renderização sem esrilização para essa
marcação far ia o texto do link ser renderizado ao lado do texro
do título e em fonte do tamanho e cor da do tímlo. Alreraram-
se a posição, a cor e o tamanho do link com declarações CSS
pa ra a classe sm. Link dentro de um cabeçalho? Uma agressão à
marcação em con fo rm idade com os padrões? Optou-se por essa
solução, propositadamente, com a fin alidade de alertar quanto à
escolha dos métodos jQuery. O scri pt em questão irá funcionar
sem problemas, mas aos olhos acentos de um desenvolvedor
consciente dos Padrões \Veb essa marcação seria reprovada. Ou
não? Excesso de preciosismo? Alguém poderia argumencar que
a marcação extra não aparece no código da página. Cabe a você
decidir o que fazer. Como sugestão, urili ze um outro método
jQuery no lugar de append(). O q ue você acha de after()?
Linha 5 Insira o link para fechar uma notícia aberta. A inserção se faz
dentro do div q ue contém a notícia logo em seu início prepend(),
pois se deseja o link em cima. Se tivesse usado append(), o link
teria ficado debaixo do div. Seria melhor embaixo? Ta lvez sim.
O leitor chegaria ao final da notícia e não haveria necessidade
de rolar de volta para cima com a finalidade de encontrar o link.
Utilizou-se prepend() com o objetivo de destacar a diferença para
append() .
Linha 6 Início da ação quando o usuário clica o link "Sa iba mais...".
Segunda etapa
O objetivo para esta segu nd a etapa é fornecer o trecho d o texto que inicia a
notícia com o li nk "Saiba Mais. ..".
Esta solução está sendo p roposta com a fi nalid ad e d e est udar o uso de intera-
ção e recuperação d e elementos d e a rrays. Veja a segu ir um maneira d e manipular
arrays com a biblioteca jQ ue r}~
· C
Notícias
Nohclaum
Te>)O da i:nme •• nolitla unm lpsum dolo• s~ amel tor~ctel!Je•
;_ · ~l~ISClll(l e'll [SOlb• m• l ~J
-------------------------------------1
• Noticia dois
. Tew d• S"!llrd.l n.:iitla UI solllutudln sodal:s purus Ph•s.ellus l1be111 j
: felis, bl.,.:fll no<, commodo ut. "''"'"'°'
tr., nibh. !Saiba ma"J 1
...... - . .. . .. • .. . . l
1
· Noticia tres 1
Para capturar o trecho de texto que irá aparecer inicialmente antes do link
"Saiba mais.. :: marque-o no HTML da pági na usa ndo o elemento neutro span. Tal
marcação é dispensável, pois você pode capturar o texto com jQuery. Essa opção
de captura é um exercício para você testar seu aprendizado.
lill> HTML:
<hl>Notícias</hl>
<dív class=''noticias">
<h2 cl ass="tít">Notícia um</h2>
<P><span>Texto da primeira notícia. Lorem ípsumdolor si t amet, consectetuer
adipiscíng el ít .</span>
Morbí eleífend, purus ... </p>
Efeitos em tabelas
275
276 jQuery • A Biblioteca do Programador JavaScript
Qua ntos desses elementos você usa na marcação de suas tabelas? A maioria
das rabeias encontradas na web usa os elemenros table, tr e t d. Se você é um
dos que usam somente esses três elementos, estud e e repense seus conceitos
de construção de tabelas. Não é do escopo desce livro aprofundar esse assu nto,
contudo, para as rabeias desce capítulo, será utilizada a marcação segundo as
Recomendações do W 3C.
Marcação básica
Veja a segu ir a marcação básica da tabela em questão. Antes de prosseguir co m
seus estudos, procure acompanha r com deta lhes a marcação HTML e esti lização,
com a finalid ade de facili tar o entendimento dos scripts desenvolvidos.
.... HTML:
1. <table id="horario">
2. <Caption>Viação Al fa - Horários</caption>
3. <thead>
4. <tr id="hori zontal"> <!-- li nha do cabeçal ho -->
5. <th>Dest i no</th>
6. <th scope="col ">Saída</th>
7. <th scope=" col ''>Chegada</th>
8. <th scope="col ''>Classe </th>
9. <th scope="col ">Tarifa </th>
10. <th scope=" co l ">Freqü ência</t h>
11. </tr>
12. </thead>
13. <tfoot>
14. <tr> <!-- linha do rodapé -->
15. <td colspan:"6">Válida para o periodo de 02/10/2008 a 30/11/ 2008.</ td>
16. </tr>
17. </tfoot>
18. <tbody>
19. <tr> <! -- primeira l i nha de dados da tabela -->
20 . <th scope=" row">Brusque</th>
21. <td>06:45</ td>
22. <td>14:30</ td>
23 . <td>Convencional</ td>
24. <td>RSS0,00</td>
25. <td>Di ári a</td>
26 . </ tr>
27. . .. marcação idêntica para quinze li nhas i ntermediárias da tabel a
28. <tr> <!-- última linha de dados da tabel a -->
29 . <th scope=" row">Xaxim</ th>
30. <td>07:00</td>
31. <td>14:00</t d>
32. <td>Executivo</td>
33. <td>RS165,00</td>
34. <td>Dom . </ td>
35. </ tr>
36. </tbody>
37. </t abl e>
.iJ [arquivo-10.3a.html]
Código comentado:
linha(s) Descrição
Lin ha 1 Atribu iu-se um identificador i d para a tabela cm questão.
Linha 2 Uso do elemento capt i on para fornece r uma descrição da na tu reza
da tabela. Em rabeias ma is complexas, essa descrição deverá ser
complementada com o uso do atribmo summary no elemenco tab l e.
O atributo summa ry desrina-se a informar a fina lidade d a tabela e
fornecer uma descrição de sua estrucura.
Linhas 3 e 12 O elemento thead destina-se a marcar as linhas que compõem o
cabeçalho da rabeia. Neste caso, a tabela contém uma linha de
cabeçalho. Esse elemento é <) seletor natural para o cabeçalho
da tabela.A maioria dos desenvolvedores não usa, erroneamente,
esse elemento.
Lin has 4 e 11 Elemento tr para marcação da linha de cabeçalho.
Linhas 5 a 10 Marcação das células do cabeçalho com o uso do elemento t h. A
maioria dos desenvolvedores usa, erroneamente, o elemento td
para marcar células de cabeçalho. Note a presença do atributo
scope para fins de acessibilidade.
.... CSS:
<Style t ype="text/css" media="al l">
body {
width :600px ;
font :80%/l.2 Arial, Helvetica, sans-serif;
margi n:30px auto;
padding :O;
color:/1666 ;
}
table {
width :SSOpx;
border-collapse :collapse;
border:2px solid #999;
margin:O auto;
}
caption {
text-align:right;
margin-bottom:0.3em ;
border-bottom:lpx sol id #333;
padding-right:0 .3em;
t head t r th {
text-align:center;
border-bottom:2px sol id #999;
border-le~ : 2px solid #999;
}
tr td , t r th {
padding:lpx Spx ;
text-align:l eft ;
font-size:0 .9em ;
border:lpx dotted #333;
}
tfoot tr td {
text-align:center;
border- top:2px solid #999;
}
</styl e>
.iJ [arquivo-10.3b.html)
Trata-se de uma fo lha de estilos míni ma destinada a centra lizar a pági na e
inserir apresentação básica com a finalidade exclusiva de faci li tar a visualização
do exem plo.
Zebra par-ímpar
É a rradicional estilização de linhas pares com uma dererminada cor de fundo e
impares com outra cor. O primeiro efeito consiste em simplesmente atribuir uma
cor de fundo a uma das linhas (par ou ímpar) e deixar a cor de fundo da outra
com a cor-padrão do ftmdo da tabela .
Na figura 103, veja o efeito fin al de uma estilização zebra par-ímpar, obtida
com jQuery; com uma d as cores sendo a cor-padrão da tabela.
~~~~~~~~~~~~~~~~~~~~~~~~
Assim, se você escrever o seletor $(' table#horario tbody tr :odd ' ), esrará selecio-
nando cedas as linhas ímpares contidas no corpo da rabeia cujo id é horario.
ij [arquivo·10.4a.html]
Por exemplo:
Equação Seleção
ln Seleciona as ocorrências 2x0 = O, 2xl = 2, 2x2 = 4, 2x3 = 6, .. ., ou
seja, ocorrências pares.
2n + l Ocor rências 2x0 + 1 = 1, 2xl + 1 = 3, 2x2 + 1 = 5, 2x3 + 1 = 7,. .., ou
seja, ocorrências ímpares.
3n + l Ocorrências 3x0 + l = l, 3xl + 1 = 4,3x2 + l = 7, 3x3 + l = 10,. .., ou
seja, ocorrências d e três em três.
5n -1 Ocorrências 5x0 - 1 = -1, 5xl - l = 4, 5x2 - 1 = 9, 5x3 - 1 = 14,. .., ou
seja, ocorrências de cinco em cinco.
Aqui, a primeira ocorrência resu lLOu em um número negativo. Nú-
meros negativos como resultados da equação são ignorados para
efeico de seleção.
f: fácil concluir que o uso de uma equação para selecionar ocorrências aumenta
muito as possibilidades de seleção e combinações.
Efeitos zebra mais compl e,xos e diferentes dos escud ados até aqui podem
requerer o uso de uma equação combinada com os métodos prev() ou next()
destinad os a selecionar elementos ames e depois, respectivamente, do elemento
seleciona do. Por exemplo:
Seletor Seleção
$('tr :nth-child(4) Seleciona a quarta lin ha da coluna.
$(' tr:nth-chi ld(4).prev() Seleciona a terceira linha d a coluna.
$(' t r :nth-chi ld(4). next() Seleciona a quinta linha da coluna.
Progressão aritmética
Séries de nlimeros n as quais cada núm ero é igual a seu preced ente mais um valor
consta nte são deno minad as d e progressão aritmética (PA). J\ m atem ática ensina
que o p rimei ro termo de uma PA deno mina-se r.c rmo inicial, o valor constante é
a razão da PA é a fórmula do term o gera l é:
an = (n - l) ~ r + al
Assim, com o uso da fórmu la das PAs, há uma forma mais genérica d e seleção
sem a necessid ade de emp rego dos métodos prev() e next(), e o scripc em questão
tem a segu inte sintaxe:
<script type="text/javasc ri pt">
$(document) .ready(function() {
S('table#horario tbody tr:nth-child(4n-l) ' ).addClass('cor_um');
S('table#horario tbody tr:nth-chi l d(4n)').addClass (' cor_um');
} );
</script>
.iJ [arquívo-10.4c.html]
E os seletores são:
Cor Seletor
cor-um (n-1Y3 + 1 => 3n-3+ 1 => 3n-2.
cor-dois (n-1)'3 + 2 => 3 n-3+2 => 3n-l.
cor-tres (n-1) •3 + 3 => 3n-3+3 => 3n.
iJ [arquivo-10.4d.html)
Matcnal cori 01re1~os au·ora1s
Material com direitos autorais
Capítulo 10 • Efeitos em tabelas 289
Uma outra solução para obter esse efeito faz uso dos métodos prevO e nextO
para selecionar linhas antes e depois da linha selecionada, conforme se m en cio-
n ou anteriormente.
Observe que as linhas 2, 8 e 14 são as lin has centrais de cada grupo de a-ês
linhas que têm a cor de fundo definida pela classe cor-um. O seletor que adiciona
a classe nessas linhas centrais é:
S(' tabl e#horari o tbody t r :nth-chi l d(6n-4) ') .addClass(' cor_um' );
D e modo semelhante, para as linbas cen trais que têm a cor d e fundo defin ida
pela classe cor-dois, o seletor é:
$( 'table#horario tbody tr:nth-child(6n-l) ' ).addClass('cor_dois');
Use a tabela desenvolvida no arquivo-10.4b. htm1 (Figura 10.4) para obter esse
efeito. O script é mostrado a seguir:
1. <script type="text/javascript">
2. S(document) . ready(function() {
3. S('table#horario tbody tr:odd').addClass('impar');
4. S( 'table#horario tbody tr:even').addC1ass( ' par');
5. S('table#horario tbody tr') .hover(
6. function() {
7. S(this) .addClass(' destacar ');
8. },
9. function() {
10. S(this). removeC1ass('destacar') ;
11. }
12. );
13. }) ;
14. </scri pt>
.iJ [arquivo-1O.Sa.html]
Código comentado:
linha(s) Descrição
Linhas 3 e 4 Efeico zebra estudado anreriormente.
Linha 5 Atrelando o efeito hover() a cada uma das célu las da rabeia.
Linhas 6 a 8 Função a ser executada quando o ponrei rodo mo use for passado
sobre a linha.
Linha 7 Adiciona a classe destacar à linha que recebeu o ponteiro do
mo use.
Linhas 9e11 Função a ser execurada quando o ponteiro do mouse abandonar
a linha.
Linha 10 Remove a classe destacar da linha da qual o ponteiro do mousc
fo i retirado.
Linha 12 Fim do mérodohover().
Destacar colunas
Agora, você estudará uma técnica para destaca r as colunas da rabeia. Informará
ao usuário que é preciso que ele clique uma determinada célula d e cabeçalho
para destacar a coluna correspondeme.
Observe, na figura 10.9, o efeito final para desracar a coluna denominada Classe
após o usuário ter clicado a sua célula de cabeçalho.
lC.3Xbt1
Use a rabeia desenvolvida no arqui vo-10. 4b.html (Figura 10.4) para exemplificar
esse efeito. As regras de estilo para a classe destacar são idênticas às adotadas no
exemplo anterior. O scripc é mostrado a segui r:
1. <scri pt type="text/javascri pt">
2. S(document) . ready(function() {
3. S( 'table#horario tbody tr:odd') .addClass('impar');
4. S(' table#horario tbody t r:even') .addClass( 'par ' );
S. S('table#horario trihorizontal th ' ).not('th:first-child')
6. .prepend( ' <span>♦ </ span>').css('cursor', 'pointer');
7. S('table#horario tr#horizontal th') .each(function(i) {
8. var n = i - 1;
9. S(this) .cl ick(function() {
10. $ (' td') . removeCl ass ('destacar ');
11 . S(this).parents('thead')
12 . .siblings('tbody')
13. .children( ' tr') .each(function() {
14 . S(this) .children('td:eq(' + n + ')') .addClass('destacar') ;
15. }) i
16. }) ;
17. }) ;
18. });
19. </ script>
.iJ [arquivo-10.Sb.html)
.... CSS:
.destacar-um {/* esti liza a célula que acaba de receber o pontei ro do mouse */
background :#444;
color:#fff;
cursor: pointer;
}
.tooltip {/* esti liza a caixi nha da dica*/
width :180px;
paddi ng:2px 4px;
margin-top:25px;
border:lpx solid #000;
color:#333;
background :#bfe2d8;
positi on:absol ute;
}
.... jQuery:
1. <script type="text/javasc ript">
2. S(document) . ready(f unct ion() {
3. $('table#horario tbody tr:odd') .addClass('impar') ;
4. $(' table#horario tbody tr:even ' ) .addClass( ' par ' );
5. S('table#horario trihorizontal th ' ).each(function(i) {
6. var n = i + 1;
7. var nomeColuna = S(this).text();
8. S( 'table#horario tbody tr td:nth-child( ' + n + ')')
9. .hover(functi on() {
10. S(this).addClass('destacar-um');
11. var textoCelula = S(this).text();
12. S('<div class:"tooltip">OilP! para destacar todas as linhas para<br />
13. <h> ' + nomeí.olllla + ': ' + textxic:elula + ' </b></diV>') .preperdTo(this);
14 . S(this).click(
15 function() {
16 S('table#horario tbody tr').removeClass('destacar') ;
17 . S(' .tooltip'). remove();
18 . S('table#horario tbody tr:contains(' + textoCel ula + ')')
.addClass('destacar');
19 . });
20. },
21. function() {
22 . S(this). re1110veClass(' destacar-um');
23. $(' .tooltip').remove();
Aqui o script procura codas as linhas da rnbela que contenham um texto igua l
ao texto da célula clica da e destaca a linha. Aqui o script é falho porque deveri a
procurar não por linhas que concenb am o texto, mas por células da coluna clicada
que conten ham o texto para posteriormente selecionar as linhas d e tais célu las e
destacá-las. Escreva novamente a linha 18, com a correção proposta:
18. S('tabl e#horario tbody tr td:nth-chi ld(' + n + '):contains(' + te.xtoCelula + ')')
. parents(' tr ') . addClass( 'destacar '):
Note que se criaram duas lin has de título para as cidades do norte e sul, lin has
estas marcadas com célula de cabeçalho. O acréscimo na marcação da tabela,
além das alterações introduzidas nas linhas de dados, é mostrado a seguir.
.... HTML:
<tbody>
<tr cl ass="sub">
<th colspan="6">Cidades no NORTE do Estado de Santa Catari na</ th>
</tr>
... linhas da tabela . ..
<tr cl ass="sub">
<th colspan="6">Cidades no SUL do Estado de Santa Catarina</th>
</tr>
. .. linhas da tabela . ..
<tbody>
Note, na figu ra 10.13, que ao lado dos dois novos cabeçalhos há o sinal de
menos(-) indicando o link para fechar. Esse sinal é u m<1 imagem ali posicionada
com o uso do script para não aparecer qua ndo javaScript estiver desabilitado
no navegador.
10. .click(function(event) {
11. event .preventDefaul t ();
12. if ( (S (this) .attr('src')) == ' menos.gif' ) {
13. S(this).attr( ' src', 'mais.gif')
14. .parents()
15. .sibl i ngs( 'tr').hide();
16. } else {
17. $(this). attr(' src', ' menos .gif ' )
18. . parents() . si bli ngs(' t r ' ) . show();
19. };
20. }) ;
21. }) ;
22. </se ri pt>
.i) [arquivo-10.6a.html]
Advertência
Como você constatou nos exemplos para revelar e escondei: conteúdos de uma
rabeia, utilizaram-se os métodos hide() e show() para os efeitos. Examinando o
funcionamento dos arquivos de exemplos, calvez você seja tentado a melhorar
o script com o LISO de slideUp(), slideDovm(), fadeOut() , fadeln() , animate () ou mesmo
hide(velocidade), show(velocidade).
lnfelizmente, tais métodos não são interpretados de modo correto por rodos
os navegadores, quando se trata de tabelas, e usá-los, nestes casos, poderá causar
e feitos estranhos e indesejados. Porranro, use somenre os métodos hide() e show()
para esse efeiro quando se craca de aplicá-lo cm rabeias. Observe, na figura 10.15,
um desses efeitos esrranhos referidos.
Efeitos em formulários
Neste capítulo, serão abordad os alguns efeitos d a biblioteca j Q uery para emprego
em formulários. É necessá rio extremo cu id ado ao se projetar scripts rod ando
n o lad o do cliente, co mo são os scripts jQuery, quando se trata de adicionar
funcio nalid ad es a form ulários. Ao conrrário da maio ria dos co nteúd os de u ma
página web, formulários d estinam-se a possib ilitar co leta de d ados do usuário
e envio d eles ao servidor.
307
308 jQuery • A Biblioteca do Programador JavaScript
do texto para o placeholdcr é estilizada cm uma cor m ais clara que a prevista para
a fonte do texto entrado pelo usuário. Em um campo de formu lário contendo um
placeholder, tão logo o usuário entre no campo com o objetivo d e preenchê-lo, o
texto do placeholder é automaticamente reri rado.
Ausca ;~'"""
'--------
.i) [arquivo-11.2a.html)
Código comentado:
Unha(s) Descrição
Linha 3 Armazenou-se em uma variável o rótulo do campo e, com o uso
d o método remove (), retirou-se o ró tulo da marcação. É imporcante
notar que o método remove() retira o elemento do DOM, mas per-
mite acessar seus conteúdos normalmente. Ao contrário, o método
empty() retira os conteúdos do elemento e conser va o elemento no
DOM. Este é um conceito importante que diferencia um método
d o outro e se você não csriver atemo à diferença, poderá empregar
um o u outro de forma equivocada e não entender o porquê de seu
scripc não foncionar. Caso utilizasse empty(), o script falharia.
Linha 4 Acessa o campo de busca e a este a tribui um valor igual ao texto do
rótulo, armazenado anteriormente na variável textoDefau l t. A seguir,
cria uma declaração CSS para o texto, defin indo para ele uma cor
cinza-claro. O método val O manipula o atributo HTML val ue. De-
clarar val ('val or') equ ivale a escrever na marcação val ue="valor" .
Linha 5 Define-se uma função a ser execu tada quando o campo de buse<1
recebe o foco.
Linha 6 Testa o valor do campo de busca contra o textoOefaul t . No carrega-
mento da página, o teste resulta verdadeiro, pois ao campo d e busca
se atribu iu o textoOefaul t conforme definido na linha 4.
Linha 7 Tendo recebido o foco e a condição sendo verdadeira, remove-se a
reg ra CSS para o texto nocampo,bem como o próprio texro,deixando
o campo limpo para receber a entrada de d ado do usuá rio.
Linha 9 Aqu i, define-se uma função a ser executada quando o foco é retirado
d o campo.
Linha 10 Testa para saber o que aconteceu com o campo após ter recebido
o foco. Duas são as possibil idades: o usuário preencheu e saiu ou
d eixou em branco e sai u.
Lin ha li Se deixou em branco e saiu, repõe o textoOefault no campo. Caso
contrário, deixa o campo com o dado preenchido para posterior
validação.
Noce que o rótulo permanece em seu lugar e o rexro "pa lavra chave" foi usad o
como p laceholder.
Primeira solução
Inserir o atributo titl e no elemento label da marcação e u sar o valor desse atri-
buto como placeholder. Observe o acréscimo na marcação HTML e a alteração
na linha 3 do script anterio r.
• HTlvlL:
<label for="busca" title="palavra chave">Busca</labeh
• jQuery:
Unha Descrição
Linha 3 Nesca solução, urilizou-se o método attr('title ' ) para acessar o valor
do atributo title do elemento label e atribuí-lo à variável textoDefault.
Todo o restante do script permanece como na solução anterior.
Segunda solução
A segunda solução consiste em não introduzir alteração n a marcação, criand o
o texto do placeho lder via script. Nesse caso, bastaria alterar a linha 3 conforme
mostrado a seguir.
var textoDefault = ' palavra chave';
4. .css({display:'none ' ,
5. border: ' l px solid #add6ef',
6. paddi ng : '2 px 4px ' ,
7. background:'#d6e2eS',
8. margi nlef t:'lOpx'
9. }) ;
10. S(' .di ca ' ). focus(fonction() {
11. S(thi s).next(). fadeln(1500) ;
12. }) .bl ur(funct i on() {
13. S(thi s).next(). fadeOut(lSOO);
14. }) ;
15. }) ;
16. </se ri pt>
~ [arquivo-11.3a.html]
Código comentado:
Linha(s) Descrição
Linha 3 Utilizou-se o seletor do ripo E + F para selecionar os elementos span
imediara mente após o elemento com a classedi ca. Veja na marcação
que são os elementos span que contêm o tcxco da dica. Seletores do
ripo E + F casam com o elemento F que vem imediaramcnrc após
um elemenco E.
Linhas 4 a 9 Regras CSS destinadas a estilizar a caixa contendo a dica e a escon-
dê-la quando a página for carregada. Lembre-se de que um im pulso
inicial pode levar o desenvolvedor a defin ir essas regras de estilo
na fol ha de estilos da página. Você pode adotar essa solução sem
problemas, desde que conserve a declaração di sp1ay : none no script,
não a transferindo para as CSS da página, pois assim fazendo, você
bloqueia o acesso <'is dicas quando j avaScript não estiver disponível
no navegador.
Linha 10 Define uma função a ser executada quando o campo recebe o
foco.
Linha li Revela a dica que estava oculta usando o efeito fadei n() .
Linha U Define uma função a ser execu rada quando o campo perde o foco.
Linha JJ Esconde a d ica usando o efeito fadeOut().
11 .4 Desabilitar campos
Para exemplificar o efeito de desabilita r campos de um formulário, tome como
base um for mulário composto de três áreas dis rinras,cada uma delas des rinadas
a um fabricante d e automóvel, selecionável por um ca m po de formulário do tipo
botão radio (radio). Para cada fabricante é ap resentada uma série de campos de
formu lário do tipo caixa de seleção (checkbox) que perm ice ao usuá rio escolher
vários modelos de automóvel do fabricante selecionado. A marcação HTML
(omitiram-se alguns checkboxes para reduzir o camanho do código) é mostrada
a seguir:
<form action="" method="get" id="formul ario">
<fieldset>
<l egend>5elecione um fabricante e escol ha os modelos de sua preferência .</legend>
<di v cl ass="mudar">
<l abel class="fabricant e"><i nput type="radio" name="fabricante" />
Mercedes Benz</label>
<l abel><input type="checkbox" />Classe A - Hacthback</label>
<l abel><i nput type="checkbox" />Classe B - MPV</label>
... mais checkbox .. .
</div>
<div class="mudar">
<label cl ass="fabricant e"><input type,."radio" name="fabricant e" />Ferrari</labeh
<l abel><input type="checkbox" />599 GTB</label>
<1abe l><i nput type="checkbox" />Ca1i forni a 2009</label>
. .. mais checkbox ...
</div>
<di v cl ass="mudar">
<label class="fabricante"><input type="radio" narne="fabricante" />Volv0</label>
<label><i nput type="checkbox" />540</labeh
<label><i nput type.."checkbox" />560</labeh
... mais checkbox ...
</div>
</fie 1dset>
</form>
~ [arquivo~11.4a.html]
Observe, na figura 11.4, a renderização do formulário proposm.
0 ~ttrce<Jn llellr
ov..111..
Os.ia 0$511
Ehro OXCi'O
Ocm 0070
Não serão tecidas considerações sobre técn icas ou vaUdações para evitar uma
seleção ilegal como a mostrada, pois o objeüvo é estuda r a técn ica de desabilitar
campos de formulário. Concudo, vale lembrar que esta é uma solução que não
deve esrnr isolada, pois caso javaScript esteja indisponível no navegador, o script
falhará. É recomend<ivel que seja usada como alternativa si mplifi cada para outro
mecanismo, para desabilitar os campos.
~ [arquivo-11.4b.html)
Código comentado:
Linha(s) Descrição
Linha 3 Inicia-se desabilitando rodos os checkboxes, para evitar que o usuário
escolha os modelos sem ter escolhido um fabricante. Note o uso da
pseudoclasse :checkbox no seletor.
Linha 4 Define-se uma função a ser executada quando o usuário clica um
dos botões radio para a escolha do fabr icante. Note o uso da pseu-
doclasse :radio no seletor.
Linha 5 Esra linha contém uma ação a ser executada somente no caso de
o usuário ter escolhido um fabricante, selecionado os modelos e
resolvido alterar a escolha do fabricante. Por que alguém faria isso?
Realmente, não faz muito sentido, mas ao projerar formulários,
procure simular qualquer situação de preenchimento e inreração
do usuário, por mais absurda que pareça. Ocorrendo mi situação, o
script precisa limpar as seleções feitas antes de desabilitar as esco-
lhas. É essa a ação contida nesta lin ha: seleciona todos os checkboxes,
limpa os selecionados e habilita-os para nova escolha.
Lin ha 6 Encontra todos os elcmencos div .mudar, que são o elememo-pai dos
conteúdos dos blocos de fabricances que (no nosso caso são dois)
não sejam o fabricante selecionado pelo usuário.
Linha 7 Encontra todos os checkboxes que não sejam os do fabricanre sele-
cionado pelo usuário.
Lin ha 8 Desabilita os checkboxes encontrados.
tõ'-4'GT6 z<l)GTSWB
f'43G Sr.Jdl!r1a rt2 Sc•ohtll•
f:<X E\\lllllton P4.,8
Agora não é mais possível uma seleção inválida como aquela moscrada na
figura 11.4.
11 .5 Revelar campos
Parn esta so lução, a proposca é ;1presencar, inicialmence, ao usuário somente a
opção de escolha do fabrica nte. Feita a opção, os checkboxes para a escolha dos
modelos serão revelados.
A seguir, o script para obter o efeito proposm:
1. <seri pt type="text/javasc ri pt ">
2. $(document).ready(function() {
3. S(':checkbox').parents('label' ) .hide() ;
4. $( ' : radio') .wrap('<a href="#"></a>');
5. S( ':radio ' ).parents('label').click(function() {
6. $(this) .si bli ngs() .fadei n(1500);
7. $(thi s).parent().sibl i ngs(' .mudar ')
8. .children('label :not(.fabricante) ' )
9. .slideUp().find( ': checked').each(function() {
10. S(this) .removeAttr('checked ' );
11. }) ;
12. });
13 . }) ;
14. </scri pt>
i) [arquivo-11.Sa.html]
0 M~1c11~tes 11~111
0 c õ"$~ A H.orli;~rk [k1~$<1' fl . MP'/ O n•tttfl e &.1ã
El CiaHe SLK f«iaósw El Cl$S$f. l::L • C.ouv~ 0Çlatto CU< \;OLrP~
o Cl~8&11 CU< • l"allffOl KI O Cl~•sa w. 5põ~ tJ11u11 :i'.lCl>~5A R. Cm•~o->er
O vcltvn
Oc1-•c sw.r
0 C~!1~ CU· Covr•ê
0 Ct..sa P. - Crus'""~
··Z!~·
0Seleci•ma 1 1odos
~ [arquivo-11.7a.html]
Código comentado:
Linha(s) Descrição
Linha 2 Define a função de validação a ser executada quando o usuário clica
o botão "Enviar''.
Linha 3 Usa o método size() para armazenar a quantidade de modelos de
au rornóvel selecionados pelo usuário.
Lin ha 4 Testa a quantidade selecionada e insere na tela a caixa de alerta
javaScript se a condição for verdadeira.
- Imagens
Neste capítu lo, serão estudadas as técnicas de manipulação de imagens com o uso
da biblioteca jQuery. Serão abordados alguns efeitos simples desci nados a ampliar
imagens e também a construção de galerias de imagens. O objetivo principal será
a mplia r o conhecimento das técnicas gerai s de criação jQuery. Exisrem vá rios
plug-ins para manipulação de imagens e desenvolvi mento de galerias e slide-show
de imagens.Ao término deste capítu lo, você, além de atingir o objetivo proposto,
estará em condições de desenvolver scripts simples para ampliação de imagens e
construção de galerias de imagens com recursos razoáveis. Havendo necessidade
de inserir em seu projeto uma galeria de imagens com recursos avançados, con-
sulte o repositório de plug-ins em http://plugi ns.jquery.com/.
12.1 Introdução
Inserir imagens em uma página web é um recurso empregado na maioria dos
sites. Imagem em páginas web, além de transmitir informação, torna a leitura
da página mais agradável. A internet foi inventada por Tim Berners-lee com o
propósito inicial de ser um meio de troca de inform ações entre cientistas. Os
documentos de na cu reza científica, em geral, são criados com o uso de texto puro,
sem necessidade de elaborados recursos de apresentação. Na proposta inicial de
Tim, não escava prevista a inserção de imagens nem de nenhum tipo de mídia
ou objeto nos documentos a transitar pela internet.
325
326 jQuery • A Biblioteca do Programador JavaScript
12.1.1.1Imagensdecorativas
Como o próprio n o me sugere, são aquelas des tinadas a melhorar o efeito visual
da página, não tendo nenhuma influência ou relação com a transmissão da in-
formação. Se forem retiradas da página, não causarão outro impacto que não o
de tornar mais limitada a apresentação visual. Estas não merecem atenção sob
o pont0 de vista da acessibilidade e devem ser marcadas com o uso do acriburo
alt vazio, conforme mostrado a segui r:
<img src="cd.jpg" alt="" />
Atributo alt
Para imagens cujo equiva lente textual seja um texto cu rto, sem necessidade d e
descrição detalhada, coloca-se o texto co mo valor do acriburo alt, conform e o
exemplo mostrado a seguir:
<img src="cd.jpg" alt="Capa do CD dos Beatl es" />
Atributo longdesc
Para imagens que requerem como equivalente texrual um texto explicativo longo,
usa-se o atriburo longdesc (long description, qu e significa descrição longa), con-
forme o exemplo mostrado a seguir:
<img src="cd.jpg" alt="Capa do CD dos Beatles" longdesc="cd_beatles.html" />
Ou usar um outro seletor mais específico que tenha como alvo somente as
imagens que são link, como mostrado a seguir:
a img {border:none;}
<div id="galeria">
<a href="l.jpg"><img src="l.jpg" alt="Descrição da foto" wi dth="120" height="90"
class="foto" /></a>
</diV>
<span>Clique para ampliar</span>
Trara-se de um thumbnail inserido como link em uma pági na, cendo logo
abaixo um texto com uma dica instruindo o usuário a clicá-lo para visualizar a
imagem ampliada.A imagem encontra-se no arquivo 1.jpg, no seu tamanho narn-
ral, e será uó lizada para obter o chumbnail forçando a redução de suas dimensões
com o uso dos atributos vri dth e height no elemento de marcação img. Assim sendo,
não será necessário gerar duas imagens, uma para o thumbna il e outra em seu
tamanho natural. Considere que não será preciso gerar um rhumbnail persona-
lizado, como aqueles constituídos por uma porção da imagem ampliada.
Note que se uàlizou como c<.)nrainer para a imagem um div com sua respectiva
id denominada galeria. Esse container é perfeitamente dispensável mas foi ali
inserido tendo em vista as próximas etapas deste escudo nas quais se estenderá
essa marcação e o container será indispensável.
Primeira etapa
Em uma primeira etapa, você irá estudar um script simp les para obrer a amplia-
ção da imagem. Complemenrarmenre, com a fina lidade de mostrar um a técnica
de manipulação de cexcos existentes em páginas, será a lterada a maneira de
apresentação da dica para cliC'ilí a imagem.
Na figura 12.2 mosrramos o efeito final com a dica posicionada sobre a imagem.
~~~~~~~~~~~~~~~~~~~~~~~~~~---~
Ú Livro jQuery do Maujor 1 Imagens e &ale rias de fotos - Mo;illla Firefox ~(g](8]
..... CSS:
<style type="text/ css" media="all"> . foto {border:none;}
#gal eria {Yridth: 500px; position:relative;}
.abre- fecha { /~ esta classe foi inserida pelo script no el emento span que marca a
dica ao usuár io ~;
position :absolute;
background:#add6ef;
l eft:O;
top: O;
text-align:center;
font-si ze:llpx;
cursor:pointer;
}
</Styl e>
..,.. jQuery:
1. <scri pt type="text/ javascript">
2. S(document) .ready(function() {
3. var af = S( '#galeri a + span ' ) .addClass('abre-fecha' )
4. .css({opacity:0 .6, wi dth:l20});
5. S('#galeria') .prepend(af)
6. .click(functi on(event) {
7. event.preventDefault();
8. if ($(' .foto ' ).attr( 'width') > 120) {
9. S(' . foto ' ).attr({Yridth: l 20, height :90}) ;
10. S(' .abre- fecha') . text('Clique para ampliar')
11. . css( {width : S(' . foto' ) . attr('Yri dth ') }) ;
12. } else {
13. S(' .foto ' ).attr({wi dth:SOO, height:375});
14 . S(' .abre-fecha').text ('Clique para fecha r' )
15 . . css( {wi dth: S(' . foto ' ). attr('Yri dt h' )}) ;
16. };
17. }) ;
18. }) ;
19 . </ scri pt>
.iJ [arquivo-12.2a.html)
Código comentado:
linha(s) Descrição
Linhas 3 e 4 Armazeno u-se em uma variável um o bjeto jQue ry que é descrito
assim: selecio na-se o ele me nto span que se segue ao div#ga1e ria (é
o ele me nto da ma rcação que conté m a dica ao usuá rio - C liqu e
para am plia r - e a ele se a tribui uma classe de no minada ab re-
fecha) (veja regras d e estilo) e, a segu ir, d efine-se, pa ra a dica,
u ma o pacidade e uma largu ra igual à la rgura do thu m bnail.
Segunda etapa
Como você deve ter observado, o script desenvolvido na etapa anterior caL1sa a
ampliação e fechamento da image m d e forma abrupta. Nesta segunda etapa, você
irá usar o m é todo ani mateO para melhorar essas rransições. Observe os acréscimos
inrroduzidos no scripr anrerior:
1. <Se ri pt type="text/ j avas eri pt">
2. S(document).ready(function() {
3. var af = S('#galeria + span ' ).addCl ass('abre-fe cha ' )
4. . css({opaci t y: O. 6, wi dth: 120});
5. S('#galeria').prepend(af)
6. .click(function(event) {
7. event. preventOefault();
8. S(' .abre- fecha').hide();
9. if (S('. foto ') .attr('vridth' ) > 120) {
Quarta etapa
Considere que a an imação obtida na etapa anterior satisfaz seus propósitos e,
nesta etapa, você focará outro aspecto da ampliação da imagem. Note que se
utili zou uma imagem gravada com as dimensões d e 500 x 375px e, a partir de la,
construiu-se um thum bnail com o uso dos atributos viidth e height no elemento
img constante da marcação. Isco àrou íle,xibilidad e do script, pois se em outro
local do sire você precisar usar um rhumbnai l e/ ou imagem ampliad a com outras
dimensões, rerá de reescrever a marcação e o script.
No seu scripc, cri e variáveis para armazenar as dimensões. Com isso, basca
mud ar o valor d as variáveis de acordo com a necessidade. As alterações no script
anterior são mostrad as a seguir:
1. <scri pt type="text/javasc ri pt">
2. S(document) . ready(function() {
3. var larguraFoto = 800 ; var alturaFoto = 600 ;
4. var larguraMi ni = 200 ; var altur~ini = 150;
S. S(' . foto').attr({width :larguraMini, height :alturaf.!ini});
var af = S('#gal eria + span ' ).addCl ass('abre-fecha')
.css({opacity:0 .6, wi dth :larguraMini });
5. S('#galeria') .prepend(af)
6. .click(function(event) {
7. event .preventDefault();
8. $(' .abre-fecha ' ) .hide() ;
9. if ($(' .foto ' ).attr( 'width') > larguraMini ) {
10. S(' .foto' ).animate(
11. {width: larguraMini , hei ght :alturaf.!ini, opaci ty: O. 2},
1500, function() {
~ [arquivo-12.2d.html]
Quinta etapa
Para esta etapa, você irá estudar uma solução de ampliação de imagem que simula
o efeito ligh rbox. Esse efeito consiste em posicionar a imagem ampliada no centro
da tela sobre uma máscara na cor preta transparente ocu pando roda a tela.
Para esta etapa, uti lize uma marcação HTM L e CSS conforme os códigos
mostrados a seguir.
... CSS:
1. <style type="text/css" media="all ">
2. body {margin: 20px O; paddi ng: O; background:#d6e2e5;}
3. #tudo {width: 600px; font : 8~/l.2 Arial, Helvetica , sans-serif ; margin :Oauto;
paddi ng :O 20px; col or :#666; background :#fff; border :l px dotted #999;}
4. .foto{ border:none; margin:lOpx ;}
S. .left {float: left ;}
6. .right {float:right;}
Linha(s) Descrição(cont.)
Linh a 4 Define uma função a ser executad a quando o usuário clica uma
imagem da galeria.
Linh a 5 lmpedeque o navegador siga o link para o arquivo da imagem.Afinal,
você é que irá definir como a imagem será ampliada, não desejando
s implesmence u m Link para o arquivo da imagem.
Lin ha 6 Esconde roda a galeria.
Linha 7 Testa para saber se o clique foi em um thumbnaíl o u em uma imagem
ampliada. A condição de teste é para saber se a larg ura da imagem é
maior que a do tbumbnail (a largu ra é de lOOpx no exemplo). Neste
caso, a imagem clicada foi a ampliada. Quando a página é carrega-
da, o primeiro clique será obrigaroriamenre em um tb u mbnail e o
res ce resu lca falso com o scripr indo para a linha li. Supond o que
uma imagem ampliada foi aberca eo usuário realiza um clique para
fechá- la, o script segue para n linha 8.
Linha 8 Reduz as dimensões da imagem ampliada para as dimensões do
thumbnail, para recolocá-la na galeria.
Lin ha 9 Mostra a galeria.
Linha 10 Resta belece o texto da dica para o usuário.
Lin ha 12 Aqui começa a ação logo que a página é carregad a e o usuário cl ica
um tbum.bnail. Amplia a imagem clicada, a lrcnmd o seus arributos
para hll'gum e a ltura, e revela usando o efeito sl i deOown() .
Linha 13 Altera o texto da dica ao usuário.
Fotos de Brasília
linha(s) Descrição
Linha 11 Reduz a opacidade da imagem ampliada para 30%.
Linha 12 Coloca a imagem ampliada dentro da tela.
Lin ha 13 Anima a imagem ampliada aumenrandosua opacidadede30% para
100% em um interva lo de tempo de 2 segundos.
12.4 Slide-show
Nesta forma de apresentação, a galeria de imagens é construída sem auxílio de
rhumbnails, sendo ap resentada inicialmente uma imagem em seu tamanho na-
tura l qu e será substituída pela seguinte com o uso de um efeito de transição. O
método de substituição das imagens pode ser automático ou por interação do
usuário com um mecanismo de navegação.
Primeira etapa
esta etapa, você irá retirar os rhumbnails e apresentar inicialmente na página
uma das imagens em seu tamanho ampliado. Uma dica ao usuário irá instruí-lo
a clicar a imagem apresentada. A cada clique, haverá a troca da imagem em uma
apresentação do tipo slide-shovv.
A marcação HT:N1L e as CSS são as da página básica e o script para essa pro-
posta é mostrado a segu ir:
1. <script type="text/javascript">
2. S(document) . ready(function() {
3. $(' .abre-fecha').text( ' Galeria : cl i que a foto');
4. $('#galeria')
S. .css({
6. position:'relative' ,
7. width: '500px',
8. height : '37Spx'
9. }) ;
10. $('.foto').attr({width:SOO, height:37S})
11. .css({position:'absol ute', left: O, zlndex: l})
12 . .click(function(event) {
13. event.preventDefaul t();
14. S(this).slideUp(lSOO, function() {
15. $(thi s). show(). prependTo( '#galeria ' ). css ('cursor ' , 'poi nter ' ) ;
16. });
17. }) ;
18 . }) ;
19. </script>
.ij [arquivo-12.4a.html]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Fotos de Brasília
- .- ' 1
•. 1- ····---- .
1 1----==-
I • --==:y,
•
-
Tit11 lo nível 2
1-"rt>m ípsum dolof "'" am11:, oon~eiuer 3diptsoino ~lit Mlrbi al~1end. purus q"'s bon>ot
l3'Jcll>us , ante :r~ue rmil;twada mi, 1d rhcncus ""'""" 'º"'m 911et ellt. IJt sollicitul!ln sodali!S
p«ivs . Ph~lus líboro filis, bla-~dit nto, commodo VI. imp<nf~t ~. nibh. Susptn-d1sk pot1'111,
Dontc ulla:nco~r cursus dol«
~ CSS:
#galeria a, #galeria a:visited {
text-decoration:none;
color:#333;
padding:2px 6px;
background:#999;
margin- ri ght:2px;
}
#galeria a:hover, #tudo #galeria a.torrente {
color:#999;
background:#ccc;
}
..,.. jQuery
1. <script type="text/javascript">
2. S(document).ready(function() {
3. S(' .abre-fecha ') .hide() ;
4. $(' .foto').each(function(i) {
5. S(this).replaceWith('<span >' + (i+l) + ' </span>')
6. $('#galeria').css('textAlign', 'center') ;
7. }) ;
8. S('<div id="tela"><img src,,"l.jpg" alt=''Oescrição da imagem" /></div>')
9. . i nsertBefore('#galeria ' )
10. $( '#galeria a').click(function(event) {
11. event.preventOefault();
12 . $('#galeria a').removeClass('corrente');
13 . S(this).addCl ass('corrente ' );
14. S( '#tela img') . attr('src', S(this) . text() + '.jpg ' )
15. .css('opaci t y', '0 . 3') .animate({opaci t y:l} , 1500) ;
16. }) ;
17 . }) ;
18 . </script>
~ [arquivo-12.4c.html]
Código comentado:
Linha(s) Oe5crição
Li n ha 3 Esconde a dica ao usuário, pois só é necessária quando j avaScript
estiver desabil itado no navegador, não sendo necessária nesta solu-
ção.
Linha 4 Inicia um loop por rodos os elementos i mg que marcam as foros da
galeria.
Linha 5 Substirui cada elemento imagem enconrrado por um elemenco span
comendo um número. Serão canros elemenros span quantos forem as
imagens da galeria numerados de 1 (um) até o número correspon-
dente à quanridade de imagens enconrrada. Com isso, criam-se os
b otões de navegação.
Linha 6 Esta regra CSS centraliza o conjunto de botões de navegação em
relação à imagem ampliada.
Linha 8 Cria-se o elemento div#tela com dimensões iguais às da imagem
ampliada. Veja, na fol ha de estilos da página, as regras CSS para esse
elemento di v.
Linha 9 lnseriu-se o elemento di v criado acima dos botões de navegação.
Veja na marcação da página que os botões criados estão comidos
n o elemento div#galeria.
Linha 10 Define-se uma função a ser executada quando for clicado um ele-
menco a da navegação horizontal numérica.
Quarta etapa
Há situações nas quais se deseja fornecer um texto descritivo da imagem servindo
como legenda. Nes ra ecapa, você irá esrudar como apresenrar uma legenda para
cada imagem da galeria desenvolvida na etapa anterior.
Fotos de Brasília
... CSS:
#tela {
position:relative;
width:500px ; height:375px; margin:O auto Spx auto ; border:4px soli d #999 ;}
#galeria a, #galeria a:visited {text-decoration: none; col or:#333 ; padding :2px 6px;
background:#999; margin-right:2px;}
#galeria a:hover, #tudo #gal eria a.corrente {color:#999; background:#ccc ;}
#tela p.legenda {position :absolute; width:480px; left:O; bottom:O;
font-size:14px; font-weight:bold;
padding:2px lOpx; border-top:lpx dotted lfff; background:#OOO; margin:O;}
Plug-ins
13.1 Introdução
355
356 jQuery • A Biblioteca do Programador JavaScript
O autor do plug-in, ao d isponibil izá-lo para uso público, em geral cria uma
página ou algumas páginas comendo informações sobre o plug-in que forn ecem
sua descrição e fina lidade, instruções para instalação, exemplos de aplicação,
parâmetros de configuração e inform ações relacionadas. De posse dessas infor-
mações, você teni condições de instalar e fazer fun ciona r os plug-ins.
• Plug-insnativospara interação
Plug-in Descrição
Draggables Cria irens que podem ser arrastados com o uso do mouse.
Dropables Cria a lvos para soltar objetos arrasrad os.
Sorrable Man ipula e ordena listas com o mouse.
Seletables Seleciona itens com o mouse.
Resisables Redimensiona objetos com o mouse.
• Widgets
Plug-in Descrição
Accordion Cria painéis retrá teis para conreúdos.
Datepicker Cria um ca lendário para selecionar daras.
Dialog Cria uma caixa de d i<:Í logo flutuante.
Slid er Cria cursor des lizante.
Tab Cria navegação por abas.
!isca podem ser conteúdos estáticos ou dinâmicos carregados via AJAX ou com
uso d e outra programação qualqu er. A manipulação dos conteúdos se faz com
rolagem nos sentidos adiante e para trás, podendo ser animada ou não.
• Conreúdos estáticos
• Carrossel simples vertical e horizontal.
• Carrossel com scroll automático.
• Carrossel com o uso d e funções callback .
• Carrossel com controles externos.
• Carrossel com perso nalização d a imagem de partida .
• Vários ca rrosséis em uma página.
• Conteúdos dinâmicos
• Carrossel com conreúdo carregado via JavaScript.
• Carrossel com conteúdo carregado via AJAX.
• Carrossel com conteúdo carregado via AJAX de um script PHP.
• Carrossel com conteúdo carregado via AJAX com imagens hospedadas
no Flickr (srream e API).
• Especiais
• Carrossel circular.
• Carrossel para rolagem de textos.
• Carrossel elástico.
• Carrossel e T hickbox 3.
• Ca rrossel com efeito d e animação personalizado.
Como se pode notar, as possibilidades de uso são inúmeras e não serão de-
talhadas todas elas porque o objetivo desce capítulo é relatar a existência dos
plug-ins e mostrar os princípios d e insta lação e uso deles. Assim, você estudará
deralhadamenre algu ns exemplos do g rupo conceúdos estáticos e o uso especial
com T hickbox 3.
13.2.1 Instalação
A insta lação do plug-in consiste tão somente em fazer o down load dos a rquivos,
descompactá-los, hospedar a pasra-raiz do plug- in e linkar os arquivos requeridos
na página o nde você pretende insta lá-lo.
Visite http: //sorgalla.com/ jcarousel/ e faça o down load do arqu ivo disponível
nas versões jcarousel. tar.gz ou jcarousel .zi p. Descompacte o arquivo e hospede a
pasta-raiz denom inada jcarousel. A pasta-raiz co ntém várias subpasras e arquivos
destinados a criar os diferentes efeitos a que o plug-in se propõe. Caso você saiba
exatamente o que está fazendo, poderá delecar pastas e/ou arquivos não utilizados
em seu projeto, mas se tiver dúvidas, mantenha a pasta-raiz do plug-in com todos
seus conteúdos intactos. Tendo descompactado e hospedado o plug-i n, tenha
agora uma visão gera l de seus componentes.
Na pasta exampl es, existem vários arquivos HTML contendo exemplos de todas
as possibilid ades de criação do plug-in.
A pasta skins contém duas sub pastas denominadas ie7 e ta ngo. Essas subpasras
contêm a folha de estilos e imagens necessárias para duas opções de apresentação
visual, ou remas, do carrossel. Você pode personalizar a apresentação criando seu
tema em uma subpasta com o no me do rema e nela inserir uma folha de estilo e
imagens personalizadas. Se você pretend e personalizar um skin, use como po nto
de partida uma das duas fo lhas de estilo para um dos remas-padrão, mantendo
o no me dos seletores, e grave-a com o no me skin . css.
Assim, roda página que contiver qu alquer uma das versões de instalação do
ca rrossel deverá ser linkada conforme mostrado a seguir:
1. <head>
2.
3. <script type .."text/ javascri pt" src.." . . / jquery-1. 2.6. js"></sc ript>
4. <script ty pe.."text/javascri pt" src.. "jcarousel/l ib/j query.jcarousel .pack.js">
</script>
.iJ [arquivo-13.3a.html]
Cód igo comentado:
linha(s) Descrição
Linha 1 Link para a biblioteca jQucr}~
Linha 2 Link para o plug-in jCarousel. Esre link deverá ser colocado após
o link para a biblioreca.
Linha 3 Link para a fo lha de estilo geral.
Linha 4 Link para a folha de estilo do rema ie7 que será urilizada na
versão horizontal.
Linha 5 Link para a folha de estilo do tema tango que será usada na versão
vertical.
Linhas 7 a 12 Conrainer para scripts jQuery.
Linha 8 Sintaxe para o carrossel horizontal. Basta passar como parâme-
tro o valor do id do elemento ul que contém as imagens para
o carrossel. Veja, na marcação HTML mostrada anteriormente,
que o id adotado foi chorizontal.
Lin has 9e10 Sintaxe para o carrossel vertical. Basta passar como parâmetro
o valor do id do elmenro ul que conrém as imagens para o car-
rossel e a seguir definir vertical :true. Veja na marcação HTML
mostrada anteriormente, que o id adotado foi cvertical.
});
}) ;
Carrossel horizontal
Carrossel vertical
Talvez você queira desabilitar os botões para scroll manual. este caso, acres-
cente o seguinte no script anterior:
jQuery(document). ready(fun cti on() {
jQuery( ' #cscrol l ' ).jcarousel({
auto :l,
wrap: ' last',
buttonNextHTML: nu11 , 11 Desabilita o botão: próxi mo
buttonPrevHTML: nul l , 11 Desabilita o botão: anterior
No arquivo que ilustra esse exemplo são apresentadas duas versões conforme
mostrado na figura 13.2.
-
figuro 13.2 - Carrossel com scroll automótico.
<a href:o"#">9</a>
<a href="#">10</a>
</div>
.iJ [arquivo-13.Sa.html]
Admite várias estruturas de marcação HTML, cada uma de acordo com a natu-
reza dos conteúdos a revelar e esconder.As folhas de estilo para apresenração das
diversas versões criadas devem ser desenvolvidas de acordo com a necessidade de
cada projeto, contudo a documentação do plug-in em sua seção de demonstração
desenvolve quatro exemplos de uso do plug-in com respectivas folhas de estilo
que podem servir de base para a criação de folhas de esti lo persona lizadas.
Você irá estudar duas variantes de marcação par a uso prático do plug-in: uma
para conteúdos textuais e outra para um mecan ismo de navegação.
13.7.1 Instalação
A insta lação do plug-in consiste tão somente em fazer o down load dos a rquivos,
descompacrá-los, hospedar a pasra-raiz do plug-in e linkar os arquivos requeridos
na página onde você pretende insta lá-lo.
Vi site htt p: //bassi stance. de/ jquery-pl ugi ns/jquery-p l ugi n-accordion/ e faça o down-
load do arquivo disponível denominado jquery.accordion.zip. Descompacte o
arquivo e hospede a pasta-ra iz denominada j query-accordi on. A pasta-raiz contém
várias subpasras e arquivos destinados a criar os diferentes efeitos a que o plug-in
se propõe. Caso você saiba exara mence o que está fazendo, poderá deletar pastas
e/ou arquivos não utilizados em seu projeto, mas se tiver d úvid as, mantenha a
pasta-raiz do plug-in com todos os seus conteúdos intactos. Tendo descompactado
e hospedado o plug-in, veja melhor seus componentes.
Assim, roda página que contenha uma das versões de instalação do efeito
sa nfo na deverá ser linkada conforme mostrado a segui r:
1. <head>
2.
3. <Script type="text/javascript" src=" . . / jquery-1. 2. 6. js"></script>
4. <Script type="text/javascript" src="jquery-accordion/jquery. accordion. js"></scri pt>
5. <scri pt type="text/j avascri pt" src,,"jquery-accordion/xxxxxxxx. j s"></scri pt>
6. </head>
Linha(s) Descrição(cont.)
Linh a 3 Estiliza os títulos. O exemplo na documentação usa uma imagem de
fundo para compor o fu ndo dos títulos. Esta imagem está na pasta
demo do plug-in.
Linha 4 Estilização para o esrado mouse over nos títulos. A fol ha de estilo
original usa somenre o seleror .basic a: hover, omitindo o seletor
. basic a: 1ink: haver .Acrescenrou-se esteselerorpara servi ro navegador
lnrernet Explorer que não reconhece o simples a: haver em elemenros
a não marcados com o arriburo href, como é o caso da marcnção para
o exemplo. Aqu i também é usada uma imagem de fundo.
Linha 5 Estilização para o título corrente usando uma imagem de fundo.
A sanfona símples admire duas versões. A primeira com altura consran repara
o div revelado, independencemence da quantidade de conreúdo. Tal alrura é maior
que a altura do div com mais quantidade de cometido. Aoutra versão é com altura
do div de acordo com a quantidade de conteúdo. O parâmetro que diferencia as
versões é autoheight. Declarando autoheight : false a altura será variável. O valor-
padrão de autoheight é true , ou seja, nada declarando, a alrura será fixa.
No exemplo, há duas versões em uma mesma página, conforme mostra a
figura 13.5.
Sanfona slmples
ESle plug1n ro deS•ntoMdo por Jõm Est~ plúg1n fC1 deS~/lYO~~JIU po1JIJIJl
Zlletrr1~1 ~ S\JO cocurrientaréo enc<>ntra-•e Z:aelferer e !U• dvtumenl1t.90 encor tta se 4
lnst(l~1~5o d• 11'k1Uil•
20.
21. </uh
22. </li>
23 . </Uh
Código comentado:
Linha(s) Descrição
Linhas 1 a 23 Um elemento para listas não ordenadas ul conrainer para roda a
marcação. A esse container deve ser atribuído um i d com nome
navigation. Esse íd será o seletor para a folha de estilo do efeito.
Linhas 2 a 8 Um bloco de código que se repete ranras vezes quantos forem
os tfrulos dos conteúdos a revelar. Note que esse bloco se repete
duas vezes no exemplo, nas linhas 9 a 15 e 16 a 22.
Lin ha 2 A marcação do 1ítulo a revelar deverá ser feita com o elemento a
ao qual se atribuem uma classe denominada head e um atributo
href="#"(link morto). Esse elemento a, por sua vez, deve estar
contido em um elemento 1i. Nas linhas 9e16 estão os outros dois
títulos. O citado elemento li , além de conter o título, é container
para um elemento u1 onde consta m rodos os 1i nks relacionados ao
título. Trara-se de uma lista aninhada à lista conra iner geral.
A folha d e esti lo-padrão para esse efeito, reri rada da documentação do plug-in, é
mostrada a seguir. Note que o container geral é um ele me nto ul com i d="navigation"
conforme mos trado na marcação anterior:
1. #navigat i on {border: l px sol i d #S263AB; margin :O ; padding: O; width:200px; }
2. #navigati on a.head {border:lpx solid #ccc; background:#S263AB
url( jquery-accordion/demo/col lapsed. gif) no-repeat 3px 4px; color:#fff;
display: block; font-weight:bold; margin :O; padding:O; text-i ndent: l4px;
text-decoration:none;}
3. #navigat ion a.head:hover {color:#ff9;}
4. #navigat ion a. se lected {bac:kground-image:url (jquery-accordion/derno/expanded.gif);}
5. #na vi gation a. current {background: #ff9;}
6. #navigation ul {margin:O; padding:O ;}
7. #navigation l i {l ist-style: none}
8. #navigation l i l i a {col or: #333; display:bl ock ; text-i ndent:lOpx;
text-decoration:none;}
9. #navigation l i l i a:hover {background:#ff9; color:#fOO;}
Para informações detalh adas sobre o p lug -in jquery .easi ng . js, consulte o en-
dereço http: //gsgd .eo. uk/sandbox/jquery/easing/.
linha(s) Descrição
Linha 4 Fecha o menu no início.
Linha 5 Nome da classe a tribuída ao elemento a que marca os títulos.
Linha 6 Define o evento que abre o men u. Utilizou-se o valor mouseover no
exemplo. Experimente mudar para cl ick e observe a diferença.
Lin ha 7 Parâmetro para defini r a altura do menu aberto. Usou-se false (este
é o valor-pad rão e não declará-lo sunc o mesmo efeito) no exemplo
para força r a altura de acordo com o conteúdo revelado. O va lor
true mantém a altura constame independentemente do conteúdo
revelado, fa zendo o menu estender-se mais.
Linha 8 Interfere na aceleração da velocidade de animação. Util izou-se o
valor easeslide no exemplo. Experimente mudar para bouceslide e
observe a di ferença.
É som e nte isso. Após linkar o p lug-in n a página, cria r uma folha de esti lo
para o efeito e desen volver a m a rcação HTlvlL como m ostrado, basta declarar
jQuery(' #um_nome_qua 1quer' ) .accordion() e a lg uns parâ metros, sendo um_nome_qua 1quer
o nome que você escolh eu para a ul con ra iner geral dos conteúdos a revelar co m
o uso do efeito sanfon a .
Para maiores der.a lhes e o utras versões d e im p lememação, consulre a página o ficia1
do p lug- in localizada em http://bassi stance. de/jquery-plugi ns/jquery-pl ugin-accordion/ e
a d ocumentação no site jQuery em http://docs.jquery.com/ UI/Accordion/accordion.
Menu Maujor
14.1 Introdução
O menu do site do Maujor foi criado e expandido muico antes de a biblioteca
jQuery ter se tornado uma realidade no universo do desenvolvimento de sites.
O menu passou por quatro fases. A primeira fase fo i desde sua criação, quando
começou com poucos lin ks, até o momento em que a inserção de novos links
passou a exigir uma coluna de navegação muico extensa. Nessa ocasião, iniciou-se
a segunda fase, quando se optou por um menu do ripo pop-up lacera i, em que os
links para as matérias eram revelados quando o usuário passava o mouse sobre
um tírulo geral. A terceira fase baseou-se na solução adotada no redesign de um
grande portal brasi leiro e consistiu em reduzir a altura do conrainer do menu;
com o uso de regras CSS apropriadas, forçou-se o aparecimento de uma barra
de rolagem vertical para tal container.
Passado algum tempo, houve algumas crícicas ao sistema de navegação do site.
Embora fossem esporádicas e longe de ser unanimidade, considerou-se o estudo
de uma alternativa para o menu.
A quarta fase foi a implanração de um script jQuery que atualmente faz fun-
cionar o menu. A aceitação foi total e houve muicos e-mails de lei cores pergun-
tando como funciona o menu. Foram tais solicitações que motivaram a escrita
deste capítulo.
379
380 jQuery • A Biblioteca do Programador JavaScript
Neste capículo, será dada ênfase especial, além do script jQuery, à marcação
HTML e às regras CSS para a apresenração do menu. Como base para o exemplo a
desenvolver, será adorado o menu atual do site, incluindo seus links funcionais.
.iJ [arquivo-14.2a.html)
Estilização inicial
Acrescente uma folha de estilos na página do menu para melhorar sua apresentação.
Observe um primeiro conjunto de regras CSS conforme mostradas a seguir:
1. <styl e type="t ext/ css" media="all ">
2. #menu ul {
3. l ist-styl e-t ype:none;
4. margi n:O;
5. paddi ng:O;
6. }
7. #menu li a {
8. display :block;
9. background:#d4dde4 url(seta .gi f ) no-repeat 98%;
10. color:#333;
11. border- left :Spx sol i d #7d97ad ;
12. t ext-decorati on:none;
13 . paddi ng: 3px 15px 3px 3px;
14. margi n-bottom:lpx;
15. }
16. #menu l i a:hove r {
17 . background :#dce3e9 url(seta .gif) no-repeat 98%;
18. color:#999;
19. border- left : Spx sol i d #cad2dd;
20 . }
21. </Styl e>
~ [arquivo-14.2b.html)
Código comentado:
Linha(s) Descrição
Linhas 2 a 6 Retira os marcadores das lisras não ordenadas e os espaçamentos-
padrão de margi me padding para listas. Esses espaçamentos causam
uma tabulação à esquerda dos itens de lis ta que, além de variar de
dimensão, de acordo com o navegado r, são implementados ora pela
propried ade margin, ora por paddi ng. A final idade desta regra CSS é
igualar a renderização da lista para todos os navegadores.
Linha 7 Seletor para os links no estado inicial.
Linha 8 Elementos HTML a são eternemos in-li ne e, como rais, ocupam a
exata largura e altura necessárias a acomodar seus conteúdos. Isto
faz que. em um link de texto, somente a área do texto seja cl icável.
O link em questão está inserido em um elemento li que tem uma
forma retangular e na q ual está inserido o texto do link. A decla-
ração displ ay :bl ock nesta linha torna o elemento a nível de bloco,
ocupando todo o seu container e faze ndo q ue toda a área retangular
do elemento li seja clicável.
Este primeiro conjunto de regras de estilo causa a rend erização do m enu com
um espaçamento não desejado, no navegador Internet Explorer 6 e anteriores,
conforme mosrra a figura 14.2. Este é um comportamento decorrente de uma
das maiores causas das inconsistências de renderização no IE6 e anteriores, fe-
lizmenre já corrigida no IE7. Para maiores informações, consulte http://www.maujor.
com/tutorial/haslayout.php.
&'Q\JllrO ~ª'
Dtstaqnts
IFAQ -CSS •
T'j" - -.~.
•
IEditor CSS <lo D~.?004 •
.Aprenda oss cres'de o infcio
Devo aprender CSS31
Fuudmntntos CSS
IE~rCSSdoDW11DCZ004
Dimensões do menu
6. #menu {
7. wi dth:200px; height:300px ;
8. overRow:auto;
9. margi n:30px O;
10. background:#999;
11 . }
12. #menu h3 {
13. font -size:12px ; cursor: pointer;
14. l i ne-height :18px;
15. padding-l eft :20px;
16. margi n:lpx O;
17. background :#cad2dd url(mais .gif) 3px center no-repeat;
18. border- left:Spx solid #7d97ad;
19. }
20. #menu h3.corrente {background:~cad2dd url(menos.gif) 3px center no- repeat;}
21. * html li, * html li a {height: 1%;}
.iJ [arquivo-14.2c.html]
Cód igo com entado:
Linha(s) Descrição
Linha 1 Regras CSS gerais para a página que contém o menu.
Linha 7 Define as dimensões máximas do menu.
Lin ha 8 Cria barras de rolagem vertical e horizontal caso o conteúdo do
menu ultrapasse as dimensões estabelecidas. Ainda que a dimen-
são vercical do menu que você está projetando seja menor que as
dimensões estabelecidas na regra CSS, declare overRow:auto para o
caso de expansão futura.
Linha 9 Define margens superior e inferior.
Linha 10 Cor ele fundo do menu . Esta é a cor das linhas horizontais que
separam os retângulos dos links.
Lin ha U Regras CSS para os cabeçalhos h3 do primeiro nível do menu. ore
a declaração para mudança do cursor indicativa de que o clique
causará uma ação (no caso, abre os submenus) e também a definição
de um sinal de mais (+) como uma imagem de fundo, indicando
que há algo a abrir quando se clica o cabeçalho.
linha 20 Regra CSS para colocar a imagem do sina l menos(-) no cabeçalho
aberto.
Linha 21 Hack para o IE6 e anteriores conforme relatado anteriormente.
o
,.
•
Dc"11 ~prender GSS3?
• •..
ffi f1mcl.lllle1llOSCSS
tlrdroduÇOO às css • •
Sm-UCSS • •-
11""3 d'l css • •
A f7opnedll<lê C$.S fonl
•..
A i;rllPl1eda(la C>Stéld
..•
,5..r:fqpr~e ÇSS~IJn
• •
tP/Wllle~ ~ IXlnlil$
" A prcpnedo11t CSS!bJ!l
•
A ~o.pr~ti CSSp~
·~ A pcqmcd3âo CSS mDtgll
- - •
j ~r~llfko. d9' ~rdn
A prc;ioeãa11e CSS pa6ãi'tg
•
• V
Com as novas regras CSS, teoricamente a estilização estaria terminada não fosse
um bug nos navegadores internet Ex:plorer 7 e anteriores. Note, na figura 14.2,
que se colocou em destaque, no prim eiro cabeçalho, uma diferença no espaça-
mento da figura de fundo do sinal de mais(+) indicativo d e SLlbnível d o menu.
El oe~1 .1que~
FAQ ·CSS
QUli - C$S
- Seletores
Este apêndice contém uma descrição geral dos seletores CSS e sua respectiva
sintaxe jQuery. Apresenta, ainda, uma rabeia na qual são relacionados os seletores
CSS 3 e seus alvos na árvore do documento, empregados na biblioteca .
• Sintaxe CSS:
p { ... } I* o alvo são todos os parágrafos no documento *I
h3 { .. . } /* o alvo são todos os cabeçalhos nível três no documento ~1
code { . . . } /* o alvo são todos os elementos code no documento ~1
• Sintaxe jQuery:
$(' p 1) li o alvo são todos os parágrafos no documento
$('h3' ) li o alvo são todos os cabeçalhos nível três no documento
$(' code') li o alvo são todos os elementos code no documento
389
390 jQuery • A Biblioteca do Programador JavaScript
• Sintaxe CSS:
#tudo {.. . } I* o alvo é el err.ento com atributo id="tudo" *I
#principal { . . . } I* o alvo é elemento COll1 atributo id="princi pal" *I
• Sintaxe jQuery:
$(' lltudo ' ) li o alvo é elen:ento com at ri buto id="tudo"
$('#principal' ) li o alvo é elemento COll1 atributo id="principal "
• Sintaxe CSS:
.estrutura{ ... } I* o alvo são todos os elementos com atributo class="estrutura" *I
.cor_um { ... } I* o alvo são todos os elementos com atributo class="cor_um" *I
• Sintaxe jQuery:
$('.estrutura') li o alvo são todos os elementos com atributo class="estrutura"
$(' .cor_um') li o alvo são todos os el ementos com atributo class="cor_um"
• Sintaxe jQucry:
$('p[title] ')
$(' abbr[class="diferente"] ')
$('div[id! ="navegacao") ' )
$( 'hl[classA=''est'') ' )
$('div[classS="oico"] ' )
$('div[class*•'' ren'') ' )
Árvore do documento
<body>
<div i d="topo">
<hl>Empresa</hl>
<ul i d="nav">
<l i><a href="#">Link 1</a></l i>
<l i><a href="ll">Li nk 2</a></l i>
<l i><a href="ll">Link 3</a></li>
</uh
</div>
<div i d=''principal">
<h2>Titulo</h2>
<p> . .. parâgrafo <em>itálico</em> . . . </p>
<h2>Ti tul o</h2>
Seletor Alvo
E[attA="val"] Casa com qualquer elemento Ecujo valor do atributo att começa com va 1
E[attf="val "] Casa com qualquer elemento Ecujo valor do atributo att termina com va 1
- -
E[att*="va 1"] Casa com qualquer elemento Ecujo valor do atributo att contenha a substring va 1
E F:nth- child(n) Casa com o elemento Fque seja o n-th (enésimo) filho do elemento E
397
'vl aterral corn 1111<> os autorais
398 jQuery • A Biblioteca do Programador JavaScript
- r &Gamma:
ô. &Oella;
Γ
Δ
K
},
κ
λ
κ
λ
-.....
T ↑
→
↑
→
.
-.L ⊥
⋅
⊥
⋅ ;
<I> &Phí;
-
Υ
Φ
-
'(
aJ
&upsíh;
ϖ
-
ϒ
ϖ n
3 ∋
∏
∋
-
∏
EB ⊕
-
® ⊗ ⊗
&118853;
4' Ψ Ψ ... … … - − − J ⌋ ⌋
.. o
α α . ,″
_
″ -.J &radie; √ ) ⟩ 〉
- - -
f--
- o
~ β β ‾ ‾ r oc ∝ ∝ ◊ ◊
<
ε
&zela;
ε
-
ζ
~
~
ℑ
ℜ
-
ℑ
ℜ
- /\
V
∧
-∨
∧
-
∨
-•• ♥ ♥
♦ ♦
-
r
Q
£
¤
£
-
¤
-X
)) »
¼ - -
»
¼
ó
ô
Ó
Ô
Ó ;
-
Ô -
ê &eulm;
1 ì
ë
ì
È È
..
B &sztig;
f-
á à
ß
à
+
0
&devida;
ø
÷
-ø -
± ± ± É É É á á á iJ ù ù
2
² ² t Ê Ê â â: â ú ú ú
i
´
µ µ
´
µ ;
-
i
&lgrave;
ĺ
-
Ì
Í
-
ã &aulm;
ã å
ä
å
ü &uulm;
y ý
ü
-
ý
-
Elementos HTML
Esta tabela foi extraída do site do W3C e relaciona os elemen tos HTM L. f o rnece
ainda informações sobre as tags de abercura e fec ham enco, elementos vazios,
elementos em desuso e DTD a que se aplicam, além de uma breve descrição do
elemento.
Notação Significado
o Uso opcional
,_
p
-- -
Uso proibido
D Elemento em desuso
V Elemento vazio
L DTD Loose
F DTD Frameset
Tag de Tagde
Elemento Vazlo Desuso DTD Descrição
abertura fechamento
A âncora
401
'vlaterral corn 1111<> os autorais
402 jQuery • A Biblioteca do Programador JavaScript
Tagde Tagde
Elemento Vazio Desuso DTD Descrição
,...._
BASE
abertura
- ,__ -fechamento
p
.....-
V
-
URI base para o documento
BR p V quebra de linha
BUTION botão
CAPTION titulo de tabela
CITE citação
DL lista de definição
EM ênfase
Hl tltulo
H2 titulo
H3 título
H4 título
HS heading
Notação Significado
Uso obrigatório no
o elemento a que se aplica
D Atributo em desuso
L DTD Loose
F DTD Framest
Elementos a que
Atributo Tipo Uso Desuso DTD Comentário
se aplica
abreviatura para texto da
abbr TD, TH %Text:
célula cabeçalho
accept-charset FORM %Charsets: lista de caracteres suportados
lista de ti.pos MIME para
accept FORM, INPUT %ContentTypes;
upload de arquivos
A,AREA,
BUTTON, INPUT, caractere para acesso por
accesskey %Character;
LABEL, LEGEND, teci ado
TEXTAREA
local de processamento de
actlon FORM %URI; o forrnulãrio no servidor
alinhamento para titulo de
1align CAPTION %CAllgn; D L
tabela
405
'vl aterral corn 1111<> os autorais
406 jQuery • A Biblioteca do Programador JavaScript
Elementos a que
Atributo Tipo Uso Desuso DTD Comentário
se aplica
APPLET, IFRAME,
alinhamento vertical ou
align IMG, INPUT, %1Align; O L
horizontal
OBJECT
alinhamento de legenda de
align LEGENO %LA1ign; O L
fieldset
alinhamento de tabela na
align TABLE %TAJign; O L
janela
(left 1center 1
align HR O L
right)
OIV, H1, H2, H3, (left 1center 1right
align O L alinhamento de texto
H4, HS, H6, P 1justify)
COL, COLGROUP,
1 . TBOOY, TO, (left 1center 1right
ahgn
TFOOT, TH, 1justify 1char)
THEAO, TR
alink BOOY %Color; O L cor do link selecionado
APPLET %Text; breve descrição
-altai! - ·-
AREA, IMG
-
%Text
--
o
O L
breve descrição
--
all INPUT COATA breve descrição
lista de arquivos separados
archive APPLET COATA O L
por virgula
lista de URls separados por
archlve OBJECT COATA
espaÇ-O
lista de cabeçalhos
axis TO, TH COATA relacionados separados por
virgula
textura que se repete no
background BOOY %URI; O L
fundo do documento
bgcolor TABLE %Color; O L cor de fundo para tabela
- -- -
bgcolor TR %Color; O L cor de fundo para linhas
Elementos a que
Atributo Tipo Uso Desuso DTD Comentário
se aplica
codificação de caratere do
charset A, LINK, SCRIPT %Charset;
destino de link
marcar por padrão botões
checked INPUT (checked)
radio e check boxes
URI para o documento de
cite BLOCKOUOTE, O %URI;
destino ou mensagem
informações sobre as
cite DEL, INS %URI;
razões de mudança
todos os elementos.
exceto BASE,
BASEFONT, HEAD, lista de dasses separadas
class CDATA
HTML, META, por espaço
PARAM, SCRIPT,
STYLE, TITLE
identifica uma
classid OBJECT %URI;
-
clear
'-
BR
(left 1 all I right 1
D L
----
implementação
controla o nuxo do texto
-
none)
classe do arquivo para o
code APPLET COATA D L
elemento applet
URI base para classid, data,
codebase OBJECT %URI;
arquivo
URI base opcional para
1 codebase APPLET %URI; D L
applet .
'- - - ~
Elementos a que
Atributo Tipo Uso Desuso DTD Comentário
se aplica
todos os elementos,
exceto APPLET,
BASE, BASEFONT,
dir BDO. BR, FRAME, (ltr 1 rtl) direção do texto
FRAMESET,
IFRAME, PARAM,
SCRIPT
dir BDO (ltr 1 rtl) o direção
BUTION, INPUT,
1 OPTGROUP,
disabled (disabled) desabilitado
OPTION. SELECT,
TEXTAREA
enctype FORM %ContentType;
lista de nomes de fontes
face BASEFONT, FONT CDATA D L
separados por vírgula.
for LABEL IDREF casa com ID de controle
Elementos a que
Atributo Tipo Uso Desuso DTD Comentário
se aplica
todos os elementos,
exceto APPLET,
BASE, BASEFONT,
lang BR, FRAME, %LanguageCode; código de idioma
FRAMESET,
IFRAME, PARAM,
SCRIPT
language SCRIPT COATA o L linguagem do script
-link
longdesc
·-
BODY
IMG
-- %Color;
%URI;
D L cor de links
link para descrição longa
longdesc FRAME, IFRAME %URI; F link para descrição longa
Elementos a que
Atributo Tipo Uso Desuso DTD Comentário
se aplica
todos os elementos,
exceto APPLET,
BASE, BASEFONT,
BDO. BR,
FONT, FRAME,
onkeyup %Script; uma tecla é solta
FRAMESET, HEAD,
HTML, IFRAME,
ISINDEX, META,
PARAM, SCRIPT,
STYLE, TITLE
todos os trames foram
onload FRAMESET %Script; F
carregados
onload BODY %Script: o documento foi carregado
todos os elementos,
exceto APPLET,
BASE, BASEFONT,
BDO, BR,
FONT, FRAME, botão do dispositivo
onmousedovm %Script;
FRAMESET, HEAD, apontador é acionado
HTML, IFRAME.
ISINDEX, META,
PARAM, SCRIPT,
STYLE, TITLE
todos os elementos,
exceto APPLET,
BASE, BASEFONT,
BDO, BR,
FONT, FRAME, apontador movido sobre o
onmousemove %Script;
FRAMESET, HEAD, elemento
HTML, IFRAME,
ISINDEX, META,
PARAM, SCRIPT,
STYLE, TITLE
todos os elementos,
exceto APPLET,
BASE, BASEFONT,
BDO. BR,
FONT, FRAME, apontador movido para fora
onmouseout %Script;
FRAMESET, HEAD, do elemento
HTML, IFRAME,
ISINDEX, META,
PARAM, SCRIPT.
STYLE, TITLE
todos os elementos,
exceto APPLET,
BASE, BASEFONT,
BDO, BR,
FONT, FRAME, apontador movido para o
onmouseover %Script;
FRAMESET, HEAD, elemento
HTML, IFRAME,
ISINDEX, META,
PARAM, SCRIPT,
STYLE, TITLE
Elementos a que
Atributo Tipo Uso Desuso DTD Comentário
se aplica
todos os elementos,
exceto APPLET,
BASE, BASEFONT,
BDO. BR,
FONT, FRAME,
onmouseup %Script; apontador solto
FRAMESET, HEAD,
HTML, IFRAME,
ISINDEX, META,
PARAM, SCRIPT,
STYLE, TITLE
onreset FORM %Script, formulário foi limpo
onselect INPUT, TEXTAREA %Script; um texto foi selecionado
onsubmit FORM %Script; formulário foi enviado
todos os frames foram
onunload FRAMESET %Script; F
removidos
-
onunload
,_
BODY %Script;
-- --
o documento foi removido
profile HEAD %URI; informação de perfil
prompt ISINDEX %Text: D L mensagem
readonly TEXTAREA (readonly)
- - somente leitura, para texto
readonly INPUT (readonly)
e senha
rei A, LINK %LinkTypes; links relacionais
rev A, LINK %LinkTypes; links reversos
lista de quantidades,
rows FRAMESET %Multilengths; F
padrão: 100% (1 linha)
rows TEXTAREA NÚMERO o
~
- - número de linhas
-
rowspan TD, TH NÚMERO transformadas em uma
célula
rules TABLE %TRules; fios entre linhas e colunas
Elementos a que
Atributo Tipo Uso Desuso DTD Comentário
se aplica
especifico para cada tipo
siz.e INPUT CDATA
de campo
fonte base para o elemento
size BASEFONT CDATA o D L
FONT
size SELECT NÚMERO número de linhas visiveis
atributo COL afetado por N
span COL NÚMERO
colunas
número padrão de colunas
span COLGROUP NÚMERO
no grupo
-src - SCRIPT %URI;
-
URI para script externo
src INPUT %URI; para campos com imagens
endereço do conteúdo do
src FRAME, IFRAME %URI; F
Iram e
src IMG %URI; o URI da imagem a incorporar
mensagem a mostrar
standby OBJECT %Text;
enquanto carrega
- 1- -
start OL NÚMERO D L número inicial da sequência
todos os elementos,
exceto BASE,
BASEFONT, HEAD, informação sobre
sty1e %StyleSheet;
HTML, META, estilização
PARAM, SCRIPT,
STYLE, TITLE
propósitolestrutura para
summary TABLE %Text;
saída de sintetizador
A,AREA,
BUTTON, INPUT, posição na ordem de
tabindex NÚMERO
OBJECT, SELECT, tabulação
~TAREA
- --
rtarget A, AREA, BASE,
FORM, LINK
%FrameTarget; L
trame onde será
renderizado
cor dos textos no
1text BODY %Colar; D L
documento
todos os elementos,
1 exceto BASE,
BASEFONT, HEAD,
tille %Text; titulo para o elemento
HTML, META,
PARAM, SCRIPT,
TITLE
tipo de conteúdo do
type A, LINK %ContentType;
elemento
tipo de conteúdo para
type OBJECT %ContentType;
dados
tipo de conteúdo para valor,
type PARAM %Conten1Type;
quando valuetype =ref
tipo de conteúdo da
type SCRIPT %ContentType; o linguagem do script
tipo de conteúdo da
type STYLE %ContentType; o linguagem de estilos
Elementos a que
Atributo Tipo Uso Desuso DTD Comentário
se aplica
type INPUT %1nputType: TEXT tipo do controle input
-
type
- ,_
LI
-- %l1Style; D L estilo do item de lista
-
type OL %0 LStyle: D L estilo númerico
(top 1middle 1
no lado do cliente
-
alinhamento vertical em
-
TFOOT, TH, bottom 1basei ne) células
THEAD, TR
para botão radio e
value INPUT CDATA
checkboxes
value OPTION CDATA valor padrão para escolha
value PARAM CDATA valor da propriedade
vafue BUTTON COATA enviado ao servidor
Este apêndice é uma extensão da FAQ contida no site oficial da biblioteca jQuery.
Alguns scripts que demonstram as respostas estão disponíveis no site do livro,
no arquivo-apA.1.html.
415
416 jQuery • A Biblioteca do Programador JavaScript
Um objeto selecionado via jQuery pode ser atribuído a uma variável JavaScript?
Sim, você pode atribuir a uma variável JavaScripr um objeto jQuery e manipulá-lo
normalmente com sintaxe jQuer)~ como mostrado no exemplo a seguir:
var meuDív = S( ' #divNome');
var meuValor = S('#divNome').val () ; li Armazena o valor do elemento
meuDiv.val('Olá mundo'); li Define o valor do elemento
Use a propriedade length para proceder à verificação como mosrrado a segu ir:
S('p ' ).length(); li Retorna o número de parágrafos encontrados no documento
Em tais casos, você precisa usar uma sintaxe especial como a mostrada a
seguir:
$(' #i d .Nome') li Não funciona
$('#id\\ .Nome') li Funciona!
$(' #i d[Nome] ') 11 Não funciona
$('#id\\[Nome\\)') li Funciona!
Um elemento está desabi li tado quando contém o atributo di sabled com o valor
di sabled. Assim , para desabilitar um elemento, basta remover esse atributo e, para
habilitá-lo, você deve configurar o atributo. O script é mostrado a seguir:
S('#xpto').attr('disabled', 'disabled') ; li Desabilita o el emento cujo id tem o val or xpto
S('#xpto ' ).removeAttr('disabled'); li Habi lita o elemento cu jo id tem o valor xpto
Um elemenco está marcado quando concém o atributo checked com o valor checked.
Assim, para marcar um elemento, basta remover esse atributo e, para desmarcá-lo,
você deve configurar o atributo. O script é mostrado a seguir:
${' #ypto' ) .attr('checked ' , 'checked'); li Marca o elemento cujo id tem o valor ypto
S('#ypto ' ) .attr( ' checked' , ' ') ; li Desmarca o elemento cujo id tem o valor ypto
D esenvolva uma página, para demonsrrar o funcionamenco do script mos-
trado, com a seguinte marcação HTML. Não se esqueça de linkar a página à
bibl ioreca.
<1abeh<i nput type="checkbox" i d="ypto" />Marcal Desmarca<ll abeh
<input type="but ton" value="Marcar" onclick="S('#ypto ' ).attr('checked', 'checked')" I>
ci nput type="button" value="Desmarcar" oncl ick="S{'#ypto ' ).attr('checked ', ' ' )" I>
Tanto o seleror : eq() como o método eq() permitem fazer a seleção. Desenvolva
uma página , para demonstrar o funcioname nto do scripr, com a seguinte mar-
cação HTNlL Não se esqueça de linkar a página à biblio teca.
1111>- HTML:
<O1 i d="mi nhali sta">
<li>texto do primei ro item</li>
<li>texto do segundo i tem</li>
<li>texto do terceiro item</ li >
<li>texto do quarto item</li>
<li>texto do quinto item</li>
<li>texto do sexto i tem</li>
</oh
1111>- jQuery:
li Não funciona
$('#minhalista').find(' li').eq(2) .text() .replace('texto do tercei ro item', 'TEXll) ALTERAIX)');
11 Funciona
var SelementoTres = S('#minhalista').find('li').eq(2);
var textoElementoTres = SelementoTres.text().replace( ' texto do terceiro item ' ,
'TEXTO ALTERADO ' );
SelementoTres.text(textoElementoTres).css('color', 'red');
Por que a animaçãode um elemento faz que se comporte como elemento nível de bloco?
IJll. HTML:
<body>
<b>Texto negrito</b>
<p>Primeiro parágrafo: </P>
<P>Segundo parágrafo: </ P>
</body>
IJll. jQuery:
<script type="text/javascript">
S(document).ready(function() {
S('p').after(S( 'b'));
});
</script>
IJll. HTML:
<body>
<b>Texto negrito</b>
<p>Pri mei ro parágrafo: <b>Texto negrito</b></p>
<P>Segundo parágrafo: <b>Texto negrito</b></p>
</body>
Insere um parágrafo nos d ivs cujo atributo c1asse tenha o valor c1asseNome.
Insere um parágrafo nos d ivs cujo atributo c1asse tenha o valor c1asseNome.
Insere um parágrafo nos d ivs cujo atributo c1asse tenha o valor c1asseNome.
E
Efeitos
básicos, lZ.3. lmagcn.s. m
corrediços, lZZ Atributo ah, ili
de opacidade, lZ2 Acributo longdesc. 32Z
lightbox, lli decorativas, 32.!i
428 jQuery • A Biblioteca do Programador JavaScript
outerWidth(), ili N
parenc((expressão]), H2
parems([expressão]), ili Noras sobre cvcnros, 162
positionO, 126
prepend O, l.l.fi
prependTo(), l.l.fi o
prcvO, W Opacidade, 333
prevA ll(), M.5. Operação com string, l2Z
ready(), .1B Operações com arrays e objetos, l2Q.
remove(), .12.0.
removeAccr(), l.M
removeClassO, lilli p
replaceAllO, l2l
replaceWich(), l2l Padrões Web, 28
res ize (), J..fiQ Pági na de norlcias, 2.fi5.
scro ll (), l.fil Placeholder para campos, 3.01
scrollLefc(), 122 Plug-ins
scrollLeft(valor), 129 de terceiros, ili
scrollTop(), 122 jCaro use1, .15.6.
selec1(), 162 jQue ry Accordion, .lZQ
show(), ill na tivos, li6
sib lings (), 118 Posicionamento, 12.S.
sliceO, 1.18 Progressão aritmética, Zfüi
slide Down(), l1l Pseudoselecores
si ide.IOggle(), .IZ8 :animatecl, ZJ
slideUp(), 177 :bucton, 25.
stop(), 18.1 :chcckbox, 2l
:cl1ecked, 28
submicO, 162.
text(), J..Q2. :contai ns(texco), I1
text(valor), .llQ :disabled, 91.
coggle(), ili :empty, Zi
toggle(fl f2 [fJ.. fN!), 164 :enab led, 91.
cogglcClass(), lQZ :eq (índice), 62
rrigger(), 1fili :even, 6Z
trim (), l2Z :file, 25.
unbi nd(), 162 :firsc, úi
uniq ue(), J.2.6 :first-child, as
:gt(índice), ZQ
un loadQ, lfil
vai(), ll1 :has(seletor2), li
val(valor_atribuco_value), lll :hidden, 76, 96
widthO, llil :imagc, 21
width (valor), ili :inpur, 88
wrap(elemento), ua :last, 6.'.i
wrap(htm l), 117 :Las t-child, 86
wrapAJl(clemento), 112 :lt(índice), Zl
wrapAll(hrm 1), 118 :not(seletor2), füí
wraplnner(clemcnro), l2Q :nth-child(índice/ even/ odd/ equação), 8Z
wraplnner(hrml), 12Q :odd, úB
Mover e copiar, ili :only-ch Ud, 8.6
:parent, li
:password, 2Q
:radio, 21
:reset, 2.:3
430 jQuery • A Biblioteca do Programador JavaScript
t
1
s•
i
i
---
---
www.novatec.com.br
Matcnal cori 01re1~os au·ora1s