﻿<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>TidBits&#187; JQuery</title>
	<atom:link href="http://www.tidbits.com.br/tag/jquery/feed" rel="self" type="application/rss+xml" />
	<link>http://www.tidbits.com.br</link>
	<description>Desenvolvimento de Front End</description>
	<lastBuildDate>Wed, 18 Jan 2012 00:41:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Tradução de idiomas usando a API Ajax de idioma do Google</title>
		<link>http://www.tidbits.com.br/traducao-de-idiomas-usando-a-api-ajax-de-idioma-do-google</link>
		<comments>http://www.tidbits.com.br/traducao-de-idiomas-usando-a-api-ajax-de-idioma-do-google#comments</comments>
		<pubDate>Tue, 18 Aug 2009 18:08:47 +0000</pubDate>
		<dc:creator>Danilo</dc:creator>
				<category><![CDATA[Ferramentas da Web]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Tradução]]></category>

		<guid isPermaLink="false">http://www.tidbits.com.br/?p=1507</guid>
		<description><![CDATA[É um serviço relativamente novo, pouco usado, mas muito interessante. A ferramenta de idiomas do Google, acredito que todo mundo já conhece. Porém pouca gente sabe que o Google oferece uma API em ajax para tradução. E pra facilitar ainda mais, existe também um plugin de jQuery chamado jquery-translate que interage com a API do [...]]]></description>
			<content:encoded><![CDATA[<p>É um serviço relativamente novo, pouco usado, mas muito interessante.</p>
<p>A <a href="http://www.google.com.br/language_tools?hl=pt-BR" target="_blank">ferramenta de idiomas</a> do Google, acredito que todo mundo já conhece. Porém pouca gente sabe que o Google oferece uma <a href="http://code.google.com/intl/pt-BR/apis/ajaxlanguage/" target="_blank">API em ajax para tradução</a>.</p>
<p>E pra facilitar ainda mais, existe também um <a href="http://code.google.com/p/jquery-translate/" target="_blank">plugin de jQuery chamado jquery-translate</a> que interage com a API do google, aí fica bem simples:</p>
<p><img src="http://www.tidbits.com.br/download/_images/copy.gif" alt="copy of tidbits"/>Para traduzir um texto basta chamar o node do html pelo seletor do jQuery e chamar a função translate:</p>
<pre class="brush: jscript; title: ; notranslate">
	&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery-1.3.2.js&quot;&gt;&lt;/script&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery-translate-1.3.9.min.js&quot;&gt;&lt;/script&gt;
	$(document).ready(function(){
		$('button#traduzir').click(function(){
			$('div#texto').translate('en')
		});
	});
</pre>
<p>No exemplo acima, quando clicarem no botão traduzir, irá traduzir todo o conteúdo da div id=&#8221;texto&#8221; para o inglês, a API do Google detecta automaticamente o idioma original.</p>
<h4>Veja um demo abaixo que eu fiz:</h4>
<p>Clique em uma das bandeiras abaixo do texto para traduzir para o idioma selecionado:</p>
<p><iframe width="460" height="310" frameborder="0" scrolling="no" src="http://www.tidbits.com.br/download/exemplos/traducao/demo.html"></iframe>	</p>
<p>Quem quiser entender, deixei o <a href="http://www.tidbits.com.br/download/exemplos/traducao/traducao.zip">exemplo disponível pra download</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tidbits.com.br/traducao-de-idiomas-usando-a-api-ajax-de-idioma-do-google/feed</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>O Bug do parse XML no IE com o ajax do jQuery</title>
		<link>http://www.tidbits.com.br/o-bug-do-parse-xml-no-ie-com-o-ajax-do-jquery</link>
		<comments>http://www.tidbits.com.br/o-bug-do-parse-xml-no-ie-com-o-ajax-do-jquery#comments</comments>
		<pubDate>Thu, 04 Jun 2009 04:13:07 +0000</pubDate>
		<dc:creator>Danilo</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[parseXML]]></category>
		<category><![CDATA[XML]]></category>
		<category><![CDATA[XMLDOM]]></category>

		<guid isPermaLink="false">http://www.tidbits.com.br/?p=1485</guid>
		<description><![CDATA[Post mais técnico seria impossível né? Enfim, se você leu o título e está lendo até agora é porque sabe do problema que estou falando: o ajax do jQuery tem um problema quando se trabalha com XML, o problema só acontece adivinha onde? No nosso querido browser Internet Explorer. Mas como quase tudo na vida, [...]]]></description>
			<content:encoded><![CDATA[<p>Post mais técnico seria impossível né? Enfim, se você leu o título e está lendo até agora é porque sabe do problema que estou falando: o ajax do jQuery tem um problema quando se trabalha com XML, o problema só acontece adivinha onde? No nosso querido browser Internet Explorer.</p>
<p>Mas como quase tudo na vida, tem solução:</p>
<p>Solução número 1 &#8211; Pare de trabalhar com XML e comece a usar <a href="http://www.tidbits.com.br/o-que-e-json-como-e-quando-utilizar" target="_blank">JSON</a>.</p>
<p>Solução número 2 &#8211; Existe um parseXML que funciona pro IE. E alguém de muita boa vontade que se chama Jonathan Sharp fez disso um plugin que pra jQuery que se chama <a href="http://outwestmedia.com/jquery-plugins/xmldom/" target="_blank"> XMLDOM </a>.</p>
<p>E como funciona?</p>
<p>assim:</p>
<h3> Forma normal (que normalmente dá erro no IE) </h3>
<pre class="brush: jscript; title: ; notranslate">
$.ajax({
	url: 'xml/erros.xml,
	type: &quot;GET&quot;,
	dataType: &quot;xml&quot;,
	contentType: &quot;application/x-www-form-urlencoded; charset=UTF-8&quot;,
	success: function(xml){
		var htm ='';
		$(xml).find('item').each(function(n){
			htm += $(this).text();
		}
		$('#erros').append(htm);
	}
});
</pre>
<h3>Com o plugin XMLDOM</h3>
<pre class="brush: jscript; title: ; notranslate">
$.ajax({
	url: 'xml/erros.xml,
	type: &quot;GET&quot;,
	dataType: &quot;html&quot;,
	contentType: &quot;application/x-www-form-urlencoded; charset=UTF-8&quot;,
	success: function(xml){
		var htm ='';
		$.xmlDOM(xml).find('item').each(function(n){
			htm += $(this).text();
		}
		$('#erros').append(htm);
	}
});
</pre>
<p>E pra quem quiser evitar o trabalho, pode baixar o plugin direto <a href="http://www.tidbits.com.br/download/_scripts/jquery-xmldom.js" target="_blank">aqui</a>.</p>
<p>[]s</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tidbits.com.br/o-bug-do-parse-xml-no-ie-com-o-ajax-do-jquery/feed</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>jQuerify &#8211; Adicionando jQuery para testar em páginas online</title>
		<link>http://www.tidbits.com.br/jquerify-adicionando-jquery-para-testar-em-paginas-online</link>
		<comments>http://www.tidbits.com.br/jquerify-adicionando-jquery-para-testar-em-paginas-online#comments</comments>
		<pubDate>Mon, 04 May 2009 13:40:04 +0000</pubDate>
		<dc:creator>Danilo</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[JQuery]]></category>

		<guid isPermaLink="false">http://www.tidbits.com.br/?p=1474</guid>
		<description><![CDATA[Nada mais fácil do que trabalhar com jQuery, e nada melhor pra aprender do que entender sites alheios. Com o jQuerify (que acabou de ser atualizado) é possível (com a ajuda do firebug pra Firefox, debug bar pra IE, etc&#8230;), executar comandos jQuery (como jQuery.ajax ou qualquer outro) mesmo se o site não tiver jQuery [...]]]></description>
			<content:encoded><![CDATA[<p>Nada mais fácil do que trabalhar com jQuery, e nada melhor pra aprender do que entender sites alheios.</p>
<p>Com o <a href="http://www.learningjquery.com/2009/04/better-stronger-safer-jquerify-bookmarklet" target="_blank">jQuerify</a> (que acabou de ser atualizado) é possível (com a ajuda do firebug pra Firefox, debug bar pra IE, etc&#8230;), executar comandos jQuery (como jQuery.ajax ou qualquer outro) mesmo se o site não tiver jQuery carregado.</p>
<p>Basta executar um script (que o chamamos de jQuerify) no seu depurador de javascript ( no firebug, clique em console, cole o script no box da direita e clique em &#8220;Executar&#8221; ) e pronto, o script invoca o invoca o jQuery. Depois, para testar, ao invés de usar $ use o jQuery nos seus seletores.</p>
<p>Segue script abaixo.</p>
<pre class="brush: jscript; title: ; notranslate">
(function() {
var s=document.createElement('script'),
	el=document.createElement('div'),
	b=document.getElementsByTagName('body')[0];
var otherlib=false,
	startCounter=tryCounter=10,
	delay=250,
	msg='';
s.setAttribute('src','http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js');
el.style.position='fixed';
el.style.height='32px';
el.style.width='220px';
el.style.marginLeft='-110px';
el.style.top='0';
el.style.left='50%';
el.style.padding='5px 10px 5px 10px';
el.style.fontSize='12px';
el.style.color='#222';
el.style.backgroundColor='#f99';

if(typeof jQuery!='undefined') {
  msg='This page already using jQuery v'+jQuery.fn.jquery;
  return showMsg();
} else {
  if(typeof $=='function') {
	otherlib=true;
  }
  document.getElementsByTagName('head')[0].appendChild(s);
}

function showMsg() {
  el.innerHTML=msg;
  b.appendChild(el);
  window.setTimeout(function() {
	if (typeof jQuery=='undefined') {
	  b.removeChild(el);
	} else {
	  jQuery(el).fadeOut('slow',function() {
		jQuery(this).remove();
	  });
	  if (otherlib) {
		$jq=jQuery.noConflict();
	  }
	}
  } ,2500);
}

var tryjQuery=function() {
  setTimeout(function() {
	if (typeof jQuery=='undefined') {
	  if (tryCounter) {
		tryCounter--;
		tryjQuery();
	  } else {
		msg='Sorry, but after ' + startCounter + ' attempts, jQuery hasn\'t loaded';
		showMsg();
	  }
	} else {
	  msg='This page is now jQuerified with v' + jQuery.fn.jquery;
	  if (otherlib) {msg+=' and noConflict(). Use $jq(), not $().';}
	  showMsg();
	}
  }, delay);
};
tryjQuery();
})();
</pre>
<p>[]s</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tidbits.com.br/jquerify-adicionando-jquery-para-testar-em-paginas-online/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Coleção de métodos para o plugin validate do jQuery.</title>
		<link>http://www.tidbits.com.br/colecao-de-metodos-para-o-plugin-validate-do-jquery</link>
		<comments>http://www.tidbits.com.br/colecao-de-metodos-para-o-plugin-validate-do-jquery#comments</comments>
		<pubDate>Fri, 27 Mar 2009 14:30:24 +0000</pubDate>
		<dc:creator>Danilo</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[validate]]></category>
		<category><![CDATA[Verificar CPF]]></category>

		<guid isPermaLink="false">http://www.tidbits.com.br/?p=1398</guid>
		<description><![CDATA[Na verdade não é bem uma coleção com dezenas de métodos, a intenção do post é simplesmente mostrar que é possível e fácil criar métodos para o plugin. Para quem não sabe o que é o validate, recomendo saber do que se trata, você pode ganhar muito tempo no desenvolvimento utilizando o plugin, principalmente para [...]]]></description>
			<content:encoded><![CDATA[<p>Na verdade não é bem uma coleção com dezenas de métodos, a intenção do post é simplesmente mostrar que é possível e fácil criar métodos para o plugin.</p>
<p>Para quem não sabe o que é o <a href="http://plugins.jquery.com/project/validate" target="_blank">validate</a>, recomendo saber do que se trata, você pode ganhar muito tempo no desenvolvimento utilizando o plugin, principalmente para desenvolver interface de back end, com diversas validações. Tem um <a href="http://www.alexandremagno.net/blog/2008/07/23/validando-formularios-com-o-plugin-validate/" target="_blank">post do Alexandre Magno</a> antigo, porém muito bom, explicando o que é o plugin, o que faz, como utilizá-lo e um exemplo bem simples de um <a href="http://www.alexandremagno.net/blog/wp-content/uploads/exemplos/validate/validate.html" target="_blank">formulário validado pelo plugin</a>.</p>
<p>Quando se faz o download do validate, ele vêm com uma coleção de médotos, mas alguns que nós precisamos, como verificação de data ( formato dd/mm/aaaa ) e verificação de cpf, não tem. </p>
<p>Alguns métodos que serão postados aqui não fui eu quem fez, queria dar os créditos a quem fez, porém não sei quem foi. Mas&#8230; vamos ao ponto, veja como é facil adicionar novos métodos.</p>
<h4>Verificação de CPF </h4>
<p>O código abaixo adiciona um Método que chamamos de &#8220;verificaCPF&#8221; :</p>
<pre class="brush: jscript; title: ; notranslate">
jQuery.validator.addMethod(&quot;verificaCPF&quot;, function(value, element) {
	value = value.replace('.','');
	value = value.replace('.','');
	cpf = value.replace('-','');
	while(cpf.length &lt; 11) cpf = &quot;0&quot;+ cpf;
	var expReg = /^0+$|^1+$|^2+$|^3+$|^4+$|^5+$|^6+$|^7+$|^8+$|^9+$/;
	var a = [];
	var b = new Number;
	var c = 11;
	for (i=0; i&lt;11; i++){
		a[i] = cpf.charAt(i);
		if (i &lt; 9) b += (a[i] * --c);
	}
	if ((x = b % 11) &lt; 2) { a[9] = 0 } else { a[9] = 11-x }
	b = 0;
	c = 11;
	for (y=0; y&lt;10; y++) b += (a[y] * c--);
	if ((x = b % 11) &lt; 2) { a[10] = 0; } else { a[10] = 11-x; }
	if ((cpf.charAt(9) != a[9]) || (cpf.charAt(10) != a[10]) || cpf.match(expReg)) return false;
	return true;
}, &quot;Informe um CPF válido.&quot;); // Mensagem padrão
</pre>
<p>E agora na hora de validar seu formulário, você já pode utilizar o método adicionado:</p>
<pre class="brush: jscript; title: ; notranslate">
$(&quot;form#cadastro&quot;).validate({
	rules: {
		'CampoCPF': {
			required: true,
			verificaCPF: true
		}
	},
	messages: {
		CampoCPF: {
			required: &quot;Digite seu cpf&quot;
			verificaCPF: &quot;CPF inválido&quot;
		}
	},
});
</pre>
<h4> Verificação de Data (formato dd/mm/aaaa) </h4>
<p>Agora o método se chama dateBR e a mensagem padrão (caso não seja colocada outra na hora de usar o validate, será &#8220;Informe uma data válida&#8221;.</p>
<pre class="brush: jscript; title: ; notranslate">
jQuery.validator.addMethod(&quot;dateBR&quot;, function(value, element) {
	 //contando chars
	if(value.length!=10) return false;
	// verificando data
	var data 		= value;
	var dia 		= data.substr(0,2);
	var barra1		= data.substr(2,1);
	var mes 		= data.substr(3,2);
	var barra2		= data.substr(5,1);
	var ano 		= data.substr(6,4);
	if(data.length!=10||barra1!=&quot;/&quot;||barra2!=&quot;/&quot;||isNaN(dia)||isNaN(mes)||isNaN(ano)||dia&gt;31||mes&gt;12)return false;
	if((mes==4||mes==6||mes==9||mes==11)&amp;amp;&amp;amp;dia==31)return false;
	if(mes==2 &amp;amp;&amp;amp; (dia&gt;29||(dia==29&amp;amp;&amp;amp;ano%4!=0)))return false;
	if(ano &lt; 1900)return false;
	return true;
}, &quot;Informe uma data válida&quot;);  // Mensagem padrão
</pre>
<h4> Verificação de Data e Hora (formato dd/mm/aaaa hh:mm) </h4>
<pre class="brush: jscript; title: ; notranslate">
jQuery.validator.addMethod(&quot;dateTimeBR&quot;, function(value, element) {
	 //contando chars
	if(value.length!=16) return false;
	 // dividindo data e hora
	if(value.substr(10,1)!=' ') return false; // verificando se há espaço
	var arrOpcoes = value.split(' ');
	if(arrOpcoes.length!=2) return false; // verificando a divisão de data e hora
	// verificando data
	var data 		= arrOpcoes[0];
	var dia 		= data.substr(0,2);
	var barra1		= data.substr(2,1);
	var mes 		= data.substr(3,2);
	var barra2		= data.substr(5,1);
	var ano 		= data.substr(6,4);
	if(data.length!=10||barra1!=&quot;/&quot;||barra2!=&quot;/&quot;||isNaN(dia)||isNaN(mes)||isNaN(ano)||dia&gt;31||mes&gt;12)return false;
	if ((mes==4||mes==6||mes==9||mes==11)&amp;amp;&amp;amp;dia==31)return false;
	if (mes==2 &amp;amp;&amp;amp; (dia&gt;29||(dia==29&amp;amp;&amp;amp;ano%4!=0)))return false;
	// verificando hora
	var horario 	= arrOpcoes[1];
	var	hora 		= horario.substr(0,2);
	var doispontos 	= horario.substr(2,1);
	var minuto 		= horario.substr(3,2);
	if(horario.length!=5||isNaN(hora)||isNaN(minuto)||hora&gt;23||minuto&gt;59||doispontos!=&quot;:&quot;)return false;
	return true;
}, &quot;Informe uma data e uma hora válida&quot;);
</pre>
<p>Se alguém tiver (ou fizer) o método de CNPJ (ou algum outro legal que não tem aqui) me manda por e-mail ou posta aqui nos comentários.</p>
<p>[]s</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tidbits.com.br/colecao-de-metodos-para-o-plugin-validate-do-jquery/feed</wfw:commentRss>
		<slash:comments>29</slash:comments>
		</item>
		<item>
		<title>Incompatibilidades entre versões do jQuery 1.2.6 e 1.3.2</title>
		<link>http://www.tidbits.com.br/incompatibilidades-entre-versoes-do-jquery-126-e-132</link>
		<comments>http://www.tidbits.com.br/incompatibilidades-entre-versoes-do-jquery-126-e-132#comments</comments>
		<pubDate>Mon, 09 Mar 2009 14:55:24 +0000</pubDate>
		<dc:creator>Danilo</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[incompatibilidades]]></category>
		<category><![CDATA[JQuery]]></category>

		<guid isPermaLink="false">http://www.tidbits.com.br/?p=1378</guid>
		<description><![CDATA[O site / blog Learning jQuery publicou um post &#8220;faça um upgrade dos seus scripts para jQuery 1.3 em 3 passos&#8221;, achei interessante, vou traduzir parte do post aqui. Os seletores [@attribute] A principal diferença, o que mais está dando problema de incompatibilidade nessa troca de versão é a sintaxe do selector [@attribute] que desde [...]]]></description>
			<content:encoded><![CDATA[<p>O site / blog <a href="http://www.learningjquery.com/2009/03/3-quick-steps-for-a-painless-upgrade-to-jquery-13" target="_blank"> Learning jQuery </a> publicou um post &#8220;faça um upgrade dos seus scripts para jQuery 1.3 em 3 passos&#8221;, achei interessante, vou traduzir parte do post aqui.</p>
<h2> Os seletores [@attribute] </h2>
<p>A principal diferença, o que mais está dando problema de incompatibilidade nessa troca de versão é a sintaxe do selector <strong>[@attribute]</strong> que desde a versão 1.1.4 (agosto de 2007) entrou em desuso, mas até a 1.2.6 ele ainda funcionava, dessa vez tiraram fora mesmo, mas muitos sites e muito plugins ainda utilizavam os seletores assim. <img src="http://www.tidbits.com.br/download/_images/copy.gif" alt="veja mais tidbits"/> E pra alterar, corrigir o problema, é bem simples, basta remover o <strong>@</strong></p>
<p>Exemplo:</p>
<h3>jQuery anterior a 1.1.4</h3>
<pre class="brush: jscript; title: ; notranslate">
$('a[@rel=&quot;excluir&quot;]
$('input[@name^=&quot;telefone&quot;]
</pre>
<h3>Versão atual do jQuery</h3>
<pre class="brush: jscript; title: ; notranslate">
$('a[rel=&quot;excluir&quot;]
$('input[name^=&quot;telefone&quot;]
</pre>
<h2>  :visible em visibility e display</h2>
<p>Nessa nova versão <strong>:visible</strong> trabalha de acordo com a propriedade display do css e não mais com visibility</p>
<h3>Exemplo 1:</h3>
<p>Considere a div abaixo:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div id=&quot;exemplo&quot; style=&quot;display:none&quot;&gt;
 Tidbits
&lt;/div&gt;
</pre>
<p>Na Versão 1.2.6 obtemos true com .is(&#8216;:visible&#8217;) pois ele considerava somento a propriedade visitibility do css, já na versão 1.3.2. obtemos false</p>
<p>Versão 1.2.6<br />
$(&#8216;#exemplo&#8217;).is(&#8216;:visible&#8217;) = true</p>
<p>Versão 1.3.2<br />
$(&#8216;#exemplo&#8217;).is(&#8216;:visible&#8217;) = false</p>
<h3>Exemplo 2:</h3>
<p>Considere a div abaixo:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div id=&quot;exemplo2&quot; style=&quot;visibility:hidden&quot;&gt;
 Tidbits
&lt;/div&gt;
</pre>
<p>Na Versão 1.2.6 obtemos false com .is(&#8216;:visible&#8217;) pois ele considerava somento a propriedade visitibility do css, já na versão 1.3.2. obtemos true</p>
<p>Versão 1.2.6<br />
$(&#8216;#exemplo&#8217;).is(&#8216;:visible&#8217;) = false</p>
<p>Versão 1.3.2<br />
$(&#8216;#exemplo&#8217;).is(&#8216;:visible&#8217;) = true</p>
<p>A terceira mudança é na hora de escrever um seletor customizado, agora não é necessário retornar uma string, como era feito até então.</p>
<p>Quem quiser ler a matéria original, veja no <a href="http://www.learningjquery.com/2009/03/3-quick-steps-for-a-painless-upgrade-to-jquery-13" target="_blank"> Learning jQuery </a>.</p>
<p>[]s</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tidbits.com.br/incompatibilidades-entre-versoes-do-jquery-126-e-132/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Calendário em Javascript em português usando jQuery</title>
		<link>http://www.tidbits.com.br/click-calendario-plugin-de-jquery-para-calendarios-em-portugues</link>
		<comments>http://www.tidbits.com.br/click-calendario-plugin-de-jquery-para-calendarios-em-portugues#comments</comments>
		<pubDate>Mon, 02 Mar 2009 13:45:43 +0000</pubDate>
		<dc:creator>Danilo</dc:creator>
				<category><![CDATA[Eventos]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Calendário]]></category>
		<category><![CDATA[Click]]></category>
		<category><![CDATA[JQuery]]></category>

		<guid isPermaLink="false">http://www.tidbits.com.br/?p=1323</guid>
		<description><![CDATA[Este, é um plugin de jQuery, para mostrar calendário ao escolher uma data em um input, foi desenvolvido por mim (Danilo Augusto), para ser usado em alguns projetos na Click. O plugin tem uma série de opções para ser customizadas e pesa 9kb de javascript (ou 7kb na versão minificada). Clique aqui para ver o [...]]]></description>
			<content:encoded><![CDATA[<p>Este, é um plugin de jQuery, para mostrar calendário ao escolher uma data em um input, foi desenvolvido por mim (Danilo Augusto), para ser usado em alguns projetos na Click. O plugin tem uma série de opções para ser customizadas e pesa 9kb de javascript (ou 7kb na versão minificada).</p>
<p> <a href="http://www.tidbits.com.br/click-calendario-plugin-de-jquery-para-calendarios-em-portugues">Clique aqui</a> para ver o post com todas as opções do calendário, um pequeno tutorial de como utilizá-lo além de um zip disponível com todos os exemplos e scripts. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.tidbits.com.br/click-calendario-plugin-de-jquery-para-calendarios-em-portugues/feed</wfw:commentRss>
		<slash:comments>102</slash:comments>
		</item>
		<item>
		<title>Jogo Pong em Javascript e jQuery &#8211; Passo a passo</title>
		<link>http://www.tidbits.com.br/jogo-pong-em-javascript-e-jquery-passo-a-passo</link>
		<comments>http://www.tidbits.com.br/jogo-pong-em-javascript-e-jquery-passo-a-passo#comments</comments>
		<pubDate>Thu, 26 Feb 2009 14:14:23 +0000</pubDate>
		<dc:creator>Danilo</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Jogos]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Pong]]></category>

		<guid isPermaLink="false">http://www.tidbits.com.br/?p=1290</guid>
		<description><![CDATA[Quem não se lembra do famoso jogo do tele game, pong? Bom, se você tem minha idade, talvez você nunca nem tenha ouvido falar em pong ou tele game, então veja a foto abaixo que talvez você reconheça, afinal já tem pong até pro iphone. Baseado nisso, e tendo como inspiração a onda recente de [...]]]></description>
			<content:encoded><![CDATA[<p>Quem não se lembra do famoso jogo do tele game, pong? </p>
<p>Bom, se você tem minha idade, talvez você nunca nem tenha ouvido falar em pong ou tele game, então veja a foto abaixo que talvez você reconheça, afinal já tem pong até pro iphone.</p>
<p><img src="http://www.tidbits.com.br/wp-content/uploads/2009/02/pong.png" alt="pong" title="pong" width="200" class="align_center"/></p>
<p>Baseado nisso, e tendo como inspiração a onda recente de jogos em javascript, decidi fazer desse, meu primeiro jogo em javascript, fiz do zero, e aqui vou mostrar passo a passo a evolução do script em 12 momentos.</p>
<h2> Veja o resultado final: </h2>
<p>Ainda deve ter bugs, mas a intenção é somente desenvolver um jogo simples e praticar lógica e conceitos em Javascript. Antes de começar a falar, devo dizer que quem quiser dar uma olhada em como foi feito, tem aqui <a href="http://www.tidbits.com.br/download/pong/pong.zip"> todos os 12 passos para download</a>. </p>
<p><iframe height="465" frameborder="0" width="460" scrolling="no" src="http://www.tidbits.com.br/download/pong/pong.html"></iframe></p>
<p>Então vamos aos passos:</p>
<h3> Passo 1 &#8211; Montando o HTML / CSS </h3>
<p>No passo mais simples de todos, o html e css usado no jogo é montado:</p>
<p><a href="http://www.tidbits.com.br/download/pong/pong-passo-1-html-e-css.html"  target="_blank"> Clique aqui para ver o passo 1</a>.</p>
<h3> Passo 2 &#8211; Movendo a bolinha </h3>
<p>No passo dois é começo da movimentação do jogo, a bolinha começa a se movimentar pra uma direção,  aleatóriamente e depois ela bate nas &#8220;paredes&#8221; e inverte sua direção.</p>
<p><a href="http://www.tidbits.com.br/download/pong/pong-passo-2-bola-andando.html"  target="_blank"> Clique aqui para ver o passo 2</a>.</p>
<h3> Passo 3 &#8211; Calculando o ponto </h3>
<p>Do passo 2 pro três, eu calculo na hora em que a parede passa pela posição da raquete, se ela &#8220;bate&#8221; na raquete, ou não, caso não bata, é marcado o ponto. (É necessário testar algumas vezes pra conseguir ver o efeito, já que a bolinha começa numa posição randômica).</p>
<p><a href="http://www.tidbits.com.br/download/pong/pong-passo-3-ponto.html"  target="_blank"> Clique aqui para ver o passo 3</a>.</p>
<h3> Passo 4 &#8211; O placar </h3>
<p>Agora, toda vez em que um ponto é marcado, o placar é atualizado.</p>
<p><a href="http://www.tidbits.com.br/download/pong/pong-passo-4-placar.html"  target="_blank"> Clique aqui para ver o passo 4</a>.</p>
<h3> Passo 5 &#8211; Reiniciando a partida </h3>
<p>Após um ponto, não é mais necessário apertar F5 pra reiniciar a partida. Em 3 segundos a partida é reiniciada automaticamente. Agora o jogo não tem mais fim.</p>
<p><a href="http://www.tidbits.com.br/download/pong/pong-passo-5-reiniciando-o-jogo.html"  target="_blank"> Clique aqui para ver o passo 5</a>.</p>
<h3> Passo 6 &#8211; Movendo as raquetes (2 players) </h3>
<p>Nesse passo, é onde começa a mover a raquete, e este, é o único em que é possível mover as duas raquetes (o que parece legal, mas não é muito não, é impossível mover as duas raquetes ao mesmo tempo ).</p>
<p><a href="http://www.tidbits.com.br/download/pong/pong-passo-6-movendo-a-raquete.html"  target="_blank"> Clique aqui para ver o passo 6</a>.</p>
<h3> Passo 7 &#8211; Jogando contra o computador </h3>
<p>Aqui, a raquete da direita já está automática, qndo a raquete da esquerda rebate, é calculado a trajetória da raquete da direita, que se posiciona automaticamente.</p>
<p><a href="http://www.tidbits.com.br/download/pong/pong-passo-7-raquete-automatica.html"  target="_blank"> Clique aqui para ver o passo 7</a>.</p>
<h3> Passo 8 &#8211; Aumentando a velocidade </h3>
<p>Agora, a medida em que o jogo for rolando a velocidade da bola vai aumentando, até que o ponto seja efetuado. Depois quando o jogo é reiniciado, a velocidade é voltada ao normal.</p>
<p><a href="http://www.tidbits.com.br/download/pong/pong-passo-8-aumentando-a-velocidade.html"  target="_blank"> Clique aqui para ver o passo 8</a>.</p>
<h3> Passo 9 &#8211; Batendo na ponta da raquete </h3>
<p>Como a direção inicial da bolinha é sorteada, foi implementado o recurso de &#8220;bater na ponta da raquete&#8221;, que aumenta o angulo da rebatida da bola, e ajuda a enganar o adversário. Nesse passo, também foi implementado um recurso para as raquetes voltarem ao centro da mesa após um ponto for concluído.</p>
<p><a href="http://www.tidbits.com.br/download/pong/pong-passo-9-batendo-na-ponta-da-raquete.html"  target="_blank"> Clique aqui para ver o passo 9 </a>.</p>
<h3> Passo 10 &#8211; Configurando a dificuldade </h3>
<p>Pra não ficar muito banal, é possível definir a dificuldade do jogo, antes de começar a partida, a dificuldade interfere na velocidade inicial da bolinha e na velocidade da raquete adversária.</p>
<p><a href="http://www.tidbits.com.br/download/pong/pong-passo-10-dificuldade.html"  target="_blank"> Clique aqui para ver o passo 10 </a>.</p>
<h3> Passo 11 &#8211; Game Over </h3>
<p>Depois de tantos passos, finalmente o jogo tem um fim, vence que fizer 5 pontos primeiro. O jogo pode ser reiniciado depois e ter a dificuldade alterada.</p>
<p><a href="http://www.tidbits.com.br/download/pong/pong-passo-11-game-over.html"  target="_blank"> Clique aqui para ver o passo 11 </a>.</p>
<h3> Passo 12 &#8211; Mouse Wheel </h3>
<p>Para facilitar a movimentação da raquete, no passo 12, foi implementado o controle por mouse wheel, baseado naquela <a href="http://www.tidbits.com.br/adicionando-evento-mouse-wheel-em-javascript" target="_blank"> função de mouse wheel </a> postada aqui a pouco tempo atrás.</p>
<p><a href="http://www.tidbits.com.br/download/pong/pong-passo-12-mouse-wheel.html"  target="_blank"> Clique aqui para ver o passo 12 </a>.</p>
<p>Depois do passo 12 alguns <strong>ajustes ainda foram (e talvez outros serão) feitos</strong>, como velocidade do jogo, e algumas melhorias de desempenho.</p>
<h2> Exportando: </h2>
<p>E se alguém quiser colocar o jogo em algum lugar, basta chamar o iframe com o código:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;iframe width=&quot;460&quot; height=&quot;430&quot; frameborder=&quot;0&quot; scrolling=&quot;no&quot; src=&quot;http://www.tidbits.com.br/download/pong/pong.html&quot;&gt;&lt;/iframe&gt;
</pre>
<p>Lembrando que deixei disponível <a href="http://www.tidbits.com.br/download/pong/pong.zip"> todos os 12 passos para download</a>. </p>
<p>E pra quem nunca ouviu falar de tele game, segue uma imagem do que foi um dos primeiros vídeogames:</p>
<p><img src="http://www.tidbits.com.br/wp-content/uploads/2009/02/tele-game.jpg" alt="tele-game" title="tele-game" /></p>
<p>Quando eu tiver tempo livre, vou fazer um jogo estilo arkanoid, com fases, records e tudo mais.</p>
<p>[]s</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tidbits.com.br/jogo-pong-em-javascript-e-jquery-passo-a-passo/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Zoom de Imagem em Javascript e jQuery &#8211; Passos 5 e 6</title>
		<link>http://www.tidbits.com.br/zoom-de-imagem-em-javascript-e-jquery-passos-5-e-6</link>
		<comments>http://www.tidbits.com.br/zoom-de-imagem-em-javascript-e-jquery-passos-5-e-6#comments</comments>
		<pubDate>Fri, 13 Feb 2009 17:59:25 +0000</pubDate>
		<dc:creator>Danilo</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[imageZoom]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[zoom]]></category>

		<guid isPermaLink="false">http://www.tidbits.com.br/?p=1281</guid>
		<description><![CDATA[Resolvi fazer mais um passo do último post Imagem com zoom em Javascript e jQuery &#8211; ImageZoom. Apesar de ser o último passo não é o mais complicado e achei interessante Passo 5 &#8211; botões para aumentar e diminuir Zoom Passe o mouse sobre a imagem e clique em + e &#8211; para aumentar e [...]]]></description>
			<content:encoded><![CDATA[<p>Resolvi fazer mais um passo do último post <a href="http://www.tidbits.com.br/imagem-com-zoom-em-javascript-e-jquery-imagezoom" target="_blank">Imagem com zoom em Javascript e jQuery &#8211; ImageZoom</a>. Apesar de ser o último passo não é o mais complicado e achei interessante</p>
<h3> Passo 5 &#8211; botões para aumentar e diminuir Zoom </h3>
<p>Passe o mouse sobre a imagem e clique em + e &#8211; para aumentar e diminuir o zoom.</p>
<p><iframe height="304" frameborder="0" width="470" scrolling="no" src="http://www.tidbits.com.br/download/exemplos/imageZoom/imageZoom-passo-5.html"></iframe></p>
<p>A partir do passo 2, foram adicionados dois botões que aumentam ou diminuem 3% do tamanho da imagem e depois recalcula tudo para fazer o parallax, bem simples.</p>
<h3> Passo 6 &#8211; MouseWheel </h3>
<p>E pra finalizar, fiz um script (na verdade comecei ele, não cheguei a finalizá-lo) que usa o mouse wheel para controlar o zoom, se você não sabe trabalhar com isso, dê uma olhada num post antigo meu que mostrar <a href="http://www.tidbits.com.br/adicionando-evento-mouse-wheel-em-javascript" target="_blank"> como adicionar um evento ao mouse wheel </a>. Esse script deixei num arquivo a parte (pq senão atrapalharia o scroll aqui), então <a href="http://www.tidbits.com.br/download/exemplos/imageZoom/imageZoom-passo-5-mouse_wheel.html" target="_blank">veja o ImageZoom com mouse wheel aqui </a></p>
<p>O que eu disse que não terminei no script é que, quando o mouse está sobre a imagem e ao mesmo tempo roda o wheel, dá umas travadas bruscas que precisam ser suavizadas.</p>
<p>Devo lembrar que todos os passos, htmls e scripts estão <a href="http://www.tidbits.com.br/download/exemplos/imageZoom/imageZoom.zip">disponíveis para download</a>.</p>
<p>[]s</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tidbits.com.br/zoom-de-imagem-em-javascript-e-jquery-passos-5-e-6/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Imagem com zoom em Javascript e jQuery &#8211; ImageZoom</title>
		<link>http://www.tidbits.com.br/imagem-com-zoom-em-javascript-e-jquery-imagezoom</link>
		<comments>http://www.tidbits.com.br/imagem-com-zoom-em-javascript-e-jquery-imagezoom#comments</comments>
		<pubDate>Thu, 12 Feb 2009 02:16:38 +0000</pubDate>
		<dc:creator>Danilo</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[imageZoom]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[zoom]]></category>

		<guid isPermaLink="false">http://www.tidbits.com.br/?p=1260</guid>
		<description><![CDATA[Você já deve ter visto imagens com zoom, feito em flash ou em javascript, é bastante comum em sites de e-commerce. Eu fiz um modelo em javascript / jQuery em 4 passos. Todos os passos, htmls e scripts estão disponíveis para download. Passo 1 &#8211; MyParallax Passe o mouse sobre a imagem, que se deslocará [...]]]></description>
			<content:encoded><![CDATA[<p>Você já deve ter visto imagens com zoom, feito em flash ou em javascript, é bastante comum em sites de e-commerce. Eu fiz um modelo em javascript / jQuery em 4 passos. </p>
<p>Todos os passos, htmls e scripts estão <a href="http://www.tidbits.com.br/download/exemplos/imageZoom/imageZoom.zip">disponíveis para download</a>.</p>
<h3> Passo 1 &#8211; MyParallax </h3>
<p>Passe o mouse sobre a imagem, que se deslocará horizontalmente: </p>
<p><iframe height="304" frameborder="0" width="460" scrolling="no" src="http://www.tidbits.com.br/download/exemplos/myParallax/myParallax.html"></iframe></p>
<p>O primeiro passo não vai ter nenhuma explicação pois ele já é um post antigo meu, explicando parallax e o evento mousemove>, o <a href="http://www.tidbits.com.br/myparallax-parallax-com-javascript-com-jquery" target="_blank">myParallax</a> Parallax com javascript com jQuery. Quem não viu, veja pois é interessante, e quem já viu o post, reveja, pois vou utilizar esse script de base para o ImageZoom. </p>
<p>Lá no post eu explico linha por linha, o que o Javascript faz.</p>
<h3> Passo 2 &#8211; Mouse Move Horizontal e Vertical </h3>
<p>Passe o mouse sobre a imagem, que se deslocará horizontalmente e verticalmente: </p>
<p><iframe height="304" frameborder="0" width="470" scrolling="no" src="http://www.tidbits.com.br/download/exemplos/imageZoom/imageZoom-passo-2.html"></iframe><br />
E o que mudou do passo 1? </p>
<p>Agora o &#8220;parallax&#8221; é horizontal e vertical, quem abrir o código vai ver que basicamente só duplicamos o script do passo 1, alterando left por top, width por height, x por y.</p>
<h3> Passo 3 &#8211; Mouse Move Horizontal e Vertical sobre outra imagem </h3>
<p>Passe o mouse sobre o thumb: </p>
<p><iframe height="260" frameborder="0" width="470" scrolling="no" src="http://www.tidbits.com.br/download/exemplos/imageZoom/imageZoom-passo-3.html"></iframe><br />
O que mudou do passo 2? </p>
<p>Pouco, só que agora temos o thumb, e quando passamos o mouse em cima do thumb, obtenho uma porcentagem (por exemplo, se eu passar o mouse bem no meio do thumb seria 50% e 50%. </p>
<p>Depois é só posicionar a imagem dentro do container, com top e left.</p>
<p>E pra dar um efeito maior de zoom, coloquei a imagem da lupa como cursor.</p>
<h3> Passo 4 &#8211; Caixa de luz </h3>
<p>Passe o mouse sobre o thumb: </p>
<p><iframe height="260" frameborder="0" width="470" scrolling="no" src="http://www.tidbits.com.br/download/exemplos/imageZoom/imageZoom-passo-4.html"></iframe><br />
O que mudou do passo 3? </p>
<p>Esse teve a maior mudança, como funciona a caixa de luz?</p>
<p>São quatro quadrados com opacidade:</p>
<p><img src="http://www.tidbits.com.br/wp-content/uploads/2009/02/imagezoom_4_thumb.jpg" alt="imagezoom passo 4" title="imagezoom passo 4"  /></p>
<p>E quando movemos o mouse em cima do thumb os quadrados são redimensionados e reposicionados. E pra dar um efeito melhor, tirei o mouse no css com o cursor: none;</p>
<p>Lembrando que todos os exemplos, scripts e htmls estão <a href="http://www.tidbits.com.br/download/exemplos/imageZoom/imageZoom.zip">disponíveis para download</a>.</p>
<p>[]s</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tidbits.com.br/imagem-com-zoom-em-javascript-e-jquery-imagezoom/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Técnicas para deixar seus scripts em jQuery mais rápido</title>
		<link>http://www.tidbits.com.br/tecnicas-para-deixar-seus-scripts-em-jquery-mais-rapido</link>
		<comments>http://www.tidbits.com.br/tecnicas-para-deixar-seus-scripts-em-jquery-mais-rapido#comments</comments>
		<pubDate>Thu, 05 Feb 2009 17:27:34 +0000</pubDate>
		<dc:creator>Danilo</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Boas Práticas]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Velocidade]]></category>

		<guid isPermaLink="false">http://www.tidbits.com.br/?p=1213</guid>
		<description><![CDATA[Um grande amigo, programador de interface também, me indicou artigo interessante falando de 25 técnicas e truques para aumentar a velocidade dos seus scripts em jQuery. O artigo está em inglês, quem tem fluência no idioma é legal ler a matéria dele também, quem não tem fluência, ou tem mais facilidade em ler em português [...]]]></description>
			<content:encoded><![CDATA[<p>Um grande amigo, programador de interface também, me indicou artigo interessante falando de <a href="http://www.tvidesign.co.uk/blog/improve-your-jquery-25-excellent-tips.aspx" target="_blank">25 técnicas e truques para aumentar a velocidade dos seus scripts em jQuery</a>. O artigo está em inglês, quem tem fluência no idioma é legal ler a matéria dele também, quem não tem fluência, ou tem mais facilidade em ler em português mesmo, segue as dicas que achei mais interessantes, com meus humildes comentários.</p>
<p>Antes de começar, devo dizer que <strong>algumas técnicas são radicais, e merecem ser analisadas se realmente necessitam disso</strong>, então se você considera que o desempenho da sua página está bom, e o código vai ficar desorganizado, não faça. Agora mais aos truques:</p>
<h2>Carregue o jQuery pelo Google Code</h2>
<p>Se você é como eu, você não deve gostar de fazer requisições externas no seu site, mas carregar o jQuery pelo Google Code pode trazer vantagens ao seu site:<br />
- Se muitas pessoas fizerem isso, é provavel que ao entrar no seu site, o usuário não precise baixar o arquivo novamente pois já tem ele em cache, de outro site que também faz a requisição do jQuery pelo Google Code.<br />
- Diminuição no tráfego da banda, o jQuery, muitas vezes representa de 10% a 30% do peso total de uma página, se carregado pelo google,  pode diminuir o tráfego (se isso for um problema no seu servidor).</p>
<p>E para carregar pelo google code é fácil:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;script src=&quot;http://jqueryjs.googlecode.com/files/jquery-1.3.1.min.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</pre>
<h2>Junte seus scripts num arquivo</h2>
<p>Nem sempre isso é possível, mas, se você tem um javascript pra lightbox, outro pra validação, outro pra sei lá o que, e eles sempre são carregados, vale a pena juntar todo o código num script só. A vantagem é que, ao invés do servidor fazer 5 requisições http, ele faz uma só, dando velocidade no loading da página na hora mais importante, quando a página fica em branco, fazendo download dos scripts e css do head.  É lógico que fica mais difícil de trabalhar, menos organizado, por isso é bom fazer isso só depois do site estar pronto. Outra forma de melhorar, é que, em um só script, podemos fazer apenas um $(document).ready() , ao invés de ter várias funções espalhadas pelos scripts.</p>
<h2>Minifique seus scripts</h2>
<p>Outra medida para se fazer após o término da produção do site, é minimizar os scripts, basicamente minificar significa retirar todos os comentários, tabs, quebras de linha, e espaços desnecessários para execução do script, deixando todo o código em um linha só, esse processo diminui em média 30% do tamanho do arquivo javascript, deixando o load da página mais rápido. Para minificar seu script, existem diversos sites onde se cola o script original e eles minificam seu script pra você, no post original ele recomenda o <a href="http://dean.edwards.name/packer/" target="_blank">Packer</a> do Dean Edwards, mas também tem um o <a href="http://javascriptcompressor.com/" target="_blank"> javascript compressor </a> que também faz a mesma coisa, mas é mais fácil de decorar sua url.</p>
<h2>Evite processamento desnecessário nos loop&#8217;s (como seletores)</h2>
<p>Isso não vale só pra jQuery / javascript, vale pra qualquer linguagem de programação. Verifique se nenhum processamento dentro de um for é desnecessário. Ex.:</p>
<pre class="brush: jscript; title: ; notranslate">
for (i = 0; i &lt; 1000; i++) {
var container = $('#container ');
container.append('Este é o ítem: ' + i);
}
</pre>
<p>ou assim:</p>
<pre class="brush: jscript; title: ; notranslate">
for (i = 0; i &lt; 1000; i++) {
$('#container ').append('Este é o ítem: ' + i);
}
</pre>
<p>Os seletores são processos complexos que envolve diversas funções ( getElementById, getElementsByTagName, getElementsByClass entre outras ) além de diversos loops para obter somente os elementos desejados.</p>
<p>Então, o melhor jeito é assim assim:</p>
<pre class="brush: jscript; title: ; notranslate">
var container = $('#container ');
for (i = 0; i &lt; 1000; i++) {
container.append('Este é o ítem: ' + i);
}
</pre>
<h2>Diminua suas manipulações em DOM</h2>
<p>Contrariando o exemplo acima, tem um melhor jeito ainda de fazer o for.</p>
<pre class="brush: jscript; title: ; notranslate">
var htm = '';
for (i = 0; i &lt; 1000; i++) {
htm +='Este é o ítem: ' + i;
}
$('#container ').append(htm);
</pre>
<p>Ao invés de dar 1000 appends no seu elemento, você dá um só, e monta a lista numa variável javascript, tal processo é aproximadamente de 6 vezes.</p>
<h2>Use ID&#8217;s ao invés de classes sempre que possível</h2>
<p>Desde que não atrapalhe seu css, e que não se repita nenhum id no html, use id&#8217;s para posteriormente selecionar o objeto.<img src="http://www.tidbits.com.br/download/_images/copy.gif" alt="veja mais tidbits"/> O javascript trabalha mais rápido com ID (getElementbyId) do que com classes (getElementsByClass).</p>
<p>Veja o exemplo com class que no teste feito pelo autor, rodou em 5066 milisegundos (5 segundos):</p>
<pre class="brush: jscript; title: ; notranslate">
var lista = '&lt;ul&gt;';
// Adicionando li's com class
for (i = 0; i &lt; 1000; i++) {
lista += '&lt;li class=&quot;item' + i + '&quot;&gt;Este é o ítem '+i+'&lt;/li&gt;';
}
lista += '&lt;/ul&gt;';
$('body').append(lista);
// Selecionando elementos com class
for (i = 0; i &lt; 1000; i++) {
var itemSelecionado = $('.item' + i);
}
</pre>
<p>Já no segundo exemplo, faremos a mesma coisa com id&#8217;s  que no teste feito pelo autor, rodou em 61 milisegundos (83 vezes mais rápido):</p>
<pre class="brush: jscript; title: ; notranslate">
var lista = '&lt;ul&gt;';
// Adicionando li's com id
for (i = 0; i &lt; 1000; i++) {
lista += '&lt;li id=&quot;item' + i + '&quot;&gt;Este é o ítem '+i+'&lt;/li&gt;';
}
lista += '&lt;/ul&gt;';
$('body').append(lista);
// Selecionando elementos com id
for (i = 0; i &lt; 1000; i++) {
var itemSelecionado = $('#item' + i);
}
</pre>
<h2>Use diversas ações sobre um seletor (chaining)</h2>
<p> Evite selecionar o mesmo elementos várias vezes, atribua todas as funções em um seletor só:</p>
<p>Ao invés de usar:</p>
<pre class="brush: jscript; title: ; notranslate">
footer = $('#footer');
footer.find('a.reprovar_comentario');
footer.html('aprovar');
footer.attr('class','aprovar_comentario');
footer.attr('title','aprovar');
footer.unbind();
footer.click(aprovarComentario);
</pre>
<p>use somente uma seleção :</p>
<pre class="brush: jscript; title: ; notranslate">
footer = $('#footer');
footer
	.find('a.reprovar_comentario')
	.html('aprovar')
	.attr('class','aprovar_comentario')
	.attr('title','aprovar')
	.unbind()
	.click(aprovarComentario);
</pre>
<h2>Use sempre a última versão do jQuery</h2>
<p><img src="http://www.tidbits.com.br/download/_images/copy.gif" alt="veja mais tidbits"/>Normalmente novas versões de programas, sistemas operacionais, etc&#8230; são mais pesadas com um monte de funções que 99% dos usuários nunca vão usar, mas John Resig, criador do jQuery, continua trabalhando em cima disso, só pra melhorar e deixar o jQuery mais rápido, a atual versão, 1.3.1 ganhou muita velocidade em cima da 1.2.6, o que gerou  algumas incompatibilidades, principalmente com plugins. Então, não precisa refazer (se não estiver mega lerdo) seus antigos sites, mas ao criar um novo, tente usar sempre a última versão do jQuery.</p>
<p>Se alguém ler isso e tiver mais alguma dica legal, diz aí.</p>
<p>[]s</p>
]]></content:encoded>
			<wfw:commentRss>http://www.tidbits.com.br/tecnicas-para-deixar-seus-scripts-em-jquery-mais-rapido/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

