Escolar Documentos
Profissional Documentos
Cultura Documentos
Novatec
CAPTULO 1
O que jQuery?
Neste captulo, faremos uma introduo biblioteca jQuery, relatando suas origens, nalidades e destinao. Faremos um breve relato histrico de sua evoluo, examinando as motivaes que resultaram em sua criao e descreveremos algumas de suas possibilidades dando uma idia do seu potencial e mostrando a fora e poder da programao com jQuery.
John Resig no prefcio do livro jQuery in Action diz, traduzido para o portugus, o seguinte:
O foco principal da biblioteca jQuery a simplicidade. Por que submeter os desenvolvedores ao martrio de escrever longos e complexos cdigos para criar simples efeitos?
16
E, sem dvida, John Resig estava em um momento de rara inspirao quando assim escreveu, pois isso muito bem resume jQuery: uma maneira simples e fcil de escrever JavaScript colocada ao alcance no s de programadores experientes como tambm de designers e desenvolvedores com pouco conhecimento de programao. E o que torna o estudo e entendimento de jQuery mais fascinante ainda o fato de que voc, no precisa ser um profundo conhecedor de JavaScript, por mais estranho que isso possa parecer, pois se trata de uma biblioteca criada com base nesta programao. Simplicidade a palavra-chave que resume e norteia o desenvolvimento com jQuery. Linhas e mais linhas de programao JavaScript escritas para obter um determinado efeito em uma pgina so substudas por apenas uma dezena de linhas escritas com sintaxe jQuery. Intrincados e s vezes confusos cdigos JavaScript destinados a selecionar um determinado elemento HTML componente da rvore do documento so substitudos por uma linha de cdigo. Voc mesmo, ao longo da leitura desse livro ir constatar como jQuery consegue a proeza de criar extraordinrios efeitos com uma simplicidade impressionante, colocando o desenvolvimento de scripts ao seu alcance e dispor imediatos, sem exigir profundos conhecimentos de programao.
1.1.1.1 Histrico
No dia 22 de agosto de 2005 John Resig, cuja foto mostrada na gura 1.1, um desenvolvedor americano profundo conhecedor de JavaScript atuando na Corporao Mozilla e autor do livro Pro JavaScript Techniques escreveu em seu blog um artigo relatando sua frustrao com a maneira verbosa de se escrever JavaScript para obter os resultados pretendidos.
Naquele artigo publicou alguns exemplos no quais propunha o uso de seletores CSS com o objetivo de simplicar e dar maior versatilidade ao cdigo. Escreveu, ento, que aquela ainda no era uma forma denitiva do que tinha em mente, mas iria aperfeioar e testar suas propostas. O nome ainda no existia mais ali foi lanada a idia que resultaria em jQuery. Aproximadamente cinco meses aps a publicao do artigo em seu blog John Resig apresenta publicamente os resultados de seus estudos no BarCampNYC - Wrap up realizado no dia 14 de janeiro de 2006 em uma palestra sob o ttulo jQuery a nova onda para JavaScript . O ano de 2006 marcou ainda a criao do primeiro plug-in, o lanamento de uma verso no obstrutiva de LightBox usando a biblioteca jQuery, o lanamento das verses 1.0, 1.0.1, 1.0.2, 1.0.3 e 1.04, o lanamento da verso XML da biblioteca e o primeiro conteste pblico de criao com jQuery. Em 2007 foram lanadas as verses 1.1, 1.1.1, 1.1.2, 1.1.3a, 1.1.3, 1.1.3.1, 1.1.4, 1.2 e 1.2.1, no dia 11 do ms de maro aconteceu o primeiro encontro jQuery. Em 2008 at a data em que escrevi esse livro foram lanadas as verses 1.2.2, 1.2.3, 1.2.4, 1.2.5 e 1.2.6.
Algumas tcnicas para preservar a acessibilidade aos contedos incrementados com jQuery so bsicas e as abordaremos dando destaque a elas quando oportuno. Outras situaes de preservao de acessibilidade por estarem inseridas no contexto de um desenvolvimento particular no tm soluo em uma tcnica pr-estabelecida e dependem da criatividade e capacidade do desenvolvedor em resolver situaes especcas.
Sempre que for caso desenvolveremos os exemplos deste livro de forma no obstrutiva, contudo como dito anteriormente, quando esta questo depender de um contexto particular passaremos ao largo desta questo entendendo que sua avaliao e soluo depende de cada caso.
O valor do atributo src indica o caminho (diretrio) no qual se encontra gravado o arquivo da biblioteca.
A partir daqui imperativo que voc tenha gravado no seu HD a ltima verso da biblioteca para poder acompanhar os exerccios desse livro e fazer funcionar seus experimentos com jQuery, que, tenho certeza, iro fascin-lo. Entre no site ocial da biblioteca jQuery.
http://jquery.com
Observe na rea de download em destaque na gura 1.1 que existem diferentes tipos de apresentao da biblioteca para download e um link para um documento hospedado no prprio site, contendo um relatrio das modicaes introduzidas na atual verso. A apresentao denominada Uncompressed jquery-1.2.6.js relacionada na segunda posio da lista apresentada na gura 1.1 anterior destina-se ao uso em testes, estudos e desenvolvimento da biblioteca. Trata-se de um arquivo no qual o texto do script foi escrito com espao entre cada linha de cdigo, amplamente comentado o que facilita a leitura e compreenso do arquivo. Esta a apresentao recomendada para voc baixar e fazer uso nos estudos e acompanhamento dos experimentos desenvolvidos neste livro. O tamanho deste arquivo de 97kB. As duas outras apresentaes so para uso em produo. A apresentao denominada Packed jquery-1.2.6.mini.js difere da anterior por terem sido removidos todos os comentrios e espaamentos entre linhas e declaraes, tornando o cdigo difcil de ler para humanos, pois se transforma em uma seqncia corrida de cdigo, sem quebras de linha. Esta a apresentao recomendada para ser usada no desenvolvimento de sites. A vantagem sobre a verso anterior que se trata do
mesmo arquivo com tamanho reduzido para 30kB. Finalmente, a apresentao denominada Minied and Gzipped jquery uma compresso da biblioteca resultando em um arquivo com tamanho igual a 16kB. O uso dessa apresentao depende da capacidade de descompresso de arquivos JavaScript e est fora do escopo deste livro relatar como isso funciona. Use esta apresentao se voc sabe como funciona compresso/descompresso de arquivos JavaScript.
1.2.6.pack.js
A partir daqui, para testar os exemplos do livro, consideraremos que voc baixou e gravou no seu HD a apresentao Uncompressed jquery-1.2.6.js da biblioteca para ser chamada pelas pginas de estudos conforme explicado anteriormente.
[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 largamente 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 comportamento e tal como a anterior deve ser evitada.
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 incorporamos 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.
[arquivo-1.1.6d.html] Ao contrrio das solues tradicionais com JavaScript, como vimos anteriormente, 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 documentos 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 existente 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.
[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-explicativa, 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.
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
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 visualizada.
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()
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 identicar sua ocorrncia.
<p id=xpto>Texto do terceiro pargrafo</p>
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 identicador ao terceiro pargrafo como zemos anteriormente. A verdade que jQuery usa amplamente seletores CSS e assim sendo pr-requisito 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.
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 mtodos 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.
$.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 desenvolvimento 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.
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.noConflict() que permite entre outras funcionalidades criar um pseudnimo personalizado para desenvolvimento. Trataremos desta funo em [C2 S2.1]..