{"id":286,"date":"2013-09-10T13:17:31","date_gmt":"2013-09-10T16:17:31","guid":{"rendered":"http:\/\/gianfratti.com\/?p=286"},"modified":"2013-09-10T13:18:04","modified_gmt":"2013-09-10T16:18:04","slug":"truques-e-dicas-para-jquery","status":"publish","type":"post","link":"https:\/\/gianfratti.com\/index.php\/truques-e-dicas-para-jquery\/","title":{"rendered":"Truques e dicas para jQuery"},"content":{"rendered":"<h1>25 Excelentes truques e dicas para jQuery<\/h1>\n<p><!--more--><\/p>\n<p><b><a href=\"http:\/\/ericdfields.com\/pull-jquery-from-google-code-make-it-a-textmate-snippet\/\">1 &#8211; Carregue o conte\u00fado pelo Google Code<\/a><\/b><br \/>\nSe voc\u00ea utiliza sempre o jQuery em seus sites, uma excelente maneira de acelerar o carregamento \u00e9 usar o arquivo jquery-1.2.6.pack.js <a href=\"http:\/\/code.google.com\/apis\/ajaxlibs\/documentation\/index.html\">diretamente do Google Code<\/a>. Al\u00e9m de diminuir o gasto com banda, o navegador do usu\u00e1rio faz cache do arquivo entre os v\u00e1rios sites que usam essa t\u00e9cnica o que dar\u00e1 uma experi\u00eancia de navega\u00e7\u00e3o melhor para o visitante.<\/p>\n<p>O Google tem uma infra-estrutura de espelhamento ao redor do mundo, sendo o mais r\u00e1pido e melhor <a href=\"http:\/\/en.wikipedia.org\/wiki\/Content_Delivery_Network\">servi\u00e7o de distribui\u00e7\u00e3o de conte\u00fado<\/a> (ou CDN para os \u00edntimos).<\/p>\n<p>Aproveite os milh\u00f5es de computadores do Google e fa\u00e7a com que o jQuery seja carregado de l\u00e1.<\/p>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>&lt;script src=&#8221;http:\/\/ajax.googleapis.com\/ajax\/libs\/jquery\/1.5.1\/jquery.min.js&#8221; type=&#8221;text\/javascript&#8221;&gt;&lt;\/script&gt;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/gist.github.com\/dirs\/38809\/raw\/fafdfd9047ae067e562d75fade55db0d34907f64\/gistfile1.js\"><b>view raw<\/b><\/a> <a href=\"https:\/\/gist.github.com\/dirs\/38809#file-gistfile1-js\"><b>gistfile1.js<\/b><\/a> hosted with \u2764 by <a href=\"https:\/\/github.com\"><b>GitHub<\/b><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Tem at\u00e9 <a href=\"http:\/\/ericdfields.com\/pull-jquery-from-google-code-make-it-a-textmate-snippet\/\">como transformar a tag de script do jQuery em snippet para TextMate<\/a>.<\/p>\n<p><b><a href=\"http:\/\/colorcharge.com\/jquery\/\">2 &#8211; Use uma tabela de refer\u00eancias<\/a><\/b><br \/>\n\u00c9 sempre bom achar o mais r\u00e1pido possivel aquela fun\u00e7\u00e3o que executa seu trabalho, n\u00e9? <a href=\"http:\/\/colorcharge.com\/jquery\/\">Este site possui<\/a> uma excelente tabela para buscas r\u00e1pidas.<\/p>\n<p><b><a href=\"http:\/\/www.scriptalizer.com\/\">3 &#8211; Combine e minimize todos seus scripts<\/a><\/b><br \/>\nUse para isso o <a href=\"http:\/\/developer.yahoo.com\/yui\/compressor\/\">YUI Compressor<\/a> do Yahoo!<\/p>\n<p><b><a href=\"http:\/\/getfirebug.com\/console.html\">4 &#8211; Use as funcionalidades extras de log do Firebug.<\/a><\/b><br \/>\nUse a fun\u00e7\u00e3o <a href=\"http:\/\/getfirebug.com\/console.html\">console.log(Object)<\/a> do Firebug para escrever mensagens no console, muito melhor que alert(&#8220;&#8221;).<\/p>\n<p>O Firebug facilita acesso as propriedades dos objetos. Como elementos DOM s\u00e3o sempre objetos, estamos tratando deles o tempo todo.<\/p>\n<p><a href=\"http:\/\/getfirebug.com\/lite.html\">O Firebug tamb\u00e9m pode ser usado com Internet Explorer.<\/a><\/p>\n<p><b>5 &#8211; Use menos fun\u00e7\u00f5es de sele\u00e7\u00e3o, fa\u00e7a cache.<\/b><\/p>\n<p>&nbsp;<\/p>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>for (i = 0; i &lt; 1000; i++) {var minhaLista = $(&#8216;.minhaLista&#8217;); \/\/ seleciona 1000 vezesminhaLista.append(&#8216;Esse \u00e9 o elemento &#8216; + i);<\/p>\n<p>}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/gist.github.com\/dirs\/38459\/raw\/f21ac52ad9ae76f9c84af2ae6b06dad7bd7c0e82\/gistfile1.js\"><b>view raw<\/b><\/a> <a href=\"https:\/\/gist.github.com\/dirs\/38459#file-gistfile1-js\"><b>gistfile1.js<\/b><\/a> hosted with \u2764 by <a href=\"https:\/\/github.com\"><b>GitHub<\/b><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Em um computador atual isso n\u00e3o demora nada, mas lembre-se que o usu\u00e1rio utiliza equipamentos muito piores que seu Macbook Pro. Imagine eles em seus <a href=\"http:\/\/pomoti.com\/jquery-touch-desenvolvimento-web-para-iphone\">fracos iPhones, ou pior ainda, em um Opera Mobile<\/a>.<\/p>\n<p>Ent\u00e3o mantenha o seletor fora do loop:<\/p>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>var minhaLista = $(&#8216;.minhaLista&#8217;); \/\/ seleciona 1 vezfor (i = 0; i &lt; 1000; i++) {<\/p>\n<p>minhaLista.append(&#8216;Esse \u00e9 o elemento &#8216; + i);<\/p>\n<p>}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/gist.github.com\/dirs\/38520\/raw\/cef65769f2eff32e92080cd1bffabde1c1000e61\/gistfile1.js\"><b>view raw<\/b><\/a> <a href=\"https:\/\/gist.github.com\/dirs\/38520#file-gistfile1-js\"><b>gistfile1.js<\/b><\/a> hosted with \u2764 by <a href=\"https:\/\/github.com\"><b>GitHub<\/b><\/a><\/p>\n<p>&nbsp;<\/p>\n<p><b>6 &#8211; Use o minimo possivel de manipula\u00e7\u00e3o com o DOM<\/b><br \/>\nFun\u00e7\u00f5es como .append(), .prepend(), .after(), .before() s\u00e3o relativamente custosas e podem deixar as coisas lentas.<\/p>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>var minhaLista = $(&#8216;.minhaLista&#8217;);for (i = 0; i &lt; 1000; i++) {<\/p>\n<p>minhaLista.append(&#8216;Esse \u00e9 o elemento &#8216; + i);<\/p>\n<p>}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/gist.github.com\/dirs\/38463\/raw\/9ad89e4265208e704b25440e14feb974a10aa993\/gistfile1.js\"><b>view raw<\/b><\/a> <a href=\"https:\/\/gist.github.com\/dirs\/38463#file-gistfile1-js\"><b>gistfile1.js<\/b><\/a> hosted with \u2764 by <a href=\"https:\/\/github.com\"><b>GitHub<\/b><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>\u00c9 consideravelmente lenta perto de:<\/p>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>var meusItens = &#8221;;for (i = 0; i &lt; 1000; i++) {<\/p>\n<p>meusItens += &#8216;&lt;li&gt;Esse \u00e9 o elemento &#8216; + i + &#8216;&lt;\/li&gt;&#8217;;<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>$(&#8216;.minhaLista&#8217;).html(meusItems);<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/gist.github.com\/dirs\/38468\/raw\/446e49f2b8dfd054b1549bd259ffdd0cd4e3f07d\/gistfile1.js\"><b>view raw<\/b><\/a> <a href=\"https:\/\/gist.github.com\/dirs\/38468#file-gistfile1-js\"><b>gistfile1.js<\/b><\/a> hosted with \u2764 by <a href=\"https:\/\/github.com\"><b>GitHub<\/b><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Escrever no DOM somente uma vez \u00e9 um pouco mais r\u00e1pido. J\u00e1 que aqui estamos mesmo lutando por optimiza\u00e7\u00f5es (lembrem-se dos mobiles), vale n\u00e9?<\/p>\n<p><b>7 &#8211; Coloque tudo dentro de um elemento antes de fazer uma inser\u00e7\u00e3o ao DOM<\/b><\/p>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>var meusItens = &#8221;;for (i = 0; i &lt; 1000; i++) {<\/p>\n<p>meusItens += &#8216;&lt;li&gt;Esse \u00e9 o elemento &#8216; + i + &#8216;&lt;\/li&gt;&#8217;;<\/p>\n<p>}<\/p>\n<p>&nbsp;<\/p>\n<p>$(&#8216;.minhaLista&#8217;).html(&#8216;&lt;ul&gt;&#8217; + meusItens + &#8216;&lt;\/ul&gt;&#8217;);<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/gist.github.com\/dirs\/38470\/raw\/cf6fe9fc9ba7a96100bb0eb970e503a07521bf83\/gistfile1.js\"><b>view raw<\/b><\/a> <a href=\"https:\/\/gist.github.com\/dirs\/38470#file-gistfile1-js\"><b>gistfile1.js<\/b><\/a> hosted with \u2764 by <a href=\"https:\/\/github.com\"><b>GitHub<\/b><\/a><\/p>\n<p>&nbsp;<\/p>\n<p><b>8 &#8211; Use IDs em vez de classes sempre que possivel<\/b><br \/>\nA fun\u00e7\u00e3o de busca por com <a href=\"http:\/\/www.w3.org\/TR\/css3-selectors\/\">CSS3 Selector<\/a> \u00e9 muito legal de se usar, mas o jQuery implementa ela em JavaScript, e usando <i>o m\u00e1ximo<\/i> que a API do DOM deixa. Isso as vezes n\u00e3o \u00e9 o ideal para performance, acredite.<\/p>\n<p>Navegadores como o WebKit j\u00e1 possuem implementa\u00e7\u00e3o nativa dessa fun\u00e7\u00e3o, indo de acordo com o que foi pensado no framework <a href=\"http:\/\/www.prototypejs.org\/\">Prototype<\/a>, mas lembre-se, em desktop\/notebook a hegemonia \u00e9 de quem n\u00e3o IEmplementa novidades t\u00e3o cedo.<\/p>\n<p>No mercado de mobile, WebKit e Opera lutam para ver quem tem o maior numero de especifica\u00e7\u00f5es da W3C implementadas.<\/p>\n<p>Uma busca por ID no DOM quase sempre \u00e9 mais eficiente que a busca por classe, prefira sempre usar ID.<\/p>\n<p><b>9 &#8211; D\u00ea um contexto para seus seletores<\/b><br \/>\nEu tenho d\u00favidas quanto a efic\u00e1cia de contextualizar os seletores via Javascript, comparada ao uso de contexto no CSS3. De qualquer forma as seguintes formas de uso s\u00e3o mais r\u00e1pidas do que buscar um elemento no documento inteiro.<\/p>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>jQuery( expression, contexto );$(&#8216;contexto&#8217;).find(&#8216;expression&#8217;);$(&#8216;contexto expression&#8217;);<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/gist.github.com\/dirs\/38511\/raw\/4106a50aa5d6e0db51536c84bc5d23aef88b103d\/gistfile1.js\"><b>view raw<\/b><\/a> <a href=\"https:\/\/gist.github.com\/dirs\/38511#file-gistfile1-js\"><b>gistfile1.js<\/b><\/a> hosted with \u2764 by <a href=\"https:\/\/github.com\"><b>GitHub<\/b><\/a><\/p>\n<p>&nbsp;<\/p>\n<p><b>10 &#8211; Use encadeamento de fun\u00e7\u00f5es<\/b><br \/>\nUma das caracter\u00edsticas mais legais do jQuery \u00e9 a possibilidade de encadear m\u00e9todos. Ent\u00e3o, por exemplo, se voc\u00ea deseja alterar a classe de um elemento:<\/p>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>$(&#8216;#minhaDiv&#8217;).removeClass(&#8216;desliga&#8217;).addClass(&#8216;liga&#8217;);<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/gist.github.com\/dirs\/38483\/raw\/c026b0c2c7ec2306032035ab87aec197f7179d90\/gistfile1.js\"><b>view raw<\/b><\/a> <a href=\"https:\/\/gist.github.com\/dirs\/38483#file-gistfile1-js\"><b>gistfile1.js<\/b><\/a> hosted with \u2764 by <a href=\"https:\/\/github.com\"><b>GitHub<\/b><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Provavelmente voc\u00ea aprendeu isso em seus primeiros 5 minutos de leitura sobre jQuery.<br \/>\nNote que continua funcionando mesmo com quebras de linhas (jQuery == JavaScript), o que significa que voc\u00ea pode escrever c\u00f3digo assim:<\/p>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>$(&#8216;#meuPainel&#8217;).find(&#8216;TABLE .primeiraColuna&#8217;).removeClass(&#8216;.primeiraColuna&#8217;)<\/p>\n<p>.css(&#8216;background&#8217;, &#8216;red&#8217;)<\/p>\n<p>.append(&#8216;&lt;span&gt;Essa celula agora \u00e9 vermelha&lt;\/span&gt;&#8217;);<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/gist.github.com\/dirs\/38494\/raw\/39e9db9043ef8b0b374bddcf44182ddc67cee176\/gistfile1.js\"><b>view raw<\/b><\/a> <a href=\"https:\/\/gist.github.com\/dirs\/38494#file-gistfile1-js\"><b>gistfile1.js<\/b><\/a> hosted with \u2764 by <a href=\"https:\/\/github.com\"><b>GitHub<\/b><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Usar encadeamento tamb\u00e9m ajuda a diminuir a quantidade de seletores.<\/p>\n<p><b>Mas ainda \u00e9 possivel ir al\u00e9m.<\/b> Digamos que voc\u00ea deseja executar v\u00e1rias fun\u00e7\u00f5es em um elemento mas uma das primeiras fun\u00e7\u00f5es muda o elemento selecionado de alguma maneira:<\/p>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>$(&#8216;#minhaTabela&#8217;).find(&#8216;.primeiraColuna&#8217;).css(&#8216;background&#8217;,&#8217;red&#8217;);<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/gist.github.com\/dirs\/38793\/raw\/f37c8f1ab16fb91eca91fde8c3607ba16cf80aad\/gistfile1.js\"><b>view raw<\/b><\/a> <a href=\"https:\/\/gist.github.com\/dirs\/38793#file-gistfile1-js\"><b>gistfile1.js<\/b><\/a> hosted with \u2764 by <a href=\"https:\/\/github.com\"><b>GitHub<\/b><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>N\u00f3s selecionamos uma tabela, descemos para buscar celulas com a classe &#8220;primeiraColuna&#8221; e ent\u00e3o a pintamos de vermelho.<\/p>\n<p>Digamos agora que queremos colorir todas celulas com a classe &#8220;ultimaColuna&#8221; de azul. J\u00e1 que usamos o m\u00e9todo find(), filtramos todas as c\u00e9lulas que n\u00e3o tinham a classe &#8220;primeiraColuna&#8221;, assim seria necessario o uso de um seletor novamente ou ent\u00e3o n\u00e3o poderiamos continuar encadeando, certo? Nah! O jQuery possui o metodo end() que reverte a \u00faltima sele\u00e7\u00e3o, ent\u00e3o voc\u00ea pode continuar encadeando tipo:<\/p>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>$(&#8216;#minhaTabela&#8217;).find(&#8216;.primeiraColuna&#8217;).css(&#8216;background&#8217;,&#8217;red&#8217;)<\/p>\n<p>.end()<\/p>\n<p>.find(&#8216;.ultimaColuna&#8217;)<\/p>\n<p>.css(&#8216;background&#8217;,&#8217;blue&#8217;);<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/gist.github.com\/dirs\/38498\/raw\/11d965eab06a1d672e88f73cbce1b0f9e342b1ef\/gistfile1.js\"><b>view raw<\/b><\/a> <a href=\"https:\/\/gist.github.com\/dirs\/38498#file-gistfile1-js\"><b>gistfile1.js<\/b><\/a> hosted with \u2764 by <a href=\"https:\/\/github.com\"><b>GitHub<\/b><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>\u00c9 tamb\u00e9m mais f\u00e1cil do que voc\u00ea imagina escrever suas fun\u00e7\u00f5es de forma que elas possam usar encadeamento.<\/p>\n<p>Tudo que voc\u00ea precisa \u00e9 fazer que suas fun\u00e7\u00f5es modifiquem e <b>retornem<\/b> o mesmo elemento.<\/p>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>$.fn.facaVermelho = function() {return $(this).css(&#8216;background&#8217;, &#8216;red&#8217;);}<\/p>\n<p>&nbsp;<\/p>\n<p>$(&#8216;#minhaTabela&#8217;).find(&#8216;.primeiraColuna&#8217;).facaVermelho().append(&#8216;oi&#8217;);<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/gist.github.com\/dirs\/38537\/raw\/6fbc0da2d0082658e27d90b5c2027fa4f4e96877\/gistfile1.js\"><b>view raw<\/b><\/a> <a href=\"https:\/\/gist.github.com\/dirs\/38537#file-gistfile1-js\"><b>gistfile1.js<\/b><\/a> hosted with \u2764 by <a href=\"https:\/\/github.com\"><b>GitHub<\/b><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Bem legal!<\/p>\n<p><b>11 &#8211; Saiba como usar a propriedade de anima\u00e7\u00e3o<\/b><br \/>\nQuando eu comecei usar o jQuery eu adorei o fato de que \u00e9 f\u00e1cil usar anima\u00e7\u00f5es pr\u00e9-definidas como slideDown() e fadeIn() para conseguir alguns efeitos com incr\u00edvel facilidade.<\/p>\n<p>\u00c9 tamb\u00e9m f\u00e1cil ir ainda al\u00e9m por causa da facilidade que \u00e9 usar o poderoso m\u00e9todo animate().<\/p>\n<p>Se voc\u00ea olhar os metodos slideDown() e fadeIn() dentro do framework ver\u00e1 que s\u00e3o apenas atalhos para o metodo animate().<\/p>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>slideDown: function(speed,callback){return this.animate({height: &#8220;show&#8221;}, speed, callback);},<\/p>\n<p>fadeIn: function(speed, callback){<\/p>\n<p>return this.animate({opacity: &#8220;show&#8221;}, speed, callback);<\/p>\n<p>}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/gist.github.com\/dirs\/38548\/raw\/6e6d1f33494d676acc48336b358e4373d1dd6b47\/gistfile1.js\"><b>view raw<\/b><\/a> <a href=\"https:\/\/gist.github.com\/dirs\/38548#file-gistfile1-js\"><b>gistfile1.js<\/b><\/a> hosted with \u2764 by <a href=\"https:\/\/github.com\"><b>GitHub<\/b><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>O m\u00e9todo animate() simplesmente pega qualquer estilo de CSS e aplica transi\u00e7\u00f5es de um valor a outro. Ent\u00e3o as mudan\u00e7as nas propriedades width, height, opacity, background-color, top, left, margin, color, font-size e qualquer outra que voc\u00ea quiser podem ter anima\u00e7\u00f5es!<\/p>\n<p>\u00c9 muito f\u00e1cil animar todos itens do seu menu para 100 pixels usando isso.<\/p>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>$(&#8216;#myList li&#8217;).mouseover(function() {$(this).animate({&#8220;height&#8221;: 100}, &#8220;slow&#8221;);});<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/gist.github.com\/dirs\/38552\/raw\/5fb86c7bfeeabfc1ff4117bf1ef7d0a04aae3c43\/gistfile1.js\"><b>view raw<\/b><\/a> <a href=\"https:\/\/gist.github.com\/dirs\/38552#file-gistfile1-js\"><b>gistfile1.js<\/b><\/a> hosted with \u2764 by <a href=\"https:\/\/github.com\"><b>GitHub<\/b><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Diferentemente de outras fun\u00e7\u00f5es do jQuery, as anima\u00e7\u00f5es s\u00e3o colocadas em fila de execu\u00e7\u00e3o automaticamente. Se voc\u00ea quiser rodar uma segunda anima\u00e7\u00e3o somente quando a primeira terminar, ent\u00e3o \u00e9 s\u00f3 chamar o m\u00e9todo novamente sem precisar usar um callback.<\/p>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>$(&#8216;#myBox&#8217;).mouseover(function() {$(this).animate({ &#8220;width&#8221;: 200 }, &#8220;slow&#8221;);$(this).animate({&#8220;height&#8221;: 200}, &#8220;slow&#8221;);<\/p>\n<p>});<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/gist.github.com\/dirs\/38558\/raw\/294129797aee8f287dd6fc39a9a1664ab103debc\/gistfile1.js\"><b>view raw<\/b><\/a> <a href=\"https:\/\/gist.github.com\/dirs\/38558#file-gistfile1-js\"><b>gistfile1.js<\/b><\/a> hosted with \u2764 by <a href=\"https:\/\/github.com\"><b>GitHub<\/b><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Por\u00e9m, se voc\u00ea voc\u00ea desejar que as anima\u00e7\u00f5es ocorram no mesmo tempo, ent\u00e3o insira ambas na mesma chamada assim:<\/p>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>$(&#8216;#myBox&#8217;).mouseover(function() {$(this).animate({ &#8220;width&#8221;: 200, &#8220;height&#8221;: 200 }, &#8220;slow&#8221;);});<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/gist.github.com\/dirs\/38559\/raw\/76c9a6a47b2e93c6b3327634056cd5c2139b72a5\/gistfile1.js\"><b>view raw<\/b><\/a> <a href=\"https:\/\/gist.github.com\/dirs\/38559#file-gistfile1-js\"><b>gistfile1.js<\/b><\/a> hosted with \u2764 by <a href=\"https:\/\/github.com\"><b>GitHub<\/b><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Voc\u00ea pode animar tanto propriedades num\u00e9ricas quanto <a href=\"http:\/\/plugins.jquery.com\/project\/color\">cores e cores de fundo, leia mais sobre isso<\/a>.<\/p>\n<p><b>12 &#8211; Conhe\u00e7a sobre delega\u00e7\u00e3o de eventos<\/b><br \/>\nO jQuery torna f\u00e1cil adicionar eventos em elementos do DOM de forma inobstrusiva, o que \u00e9 muito bom, mas adicionar muitos eventos \u00e9 ineficiente. A delega\u00e7\u00e3o de eventos permite que voc\u00ea adicione em muitas situa\u00e7\u00f5es menos eventos e atinja o mesmo resultado:<\/p>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>$(&#8216;#minhaTabela TD&#8217;).click(function(){$(this).css(&#8216;background&#8217;, &#8216;red&#8217;);});<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/gist.github.com\/dirs\/38567\/raw\/ebb9d3b2c86364180b2dcdf54f06d004448aa83c\/gistfile1.js\"><b>view raw<\/b><\/a> <a href=\"https:\/\/gist.github.com\/dirs\/38567#file-gistfile1-js\"><b>gistfile1.js<\/b><\/a> hosted with \u2764 by <a href=\"https:\/\/github.com\"><b>GitHub<\/b><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Vamos fazer uma fun\u00e7\u00e3o simples para tornar uma celula da tabela vermelha quando voc\u00ea clicar nela. Digamos que voc\u00ea tenha uma tabela com 10 colunas e 50 linhas, ent\u00e3o s\u00e3o 500 delega\u00e7\u00f5es de eventos.<\/p>\n<p>N\u00e3o seria melhor se fosse possivel agregar o evento somente uma vez e ent\u00e3o quando a tabela fosse clicada, chegar ao elemento que realmente foi clicado antes desse se tornar vermelho?<\/p>\n<p>Para isso \u00e9 que serve a delega\u00e7\u00e3o de eventos e isso \u00e9 simples de implementar&#8230;<\/p>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>$(&#8216;#minhaTabela&#8217;).click(function(e) {var clicado = $(e.target);clicado.css(&#8216;background&#8217;, &#8216;red&#8217;);<\/p>\n<p>});<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/gist.github.com\/dirs\/38574\/raw\/74767db07bdd1c7b738891ac890e0dafb9118fbf\/gistfile1.js\"><b>view raw<\/b><\/a> <a href=\"https:\/\/gist.github.com\/dirs\/38574#file-gistfile1-js\"><b>gistfile1.js<\/b><\/a> hosted with \u2764 by <a href=\"https:\/\/github.com\"><b>GitHub<\/b><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Muito \u00fatil, para por exemplo, manipular <a href=\"http:\/\/pomoti.com\/jquery-touch-desenvolvimento-web-para-iphone\">eventos de touch<\/a>.<\/p>\n<p><b>13 &#8211; Use classes (ou atributos) para armazenar estado<\/b><\/p>\n<p>Essa \u00e9 a maneira mais b\u00e1sica de guardar informa\u00e7\u00e3o sobre um bloco de HTML. O jQuery facilita a manipula\u00e7\u00e3o de elementos utilizando classes, ent\u00e3o se voc\u00ea precisa armazenar informa\u00e7\u00f5es sobre o estado de um elemento, por que n\u00e3o adicionar uma classe extra nele?<\/p>\n<p>Aqui vai um exemplo. N\u00f3s queremos criar um menu que expande. Quando voc\u00ea clica no bot\u00e3o n\u00f3s queremos que o painel des\u00e7a &#8211; slideDown() &#8211; quando ele tiver fechado, e que suba &#8211; slideUp() &#8211; quando estiver aberto.<\/p>\n<p>Vamos come\u00e7ar com o HTML<\/p>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>&lt;div&gt;&lt;div&gt;click me&lt;\/div&gt;&lt;div&gt;<\/p>\n<p>&lt;ul&gt;<\/p>\n<p>&lt;li&gt;Item do menu 1&lt;\/li&gt;<\/p>\n<p>&lt;li&gt;Item do menu 2&lt;\/li&gt;<\/p>\n<p>&lt;li&gt;Item do menu 3&lt;\/li&gt;<\/p>\n<p>&lt;\/ul&gt;<\/p>\n<p>&lt;\/div&gt;<\/p>\n<p>&lt;\/div&gt;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/gist.github.com\/dirs\/38580\/raw\/420588360e265f3212321b91fa4acecfd7782396\/gistfile1.js\"><b>view raw<\/b><\/a> <a href=\"https:\/\/gist.github.com\/dirs\/38580#file-gistfile1-js\"><b>gistfile1.js<\/b><\/a> hosted with \u2764 by <a href=\"https:\/\/github.com\"><b>GitHub<\/b><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Simples \ud83d\ude42<br \/>\nN\u00f3s adicionamos uma classe extra na div de fora, que n\u00e3o possui outro proposito a n\u00e3o ser armazenar o estado do item. Ent\u00e3o, tudo que precisamos \u00e9 um evento de clique &#8211; click &#8211; para chamar o slideUp() ou o slideDown() no painel correspondente quando o bot\u00e3o \u00e9 clicado.<\/p>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>$(&#8216;.botao&#8217;).click(function() {var menu_item = $(this).parent();var painel = menu_item.find(&#8216;.painel&#8217;);<\/p>\n<p>&nbsp;<\/p>\n<p>if (menu_item.hasClass(&#8220;expandido&#8221;)) {<\/p>\n<p>menu_item.removeClass(&#8216;expandido&#8217;).addClass(&#8216;colapsado&#8217;);<\/p>\n<p>painel.slideUp();<\/p>\n<p>} else if (menu_item.hasClass(&#8220;colapsado&#8221;)) {<\/p>\n<p>menu_item.removeClass(&#8216;colapsado&#8217;).addClass(&#8216;expandido&#8217;);<\/p>\n<p>painel.slideDown();<\/p>\n<p>}<\/p>\n<p>});<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/gist.github.com\/dirs\/38587\/raw\/288a335487a28e7c1e0fdced58e2641d559fd29c\/gistfile1.js\"><b>view raw<\/b><\/a> <a href=\"https:\/\/gist.github.com\/dirs\/38587#file-gistfile1-js\"><b>gistfile1.js<\/b><\/a> hosted with \u2764 by <a href=\"https:\/\/github.com\"><b>GitHub<\/b><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Esse \u00e9 um exemplo bem simples, mas voc\u00ea pode adicionar classes extras para armazenar todos tipos de informa\u00e7\u00f5es sobre um elemento DOM (peda\u00e7o de HTML).<\/p>\n<p>De qualquer forma, melhor ainda \u00e9 a pr\u00f3xima dica.<\/p>\n<p><b>14 &#8211; Melhor ainda, use o m\u00e9todo data() que \u00e9 interno do jQuery para armazenar estados<\/b><\/p>\n<p>O jQuery possui um metodo interno chamado data() que pode ser usado para armazenar informa\u00e7\u00f5es de chave\/valor sobre qualquer elemento DOM. Armazenar um pouco de informa\u00e7\u00e3o \u00e9 simples assim:<\/p>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>$(&#8216;#minhaDiv&#8217;).data(&#8216;estadoAtual&#8217;, &#8216;desligado&#8217;);<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/gist.github.com\/dirs\/38796\/raw\/40f3ec36cd54e3568b8c374d896554688c2f78bf\/gistfile1.js\"><b>view raw<\/b><\/a> <a href=\"https:\/\/gist.github.com\/dirs\/38796#file-gistfile1-js\"><b>gistfile1.js<\/b><\/a> hosted with \u2764 by <a href=\"https:\/\/github.com\"><b>GitHub<\/b><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>N\u00f3s podemos usar o exemplo da dica anterior. Vamos utilizar o mesmo HTML, por\u00e9m ao inv\u00e9z da classe &#8220;expandido&#8221; usamos o metodo data().<\/p>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>$(&#8216;.botao&#8217;).click(function() {var item_menu = $(this).parent();<\/p>\n<p>var painel = item_menu.find(&#8216;.painel&#8217;);<\/p>\n<p>&nbsp;<\/p>\n<p>if (item_menu.data(&#8216;colapsado&#8217;)) {<\/p>\n<p>item_menu.data(&#8216;colapsado&#8217;, false);<\/p>\n<p>painel.slideDown();<\/p>\n<p>} else {<\/p>\n<p>item_menu.data(&#8216;colapsado&#8217;, true);<\/p>\n<p>painel.slideUp();<\/p>\n<p>}<\/p>\n<p>});<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/gist.github.com\/dirs\/38801\/raw\/104edbe4bfe1202b97b0892ef1ae359541f90831\/gistfile1.js\"><b>view raw<\/b><\/a> <a href=\"https:\/\/gist.github.com\/dirs\/38801#file-gistfile1-js\"><b>gistfile1.js<\/b><\/a> hosted with \u2764 by <a href=\"https:\/\/github.com\"><b>GitHub<\/b><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Para mais informa\u00e7\u00f5es sobre os metodos data() e removeData() <a href=\"http:\/\/docs.jquery.com\/Internals\">veja a documenta\u00e7\u00e3o<\/a>.<\/p>\n<p><b>15 &#8211; Escreva seu proprio seletor<\/b><\/p>\n<p>O jQuery possui v\u00e1rios seletores prontos para ajudar na sele\u00e7\u00e3o de elementos pelo ID, class, tag, atributo e muito mais. Mas o que fazemos quando \u00e9 preciso usar seletores que v\u00e3o al\u00e9m do que o jQuery deixa?<\/p>\n<p>Bom, uma possivel solu\u00e7\u00e3o seria adicionar classes nos elementos e usa-las para seleciona-los. Uma outra maneira \u00e9 extender os seletores assim:<\/p>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>$.extend($.expr[&#8216;:&#8217;], {mais100px: function(a) {return $(a).height() &gt; 100;<\/p>\n<p>}<\/p>\n<p>});<\/p>\n<p>&nbsp;<\/p>\n<p>$(&#8216;.box:mais100px&#8217;).click(function() {<\/p>\n<p>alert(&#8216;O elemento que voc\u00ea clicou possui mais de 100 pixels de altura&#8217;);<\/p>\n<p>});<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/gist.github.com\/dirs\/38805\/raw\/ad001b508b6abdff4fcf9aad78366c339e09bad9\/gistfile1.js\"><b>view raw<\/b><\/a> <a href=\"https:\/\/gist.github.com\/dirs\/38805#file-gistfile1-js\"><b>gistfile1.js<\/b><\/a> hosted with \u2764 by <a href=\"https:\/\/github.com\"><b>GitHub<\/b><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Primeiro criamos um seletor que acha qualquer elemento que \u00e9 maior que 100 pixels. Depois usamos isso para adicionar uma a\u00e7\u00e3o de clique &#8211; click &#8211; em todos esses elementos.<\/p>\n<p>Mais exemplos dessa funcionalidade <a href=\"http:\/\/www.ericmmartin.com\/creating-a-custom-jquery-selector\/\">voc\u00ea pode<\/a> <a href=\"http:\/\/debuggable.com\/posts\/getting-serious-with-jquery-adding-custom-css-selectors:480f4dd6-e834-4cf6-a5cc-478ccbdd56cb\">pegar aqui<\/a>.<\/p>\n<p><b>16 &#8211; Use as fun\u00e7\u00f5es de auxilio do jQuery<\/b><\/p>\n<p>O jQuery j\u00e1 quebra um galho ao facilitar a manipula\u00e7\u00e3o de elementos DOM, mas tamb\u00e9m adiciona metodos uteis para iterar, filtrar, clonar, juntar arrays ou remover elementos duplicados.<\/p>\n<p>Vale a pena passar um tempinho na <a href=\"http:\/\/docs.jquery.com\/Utilities\">p\u00e1gina que explica essas utilizades<\/a>.<\/p>\n<p><b>17 &#8211; Use a fun\u00e7\u00e3o &#8220;noconflict&#8221; para evitar conflitos com outros frameworks<\/b><\/p>\n<p>A maioria dos frameworks para JavaScript usam o simbolo $ como atalho. Para evitar problemas existe uma solu\u00e7\u00e3o simples, a fun\u00e7\u00e3o .noconflict() que permite definir outro atalho para o framework:<\/p>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>var $j = jQuery.noConflict();$j(&#8216;#minhaDiv&#8217;).hide();<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/gist.github.com\/dirs\/39517\/raw\/2229d28b6da072f89103dee11492ab21b3ab4345\/gistfile1.js\"><b>view raw<\/b><\/a> <a href=\"https:\/\/gist.github.com\/dirs\/39517#file-gistfile1-js\"><b>gistfile1.js<\/b><\/a> hosted with \u2764 by <a href=\"https:\/\/github.com\"><b>GitHub<\/b><\/a><\/p>\n<p>&nbsp;<\/p>\n<p><b>18 &#8211; Use fun\u00e7\u00e3o anonima para evitar conflitos com outros frameworks<\/b><\/p>\n<p>Uma boa maneira de evitar conflitos no JavaScript (n\u00e3o somente com jQuery) \u00e9 o uso de uma fun\u00e7\u00e3o anonima.<\/p>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>(function($) {\/\/ bloco})(jQuery.noconflict());<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/gist.github.com\/dirs\/39520\/raw\/590202a72309592c085854d6ae4fb26b3b2506ac\/gistfile1.js\"><b>view raw<\/b><\/a> <a href=\"https:\/\/gist.github.com\/dirs\/39520#file-gistfile1-js\"><b>gistfile1.js<\/b><\/a> hosted with \u2764 by <a href=\"https:\/\/github.com\"><b>GitHub<\/b><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>O que for executado dentro do bloco n\u00e3o muda com o escopo global, evitando problemas com nomes duplicados de variaveis e fun\u00e7\u00f5es.<\/p>\n<p><b>19 &#8211; Saiba quando uma imagem terminar de carregar<\/b><\/p>\n<p>Use o m\u00e9todo .load() em um elemento de imagem (IMG) com um callback. Simples assim:<\/p>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>$(&#8216;body&#8217;).append(&#8216;&lt;img src=&#8221;&#8221; alt=&#8221;&#8221; id=&#8221;minhaImagem&#8221; \/&gt;&#8217;);$(&#8216;#minhaImagem&#8217;).attr(&#8216;src&#8217;, &#8216;imagem.jpg&#8217;).load(function() {console.log(&#8216;Image Loaded. W: &#8216;+$(this).width()+&#8217; H: &#8216;+$(this).height());<\/p>\n<p>});<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/gist.github.com\/dirs\/43276\/raw\/0338dcee2d9b5572067f7977788624f6d7566593\/gistfile1.js\"><b>view raw<\/b><\/a> <a href=\"https:\/\/gist.github.com\/dirs\/43276#file-gistfile1-js\"><b>gistfile1.js<\/b><\/a> hosted with \u2764 by <a href=\"https:\/\/github.com\"><b>GitHub<\/b><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>\u00c9 importante que o elemento j\u00e1 esteja no HTML.<\/p>\n<p><b>20 &#8211; Sempre use a \u00faltima vers\u00e3o<\/b><\/p>\n<p>O framework est\u00e1 sendo constantemente melhorado por <a href=\"http:\/\/ejohn.org\/\">John Resig<\/a>, seu criador. Sempre que uma vers\u00e3o nova sai ela possui melhoras na performance e se mantem atualizada com o que existe de novo nos navegadores.<\/p>\n<p>A pr\u00f3xima vers\u00e3o do jQuery (1.3) vir\u00e1 com uma nova engine chamada <a href=\"http:\/\/ajaxian.com\/archives\/sizzle-john-resig-has-a-new-selector-engine\">Sizzle<\/a> que al\u00e9m de mais r\u00e1pida vai utilizar as fun\u00e7\u00f5es <i>querySelectorAll<\/i> e <i>getElementsByClassName<\/i> j\u00e1 disponiveis nos navegadores mais modernos.<\/p>\n<p>Ent\u00e3o, utilize sempre a \u00faltima vers\u00e3o.<\/p>\n<p><b>21 &#8211; Como saber se um elemento existe?<\/b><\/p>\n<p>Voc\u00ea n\u00e3o precisa checar se um elemento existe antes de manipular ele por que o jQuery simplesmente n\u00e3o faz nada caso o elemento n\u00e3o estiver no DOM. Mas as vezes voc\u00ea pode precisar executar algum peda\u00e7o de c\u00f3digo que depende da exist\u00eancia de um elemento, para isso use:<\/p>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>if ($(&#8216;#minhaDiv&#8217;)[0]) {\/\/ bloco de c\u00f3digo}<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/gist.github.com\/dirs\/43277\/raw\/b1956f0dea23fdf220f87fd8a1b017e03f0fe042\/gistfile1.js\"><b>view raw<\/b><\/a> <a href=\"https:\/\/gist.github.com\/dirs\/43277#file-gistfile1-js\"><b>gistfile1.js<\/b><\/a> hosted with \u2764 by <a href=\"https:\/\/github.com\"><b>GitHub<\/b><\/a><\/p>\n<p>&nbsp;<\/p>\n<p><b>22 &#8211; Adicione uma classe no HTML para saber que o JavaScript est\u00e1 disponivel<\/b><\/p>\n<p>Logo que o jQuery carregar use ele para adicionar uma classe chamada &#8220;JS&#8221; na tag HTML:<\/p>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>$(&#8216;html&#8217;).addClass(&#8216;JS&#8217;);<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/gist.github.com\/dirs\/43278\/raw\/52569eafd6e0e0b8d1e586e8e891d932ea4aceab\/gistfile1.js\"><b>view raw<\/b><\/a> <a href=\"https:\/\/gist.github.com\/dirs\/43278#file-gistfile1-js\"><b>gistfile1.js<\/b><\/a> hosted with \u2764 by <a href=\"https:\/\/github.com\"><b>GitHub<\/b><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Como isso s\u00f3 acontece quando o JavaScript (e o jQuery) estiverem prontos, voc\u00ea pode usar CSS para controlar quando um elemento deve aparecer somente quando o usu\u00e1rio estiver com JavaScript habilitado.<\/p>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>.JS #minhaDiv { display:none; }<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/gist.github.com\/dirs\/43279\/raw\/947d9d9ccb91052423649d3e5efdc10bba5f7e3a\/gistfile1.css\"><b>view raw<\/b><\/a> <a href=\"https:\/\/gist.github.com\/dirs\/43279#file-gistfile1-css\"><b>gistfile1.css<\/b><\/a> hosted with \u2764 by <a href=\"https:\/\/github.com\"><b>GitHub<\/b><\/a><\/p>\n<p>&nbsp;<\/p>\n<p><b>23 &#8211; Return &#8216;false&#8217; para evitar a continua\u00e7\u00e3o de um evento<\/b><\/p>\n<p>Quando voc\u00ea tem:<\/p>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>&lt;a href=&#8221;landing_page.html&#8221; &gt;Clique em mim!&lt;\/a&gt;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/gist.github.com\/dirs\/45766\/raw\/5c036a0c9071f4d047c1106f2131af433ef26b78\/gistfile1.htm\"><b>view raw<\/b><\/a> <a href=\"https:\/\/gist.github.com\/dirs\/45766#file-gistfile1-htm\"><b>gistfile1.htm<\/b><\/a> hosted with \u2764 by <a href=\"https:\/\/github.com\"><b>GitHub<\/b><\/a><\/p>\n<p>E adiciona um evento tipo assim:<\/p>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>$(&#8216;popup&#8217;).click(function(){\/\/ bloco de c\u00f3digo});<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/gist.github.com\/dirs\/43280\/raw\/4cd083c8edc84109968a23337ceb9c426326a25e\/gistfile1.js\"><b>view raw<\/b><\/a> <a href=\"https:\/\/gist.github.com\/dirs\/43280#file-gistfile1-js\"><b>gistfile1.js<\/b><\/a> hosted with \u2764 by <a href=\"https:\/\/github.com\"><b>GitHub<\/b><\/a><\/p>\n<p>Vai perceber que o bloco de c\u00f3digo vai ser executado, porem o navegador ir\u00e1 para o endere\u00e7o do link. Voc\u00ea pode usar &#8220;href=&#8217;#'&#8221; para evitar isso, mas assim a p\u00e1gina ir\u00e1 voltar para o topo quando a a\u00e7\u00e3o de click for executada.<\/p>\n<p>Para evitar isso, adicione um &#8220;return false;&#8221; ao fim do bloco de c\u00f3digo:<\/p>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>$(&#8216;popup&#8217;).click(function(){\/\/ bloco de c\u00f3digoreturn false;<\/p>\n<p>});<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/gist.github.com\/dirs\/43281\/raw\/b46f04a13fb5ba0379d70531ff1ecdb312c0af65\/gistfile1.js\"><b>view raw<\/b><\/a> <a href=\"https:\/\/gist.github.com\/dirs\/43281#file-gistfile1-js\"><b>gistfile1.js<\/b><\/a> hosted with \u2764 by <a href=\"https:\/\/github.com\"><b>GitHub<\/b><\/a><\/p>\n<p>&nbsp;<\/p>\n<p><b>24 &#8211; Atalho para a fun\u00e7\u00e3o &#8220;ready&#8221;<\/b><\/p>\n<p>Voc\u00ea j\u00e1 deve estar acostumado a usar<\/p>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>$(document).ready(function (){\/\/ c\u00f3digo});<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/gist.github.com\/dirs\/43282\/raw\/8abf3f5d7bd8b6a36c777db91bcc37eed861751b\/gistfile1.js\"><b>view raw<\/b><\/a> <a href=\"https:\/\/gist.github.com\/dirs\/43282#file-gistfile1-js\"><b>gistfile1.js<\/b><\/a> hosted with \u2764 by <a href=\"https:\/\/github.com\"><b>GitHub<\/b><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Pois saiba que pode economizar um pouco de c\u00f3digo simplesmente usando:<\/p>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>$(function (){\/\/ c\u00f3digo});<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/gist.github.com\/dirs\/43283\/raw\/f80d0c866072a4f648d720bd7d6c92c601652e43\/gistfile1.js\"><b>view raw<\/b><\/a> <a href=\"https:\/\/gist.github.com\/dirs\/43283#file-gistfile1-js\"><b>gistfile1.js<\/b><\/a> hosted with \u2764 by <a href=\"https:\/\/github.com\"><b>GitHub<\/b><\/a><\/p>\n<p>&nbsp;<\/p>\n<p><b>25 &#8211; Identifique v\u00e1riaveis do tipo jQuery<\/b><\/p>\n<p>Se voc\u00ea come\u00e7ar usar as dicas para evitar chamadas desnecessarias as fun\u00e7\u00f5es do jQuery vai perceber que no seu c\u00f3digo o n\u00famero de variaveis carregando objetos jQuery ir\u00e1 aumentar bastante.<\/p>\n<p>Para evitar que voc\u00ea se confunda e chame a fun\u00e7\u00e3o de sele\u00e7\u00e3o &#8211; $() &#8211; em um elemento que j\u00e1 \u00e9 jQuery, identifique variaveis que carregam objetos do jQuery com um $ antes do nome.<\/p>\n<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td>var $elemento = $(elemento);<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"https:\/\/gist.github.com\/dirs\/45739\/raw\/d1996217346496b646e87bc7b9cd6b8316dc2313\/gistfile1.js\"><b>view raw<\/b><\/a> <a href=\"https:\/\/gist.github.com\/dirs\/45739#file-gistfile1-js\"><b>gistfile1.js<\/b><\/a> hosted with \u2764 by <a href=\"https:\/\/github.com\"><b>GitHub<\/b><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Ufa! 25 praticas ninja para ajudar sua produtividade com jQuery. Se voc\u00ea tiver mais alguma boa pratica e quer compartilhar, por favor comente aqui \ud83d\ude42<\/p>\n<p>E se voc\u00ea gostou do artigo, por favor espalhe pelo mundo.<\/p>\n<p>fonte: http:\/\/www.dirceupauka.com\/excelentes-truques-e-dicas-para-jquery<\/p>\n","protected":false},"excerpt":{"rendered":"<p>25 Excelentes truques e dicas para jQuery<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[12],"tags":[],"class_list":["post-286","post","type-post","status-publish","format-standard","hentry","category-jquery"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/posts\/286","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/comments?post=286"}],"version-history":[{"count":6,"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/posts\/286\/revisions"}],"predecessor-version":[{"id":292,"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/posts\/286\/revisions\/292"}],"wp:attachment":[{"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/media?parent=286"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/categories?post=286"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gianfratti.com\/index.php\/wp-json\/wp\/v2\/tags?post=286"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}