Академический Документы
Профессиональный Документы
Культура Документы
[arquivo-1.1.6a.html]
A tcnica usada nessa soluo consiste em inserir script dentro de marcao
HTML (inline) e uma prtica ultrapassada que infelizmente ainda larga-
mente empregada por muitos desenvolvedores. Essa soluo contraria um
princpio fundamental dos Padres Web que preconiza separao total entre
estrutura de marcao com HTML, apresentao com CSS e comportamento
com scripts. Cada cdigo no seu arquivo correspondente e separado. Evite
usar essa soluo.
Soluo com funo JavaScript:
...
<head>
...
<style type=text/css media=all>
h1 { color:#090; }
</style>
<script type=text/javascript>
function mudaCor() {
document.getElementById(cor).style.color = #FF0000;
}
</script>
</head>
<body>
<h1 id=cor>Cabealho muda de cor</h1>
<button type=button onclick = mudaCor();>
Vermelha
</button>
[arquivo-1.1.6b.html]
A tcnica usada nessa soluo uma melhoria da soluo anterior e consiste
em denir-se uma funo dentro da seo head do documento que pode ser
chamada por vrios botes dentro de um mesmo documento permitindo
ampliar o uso do script para alm de um boto. Uma variante desta soluo
consiste em colocar a funo em um arquivo externo e linkar o arquivo ao
documento. Isso permite usar a funo em vrios botes dentro de vrios
documentos. Essa soluo continua misturando estrutura com comporta-
mento e tal como a anterior deve ser evitada.
Soluo com JavaScript fora da marcao:
...
<head>
...
<style type=text/css media=all>
h1 { color:#090; }
</style>
<script type=text/javascript>
window.onload = function() {
document.getElementById(btn-vermelha).onclick = mudaCor;
};
function mudaCor() {
document.getElementById(cor).style.color = #FF0000;
};
</script>
</head>
<body>
<h1 id=cor>Cabealho muda de cor</h1>
<button type=button >Vermelha</button>
...
[arquivo-1.1.6c.html]
Agora sim! A marcao HTML est isenta de cdigo JavaScript pois incorpo-
ramos nosso script na seo head do documento. Resta agora colocar o script
em um arquivo externo separado e linkar para a(s) pgina(s). Essa uma boa
soluo sob o ponto de vista da separao do comportamento, marcao,
estilizao.
Soluo com jQuery:
...
<head>
...
<script type=text/javascript src=../jquery-1.2.6.js></script>
<script type=text/javascript>
$(document).ready(function() {
$(#btn-vermelha).click(function() {
$(#cor).css(color,#FF0000);
});
});
</script>
</head>
<body>
<h1 id=cor>Cabealho muda de cor</h1>
<button type=button >Vermelha</button>
...
[arquivo-1.1.6d.html]
Ao contrrio das solues tradicionais com JavaScript, como vimos anterior-
mente, o uso da biblioteca jQuery no permite misturar script com marcao
HTML. Voc obrigado a inserir seu script incorporado na seo head do
documento ou escrev-lo em um arquivo separado e linkar para os documen-
tos onde sero utilizados. Como regra geral adote as mesmas diretrizes que
regem a vinculao de folhas de estilo, isto , se o seu script serve a mais de
uma pgina adote a soluo de linkar, se no, adote a soluo de incorporar
na seo head do documento.
Os quatro exemplos aqui apresentados tiveram por objetivo nico mostrar na
prtica um efeito bem simples criado de trs maneiras diferentes com JavaScript
e maneira jQuery. Caso voc no saiba nada de JavaScript no haver grandes
prejuzos para sua aprendizagem, simplesmente consulte com ateno os cdigos
e v em frente. Mas, tanto voc quanto aqueles familiarizados com JavaScript no
deixem de abrir cada uma das pginas contendo os scripts, clicar no boto l exis-
tente e olhar no cdigo fonte da pgina. Os arquivos das pginas esto no site do
livro disponveis para consulta on-line e tambm para download.
1.1.6.1 Evento window.onload
JavaScript uma tcnica de programao que funciona percorrendo e buscando
seus alvos (elementos da marcao) na rvore do documento, ou no DOM. Dito
de outra forma: um script s consegue executar sua ao se todo o documento j
tiver sido carregado. Os elementos da marcao de uma pgina s existem depois
que a pgina carregada, ou, mais precisamente, vo existindo medida que a
pgina vai sendo carregada e na seqncia em que aparecem na marcao a partir
da declarao do DOCTYPE at a tag de fechamento do elemento html.
Na prtica isso signica que se voc inserir na marcao de uma pgina um script
que se rera a um elemento h1, por exemplo, em local acima daquele no qual foi
escrito o elemento h1, o seu script no vai funcionar, porque o script ser carregado
na pgina antes do carregamento do elemento h1.
Observe, a seguir, a transcrio do terceiro exemplo mostrado no item anterior
no qual todo JavaScript foi retirado da marcao e passado para a seo head do
documento.
...
<head>
...
<style type=text/css media=all>
h1 { color:#090; }
</style>
<script type=text/javascript>
window.onload = function() {
document.getElementById(btn-vermelha).onclick = mudaCor;
};
function mudaCor() {
document.getElementById(cor).style.color = #FF0000;
};
</script>
</head>
<body>
<h1 id=cor>Cabealho muda de cor</h1>
<button type=button >Vermelha</button>
...
Vamos alterar ligeiramente o script anterior reescrevendo-o conforme mostrado
a seguir.
...
<head>
...
<style type=text/css media=all>
h1 { color:#090; }
</style>
<script type=text/javascript>
document.getElementById(btn-vermelha).onclick = mudaCor;
function mudaCor() {
document.getElementById(cor).style.color = #FF0000;
}
</script>
</head>
<body>
<h1 id=cor>Cabealho muda de cor</h1>
<button type=button >Vermelha</button>
...
[arquivo-1.1.6.1a.html]
Observe que o que zemos foi retirar do script a declarao que diz:
window.onload = function() {
...faa isso...
}
Mesmo para quem no conhece nada de JavaScript a declarao auto-explica-
tiva, pois window.onload, traduzindo para o portugus signica: depois que a janela
(documento) for carregada faa isso. Faa isso a funo mudaCor().
Agora, com a retirada que zemos o script (Faa isso...) no espera a pgina ser
carregada e em conseqncia no funciona e o boto no troca a cor do cabealho,
conforme voc pode constatar no arquivo existente no site do livro. Isso acontece
pela razo explicada anteriormente o script foi escrito antes do elemento h1 e no
foi dito para ele esperar a pgina ser carregada.
Se tirarmos o script da seo head do documento e posicionarmos ele depois dos
elementos envolvidos o script funciona normalmente. Faamos assim:
...
<head>
...
<style type=text/css media=all>
h1 { color:#090; }
</style>
</head>
<body>
<h1 id=cor>Cabealho muda de cor</h1>
<button type=button >Vermelha</button>
<script type=text/javascript>
document.getElementById(btn-vermelha).onclick = mudaCor;
function mudaCor() {
document.getElementById(cor).style.color = #FF0000;
}
</script>
...
[arquivo-1.1.6.1b.html]
E tudo volta a funcionar. Veja nos arquivos existentes no site do livro as pginas
mostrando as duas situaes descritas anteriormente.
Concluso
Para possibilitar a retirada de seus scripts da marcao HTML JavaScript dispe da
declarao window.onload que atua como uma espcie de aviso para a funo denida
na declarao entre em ao (ou comece a rodar) somente aps a pgina ter sido
completamente carregada.
Existem outros mtodos que cumprem a mesma nalidade e oferecem outras
funcionalidades, como por exemplo, permitir declarar vrias funes, mas no
do escopo desse livro aprofundar a linguagem JavaScript.
1.1.6.2 Mtodo ready()
Tal como vimos para JavaScript, jQuery que baseada nessa linguagem tambm
precisa que seus scripts conheam a rvore do documento para poder funcionar.
E a sintaxe jQuery para o equivalente ao window.onload e todas as suas variantes
mostrada a seguir.
$(document).ready(function() {
...faa isso...
});
Esta conhecida como sintaxe formal para escrita do mtodo ready().
Que signica o seguinte: quando o documento estiver pronto faa isso. Faa
isso o script a executar.
Voc pode omitir o parmetro passado para a funo construtora $() e escrever
com a seguinte sintaxe:
$().ready(function() {
...faa isso...
});
Convm ressaltar que o mtodo jQuery read() oferece duas vantagens sobre seu
equivalente JavaScript:
O script est pronto para funcionar to logo a rvore do documento tenha
sido carregada. No preciso, como ocorre com JavaScript, que todos os
componentes da pgina, tais como, imagens, folhas de estilo, animaes e
mdias em geral tenham sido carregadas. Basta que a estrutura de marcao
da pgina esteja disponvel e o script j pode funcionar.
No h variaes funcionais para o mtodo e pelo fato de jQuery no admitir
mistura de script com marcao usamos a sintaxe mostrada para servir de
container aos nossos scripts.
Existe outra sintaxe alternativa sintaxe formal mostrada anteriormente para
o mtodo ready(), chamada de sintaxe abreviada que a seguinte:
$ (function() {
...faa isso...
});
Nos cdigos desenvolvidos nesse livro adotaremos a sintaxe formal, pois consideramos que apesar
de ser mais extensa oferece melhor legibilidade, sendo em conseqncia mais fcil de ser visua-
lizada.
1.1.7 Fundamentos jQuery
A nalidade do uso de jQuery controlar comportamento de toda ou partes de uma
pgina web. Sabemos que uma pgina web nada mais do que marcao HTML.
Ento lcito concluir que o princpio de funcionamento de jQuery fundamenta-se
na sua capacidade de encontrar os elementos HTML que constituem a pgina.
1.1.7.1 Construtor jQuery
Inicialmente queremos apresent-lo ao encarregado de encontrar elementos HTML
em um documento:
$()
Tecnicamente trata-se do que chamamos em linguagem de programao de
construtor. O construtor $() ou ainda a funo construtora $() estar presente em
todos os scripts que voc escrever, portanto decore sua sintaxe, um sinal de cifro
seguido de parntesis, (o que convenhamos no to difcil assim) desde j.
Outras bibliotecas JavaScript tambm usam a funo $(). Isso pode causar
conitos e mau funcionamento de scripts quando se usa mais de uma biblioteca
no mesmo documento. Nesses casos existem mtodos para evitar conitos e um
deles usar a sintaxe alternativa que mostrada a seguir.
jQuery()
Nos cdigos desenvolvidos nesse livro adotaremos a sintaxe: $()
Simplicidade a losoa que orienta o desenvolvimento de jQuery desde sua
criao. Observe os cdigos a seguir. Voc, mesmo no conhecendo nada de jQuery,
seria capaz de concluir a nalidade de cada uma das linhas do cdigo a seguir?
$(h1);
$(p);
$(span);
$(table);
Bem simples no mesmo? Estamos instruindo nosso construtor a encontrar
todos os elementos h1, p, span e table respectivamente.
jQuery ao contrrio de JavaScript no requer loops para construir arrays quando busca elementos
no DOM. O construtor $() armazena automaticamente em um objeto array tudo que encontra.
Encontrar todos os elementos de um determinado tipo no me parece muito
til. Seria bem melhor se eu pudesse encontrar uma ocorrncia especca de um
elemento.
Por exemplo: quero encontrar o terceiro pargrafo do documento. Bem, neste
caso uma soluo seria marcar o terceiro pargrafo com o atributo id para identi-
car sua ocorrncia.
<p id=xpto>Texto do terceiro pargrafo</p>
e escrever o construtor assim:
$(#xpto)
Voc conhece CSS? No? Aconselho com muita nfase a comear a aprender
hoje mesmo, sob pena de car ultrapassado nas tcnicas de desenvolvimento web.
jQuery no exceo regra e faz amplo emprego de seletores CSS. Acredite, adota
os poderosos seletores CSS 3 para localizar elementos no DOM. E no se preocupe, o
uso de seletores CSS em jQuery nada tem a ver com suporte pelos navegadores. Use
e abuse desses seletores que seus scripts funcionaro em qualquer navegador.
Observe o cdigo a seguir.
$(body p:nth-child(3))
Aqui o construtor est usando um seletor CSS 3 que tem como alvo o terceiro
lho pargrafo do elemento body. Simples e sem necessidade de atribuir um iden-
ticador ao terceiro pargrafo como zemos anteriormente.
A verdade que jQuery usa amplamente seletores CSS e assim sendo pr-re-
quisito para bem desenvolver jQuery o conhecimento profundo desses seletores.
No apndice XX voc encontra um guia de consulta aos seletores CSS 3 que ir
ajud-lo a acompanhar os exemplos desse livro.
1.1.7.2 Encadeamento jQuery
Um conceito importante no desenvolvimento com jQuery o encadeamento. Ob-
serve a linha de cdigo a seguir.
$(h1). css(color,#FF0000).fadeOut().addClass(xpto)
No se preocupe se o cdigo parecer confuso ou ininteligvel, logo voc estar
entendendo. Vamos ler o que est escrito.
Construtor, encontre todos os elementos h1 no documento e aplique
a regra CSS que muda a cor do texto para vermelha (#FF0000), a seguir
aplique um efeito de esmaecimento (fadeOut) no texto dos h1 e adicione
a classe denominada xpto nos elementos h1.
Denomina-se encadeamento a caracterstica de se poder encadear diversos m-
todos em uma declarao. Isso possvel porque jQuery foi criado de modo a que
cada mtodo retorne um objeto pronto para receber outro mtodo que por sua vez
retornar outro objeto e assim por diante permitindo ao desenvolvedor construir
uma cadeia innita de objetos e mtodos. Em JavaScript tradicional no existe o
encadeamento o que obriga o uso de mltiplas declaraes para se conseguir um
efeito que em jQuery se consegue com uma linha de cdigo apenas.
1.1.7.3 Funes utilitrias
Servir como inspetor e selecionador de componentes do DOM, conforme vimos
anteriormente, no a nica atribuio da funo $(). jQuery prev um conjunto
de funes chamadas utilitrias que usa o sinal $ como um identicador tal qual
qualquer outro identicador previsto em JavaScript. A sintaxe para as funes uti-
litrias mostrada no exemplo a seguir.
$.browser;
ou com a opo de uso do identicador jQuery
jQuery.browser
O exemplo mostra uma funo para identicar o tipo de navegador do usurio
que equivalente funo navigator.userAgent do JavaScript.
muito pouco provvel que voc use uma funo utilitria no desenvolvi-
mento de scripts para funcionar em uma pgina web. Elas tm sua utilidade no
desenvolvimento e extenso da biblioteca jQuery, como por exemplo, na criao
de plug-ins.
1.1.7.4 Conitos com outras bibliotecas
Sem dvida a inveno de bibliotecas revigorou o uso de JavaScript no desen-
volvimento de pginas web, pois alm de tornar o processo de criao bem mais
simples, forneceu mecanismos que possibilitam criar cdigos no obstrutivos e em
conseqncia sem prejuzos para usabilidade e acessibilidade da pgina. jQuery no
detm exclusividade no campo das bibliotecas JavaScript, pelo contrrio, muitas
bibliotecas surgiram nos ltimos tempos entre elas: Prototype, MochiKit, MooTools,
Yahoo User Interface (YUI), DOMAssistant.
O identicador $ tambm no exclusividade de jQuery e outras bibliotecas fa-
zem uso dele. Se um documento usa mais de uma biblioteca provvel que ocorram
conitos com diferentes bibliotecas tentando interpretar um mesmo identicador
e estabelecendo-se uma tremenda confuso.
O sinal $ um pseudnimo, no jargo tcnico diz-se alias, para o identicador
da biblioteca. O nosso identicador jQuery, assim quando usamos essa biblioteca
$ o pseudnimo de jQuery e as duas sintaxes mostradas a seguir se equivalem.
$()
ou
jQuery()
Usar jQuery() elimina o risco de conitos, mas obriga o desenvolvedor a abrir
mo de escrever com a forma abreviada do pseudnimo.
Felizmente, para evitar conitos com outras bibliotecas, sem abrir mo de uma
forma abreviada existe a funo jQuery.noConfict() que permite entre outras funcio-
nalidades criar um pseudnimo personalizado para desenvolvimento. Trataremos
desta funo em [C2 S2.1]..