<?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>Pinceladas da Web &#187; JavaScript</title>
	<atom:link href="http://www.pinceladasdaweb.com.br/blog/category/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.pinceladasdaweb.com.br/blog</link>
	<description>Tutoriais sobre: XHTML, CSS, JavaScript e WebStandards</description>
	<lastBuildDate>Thu, 18 Mar 2010 12:02:22 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>CSS3 Columns &amp; jQuery Plugins</title>
		<link>http://www.pinceladasdaweb.com.br/blog/2010/03/18/css3-columns-e-jquery-plugins/</link>
		<comments>http://www.pinceladasdaweb.com.br/blog/2010/03/18/css3-columns-e-jquery-plugins/#comments</comments>
		<pubDate>Thu, 18 Mar 2010 12:02:22 +0000</pubDate>
		<dc:creator>Pedro Rogério</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.pinceladasdaweb.com.br/blog/?p=4133</guid>
		<description><![CDATA[Nesse tutorial voc&#234; ir&#225; aprender a trabalhar com o m&#243;dulo column das CSS3 e a como desenvolver plugins para jQuery:


CSS3 Columns &#038; jQuery Plugins

J&#225; conhece o meu outro blog? O endere&#231;o &#233; o: CSS no Lanche
Voc&#234; ainda n&#227;o est&#225; me seguindo no Twitter, o que est&#225; esperando para fazer isso?
Seletores CSS com jQueryCSS3 Borders &#038; [...]<p><hr />
<a href="http://www.pinceladasdaweb.com.br/blog/2010/03/18/css3-columns-e-jquery-plugins/">CSS3 Columns &#038; jQuery Plugins</a>
<br />
<p>J&aacute; conhece o meu outro blog? O endere&ccedil;o &eacute; o: <a href="http://www.cssnolanche.com.br">CSS no Lanche</a></p>
<p>Voc&ecirc; ainda n&atilde;o est&aacute; me seguindo no <a href="http://twitter.com/pinceladasdaweb" title="Siga-me no Twitter" rel="external">Twitter</a>, o que est&aacute; esperando para fazer isso?</p></p>
]]></description>
			<content:encoded><![CDATA[<p>Nesse <a href="http://doctype.tv/plugin" title="CSS3 Columns &#038; jQuery Plugins" rel="external">tutorial</a> voc&ecirc; ir&aacute; aprender a trabalhar com o <strong>m&oacute;dulo column das CSS3</strong> e a <strong>como desenvolver plugins para jQuery</strong>:</p>
<div class="aligncenter"><object width="610" height="383" type="application/x-shockwave-flash" data="http://www.viddler.com/player/a8ac65aa/"><param value="high" name="quality"></param><param name="allowScriptAccess" value="always"></param><param name="allowFullScreen" value="true"></param><param name="flashvars" value="fake=1"></param><param value="http://www.viddler.com/player/a8ac65aa/" name="movie"><img alt="V&iacute;deo (Objeto multim&iacute;dia)" src="http://www.pinceladasdaweb.com.br/blog/uploads/youtube/video.png"/></param></object></div>
<p><hr />
<a href="http://www.pinceladasdaweb.com.br/blog/2010/03/18/css3-columns-e-jquery-plugins/">CSS3 Columns &#038; jQuery Plugins</a>
<br />
<p>J&aacute; conhece o meu outro blog? O endere&ccedil;o &eacute; o: <a href="http://www.cssnolanche.com.br">CSS no Lanche</a></p>
<p>Voc&ecirc; ainda n&atilde;o est&aacute; me seguindo no <a href="http://twitter.com/pinceladasdaweb" title="Siga-me no Twitter" rel="external">Twitter</a>, o que est&aacute; esperando para fazer isso?</p></p>
<ul class="related_post"><li><a href="http://www.pinceladasdaweb.com.br/blog/2008/11/18/seletores-css-com-jquery/" title="Seletores CSS com jQuery">Seletores CSS com jQuery</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2010/03/11/css3-borders-e-html5-sections/" title="CSS3 Borders &#038; HTML5 Sections">CSS3 Borders &#038; HTML5 Sections</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2010/03/08/help-do-jquery-1-4-em-formato-chm/" title="Help do jQuery 1.4 em formato .chm">Help do jQuery 1.4 em formato .chm</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2010/03/05/novo-css-no-lanche/" title="Novo CSS no Lanche">Novo CSS no Lanche</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2010/02/25/radial-gradients-e-web-sql-databases/" title="Radial Gradients &#038; Web SQL Databases">Radial Gradients &#038; Web SQL Databases</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.pinceladasdaweb.com.br/blog/2010/03/18/css3-columns-e-jquery-plugins/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Valida&#231;&#227;o de formul&#225;rios &#8211; De quem &#233; a responsabilidade?</title>
		<link>http://www.pinceladasdaweb.com.br/blog/2010/03/12/validacao-de-formularios-de-quem-e-a-responsabilidade/</link>
		<comments>http://www.pinceladasdaweb.com.br/blog/2010/03/12/validacao-de-formularios-de-quem-e-a-responsabilidade/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 12:46:54 +0000</pubDate>
		<dc:creator>Pedro Rogério</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.pinceladasdaweb.com.br/blog/?p=4117</guid>
		<description><![CDATA[
De quem &#233; a responsabilidade de validar um formul&#225;rio? Do desenvolvedor front-end ou do programador? A sim, voc&#234;s preferem tirar no cara ou coroa.

A um tempo atr&#225;s fui questionado sobre isso e ent&#227;o resolvi fazer um post sobre o assunto para saber a opini&#227;o de voc&#234;s. Ent&#227;o, imaginem um formul&#225;rio, simples de cadastro por exemplo, [...]<p><hr />
<a href="http://www.pinceladasdaweb.com.br/blog/2010/03/12/validacao-de-formularios-de-quem-e-a-responsabilidade/">Valida&ccedil;&atilde;o de formul&aacute;rios &#8211; De quem &eacute; a responsabilidade?</a>
<br />
<p>J&aacute; conhece o meu outro blog? O endere&ccedil;o &eacute; o: <a href="http://www.cssnolanche.com.br">CSS no Lanche</a></p>
<p>Voc&ecirc; ainda n&atilde;o est&aacute; me seguindo no <a href="http://twitter.com/pinceladasdaweb" title="Siga-me no Twitter" rel="external">Twitter</a>, o que est&aacute; esperando para fazer isso?</p></p>
]]></description>
			<content:encoded><![CDATA[<div class="aligncenter"><img src="http://www.pinceladasdaweb.com.br/blog/uploads/cara-ou-coroa.jpg" alt="Voc&ecirc; tira no cara ou coroa?" title="Voc&ecirc; tira no cara ou coroa?" /></div>
<p>De quem &eacute; a responsabilidade de validar um formul&aacute;rio? Do desenvolvedor front-end ou do programador? A sim, voc&ecirc;s preferem tirar no cara ou coroa.</p>
<p><span id="more-4117"></span></p>
<p>A um tempo atr&aacute;s fui questionado sobre isso e ent&atilde;o resolvi fazer um post sobre o assunto para saber a opini&atilde;o de voc&ecirc;s. Ent&atilde;o, imaginem um formul&aacute;rio, simples de cadastro por exemplo, com alguns campos obrigat&oacute;rios como Nome, Email, CPF, etc. Na sua opini&atilde;o, quem deve efetuar a valida&ccedil;&atilde;o desses dados &eacute; somente o desenvolvedor front-end atrav&eacute;s de JavaScript, ou ele deve deixar isso de lado e a valida&ccedil;&atilde;o deve ser toda feita do lado servidor?</p>
<p>A minha opini&atilde;o &eacute; a seguinte, a valida&ccedil;&atilde;o deve ser efetuada do lado cliente e do lado servidor, muitos desenvolvedores na maioria das vezes n&atilde;o est&atilde;o nem a&iacute; pra isso e s&oacute; querem saber da valida&ccedil;&atilde;o do lado cliente.</p>
<p>Sabe por que digo que a valida&ccedil;&atilde;o deve ser feita tamb&eacute;m do lador servidor, leve em considera&ccedil;&atilde;o que o JavaScript roda do lado cliente, portanto, pode em algum momento falhar e voc&ecirc; ter&aacute; salvo dados inconsistentes em seu banco de dados. E voc&ecirc;, qual sua opini&atilde;o?</p>
<p><hr />
<a href="http://www.pinceladasdaweb.com.br/blog/2010/03/12/validacao-de-formularios-de-quem-e-a-responsabilidade/">Valida&ccedil;&atilde;o de formul&aacute;rios &#8211; De quem &eacute; a responsabilidade?</a>
<br />
<p>J&aacute; conhece o meu outro blog? O endere&ccedil;o &eacute; o: <a href="http://www.cssnolanche.com.br">CSS no Lanche</a></p>
<p>Voc&ecirc; ainda n&atilde;o est&aacute; me seguindo no <a href="http://twitter.com/pinceladasdaweb" title="Siga-me no Twitter" rel="external">Twitter</a>, o que est&aacute; esperando para fazer isso?</p></p>
<ul class="related_post"><li><a href="http://www.pinceladasdaweb.com.br/blog/2007/10/04/72-acronimos-que-falam-os-geeks/" title="72 Acrônimos que falam os Geeks">72 Acrônimos que falam os Geeks</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2006/10/25/aprenda-php-mysql-javascript-css/" title="Aprenda PHP, MySQL, JavaScript, CSS">Aprenda PHP, MySQL, JavaScript, CSS</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2006/10/23/tutocle-tutoriais-para-desenvolvedores-web/" title="Tutocle &#8211; Tutoriais para desenvolvedores web">Tutocle &#8211; Tutoriais para desenvolvedores web</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2006/07/05/eyeos-um-sistema-operacional-rodando-na-web/" title="EyeOS: um sistema operacional rodando na web">EyeOS: um sistema operacional rodando na web</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2010/03/08/help-do-jquery-1-4-em-formato-chm/" title="Help do jQuery 1.4 em formato .chm">Help do jQuery 1.4 em formato .chm</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.pinceladasdaweb.com.br/blog/2010/03/12/validacao-de-formularios-de-quem-e-a-responsabilidade/feed/</wfw:commentRss>
		<slash:comments>49</slash:comments>
		</item>
		<item>
		<title>Help do jQuery 1.4 em formato .chm</title>
		<link>http://www.pinceladasdaweb.com.br/blog/2010/03/08/help-do-jquery-1-4-em-formato-chm/</link>
		<comments>http://www.pinceladasdaweb.com.br/blog/2010/03/08/help-do-jquery-1-4-em-formato-chm/#comments</comments>
		<pubDate>Mon, 08 Mar 2010 12:15:20 +0000</pubDate>
		<dc:creator>Pedro Rogério</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.pinceladasdaweb.com.br/blog/?p=4063</guid>
		<description><![CDATA[
Arquivos do tipo .chm s&#227;o arquivos de ajuda do Windows semelhantes aos .hlp, por&#233;m s&#227;o compilados utilizando fontes .html. Se voc&#234; buscava at&#233; agora uma refer&#234;ncia de consulta r&#225;pida para o Framework jQuery, est&#225; a&#237; a solu&#231;&#227;o, &#243;timo para aquelas horas em que voc&#234; precisa consultar a ajuda do jQuery est&#225; sem internet. Se voc&#234; [...]<p><hr />
<a href="http://www.pinceladasdaweb.com.br/blog/2010/03/08/help-do-jquery-1-4-em-formato-chm/">Help do jQuery 1.4 em formato .chm</a>
<br />
<p>J&aacute; conhece o meu outro blog? O endere&ccedil;o &eacute; o: <a href="http://www.cssnolanche.com.br">CSS no Lanche</a></p>
<p>Voc&ecirc; ainda n&atilde;o est&aacute; me seguindo no <a href="http://twitter.com/pinceladasdaweb" title="Siga-me no Twitter" rel="external">Twitter</a>, o que est&aacute; esperando para fazer isso?</p></p>
]]></description>
			<content:encoded><![CDATA[<div class="aligncenter"><img src="http://www.pinceladasdaweb.com.br/blog/uploads/jquery/jquery-logo.gif" alt="jQuery" title="jQuery" /></div>
<p>Arquivos do tipo .chm s&atilde;o arquivos de ajuda do Windows semelhantes aos .hlp, por&eacute;m s&atilde;o compilados utilizando fontes .html. Se voc&ecirc; buscava at&eacute; agora uma refer&ecirc;ncia de consulta r&aacute;pida para o Framework jQuery, est&aacute; a&iacute; a solu&ccedil;&atilde;o, &oacute;timo para aquelas horas em que voc&ecirc; precisa consultar a <a href="http://docs.jquery.com/" title="Help do JQuery" rel="external">ajuda do jQuery</a> est&aacute; sem internet. Se voc&ecirc; utiliza Windows, basta <a href="http://www.pinceladasdaweb.com.br/blog/uploads/jquery/jquery-1.4.chm.7z" title="Download Help do jQuery 1.4 em formato .chm" rel="alternate enclosure">baixar o arquivo</a>, descomprimir o mesmo e utiliz&aacute;-lo.</p>
<p>Caso voc&ecirc; abra o arquivo e receba um aviso de p&aacute;gina n&atilde;o encontrada ou algo do tipo, efetue os seguintes passos:</p>
<p><span id="more-4063"></span></p>
<ul>
<li>Clique com o bot&atilde;o direito do mouse no arquivo CHM e clique em <strong>Propriedades</strong>.</li>
<li>Clique em <strong>Desbloquear</strong>.</li>
<li>Clique duas vezes no arquivo .chm para abr&iacute;-lo.</li>
</ul>
<p>Maiores informa&ccedil;&otilde;es voc&ecirc; pode ver no site da <a href="http://support.microsoft.com/kb/902225/pt-br" title="N&atilde;o &eacute; poss&iacute;vel abrir arquivos da Ajuda em HTML pelo Internet Explorer" rel="external">Microsoft</a>.</p>
<h3>Usu&aacute;rios de Linux</h3>
<p>Para <strong>visualizar arquivos .chm no Linux</strong> voc&ecirc; vai precisar de um programa chamado <a href="http://xchm.sourceforge.net/">xchm</a>, para instal&aacute;-lo no Ubuntu, por exemplo, basta executar o seguinte comando:</p>
<pre class="brush: c">
sudo apt-get install xchm
</pre>
<h3>Usu&aacute;rios de MAC OS</h3>
<p>Os usu&aacute;rios de MAC OSX devem ter o programa <a href="http://chmox.sourceforge.net/" title="Chmox - Read your CHM documents on your Mac" rel="external">Chmox</a> instalado para <strong>visualizar arquivos .chm no MAC OSX</strong>.</p>
<p>Todos os cr&eacute;ditos do arquivo s&atilde;o do site <a href="http://charupload.wordpress.com/2007/12/07/jquery-documentation-chm/" title="jQuery documentation (CHM)" rel="external">charupload</a> por ter compilado o mesmo.</p>
<p><hr />
<a href="http://www.pinceladasdaweb.com.br/blog/2010/03/08/help-do-jquery-1-4-em-formato-chm/">Help do jQuery 1.4 em formato .chm</a>
<br />
<p>J&aacute; conhece o meu outro blog? O endere&ccedil;o &eacute; o: <a href="http://www.cssnolanche.com.br">CSS no Lanche</a></p>
<p>Voc&ecirc; ainda n&atilde;o est&aacute; me seguindo no <a href="http://twitter.com/pinceladasdaweb" title="Siga-me no Twitter" rel="external">Twitter</a>, o que est&aacute; esperando para fazer isso?</p></p>
<ul class="related_post"><li><a href="http://www.pinceladasdaweb.com.br/blog/2009/05/13/colunas-com-alturas-iguais-com-javascript/" title="Colunas com alturas iguais com JavaScript">Colunas com alturas iguais com JavaScript</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2009/05/01/ebook-gratis-de-jankoatwarpspeed-os-melhores-tutoriais/" title="Ebook grátis de JankoAtWarpSpeed: Os melhores tutoriais ">Ebook grátis de JankoAtWarpSpeed: Os melhores tutoriais </a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2009/02/15/live-event-binding-com-jquery-13/" title="Live event binding com jQuery 1.3">Live event binding com jQuery 1.3</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2009/01/22/jquery-price-plugin/" title="jQuery Price Plugin">jQuery Price Plugin</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2009/01/19/prototype-vs-jquery/" title="Prototype vs. jQuery">Prototype vs. jQuery</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.pinceladasdaweb.com.br/blog/2010/03/08/help-do-jquery-1-4-em-formato-chm/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>JavaScript Tabs sem Framework ou Plugin</title>
		<link>http://www.pinceladasdaweb.com.br/blog/2010/01/13/javascript-tabs-sem-framework-ou-plugin/</link>
		<comments>http://www.pinceladasdaweb.com.br/blog/2010/01/13/javascript-tabs-sem-framework-ou-plugin/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 14:03:23 +0000</pubDate>
		<dc:creator>Pedro Rogério</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.pinceladasdaweb.com.br/blog/?p=3728</guid>
		<description><![CDATA[
Com a populariza&#231;&#227;o dos Frameworks JavaScript fica a cada dia mais dif&#237;cil voc&#234; encontar alguma coisa na web desenvolvida com puro JavaScript. Desenvolver um sistema de Tabs com a utiliza&#231;&#227;o de jQuery &#233; muito simples, mas as vezes pode ser desnecess&#225;rio voc&#234; utilizar tanto JavaScript para fazer simples tabs. Foi pensando nisso que resolvi efetuar [...]<p><hr />
<a href="http://www.pinceladasdaweb.com.br/blog/2010/01/13/javascript-tabs-sem-framework-ou-plugin/">JavaScript Tabs sem Framework ou Plugin</a>
<br />
<p>J&aacute; conhece o meu outro blog? O endere&ccedil;o &eacute; o: <a href="http://www.cssnolanche.com.br">CSS no Lanche</a></p>
<p>Voc&ecirc; ainda n&atilde;o est&aacute; me seguindo no <a href="http://twitter.com/pinceladasdaweb" title="Siga-me no Twitter" rel="external">Twitter</a>, o que est&aacute; esperando para fazer isso?</p></p>
]]></description>
			<content:encoded><![CDATA[<div class="aligncenter"><img src="http://www.pinceladasdaweb.com.br/blog/uploads/excessive-javascript.png" alt="Excessive JavaScript" title="Excessive JavaScript" /></div>
<p>Com a populariza&ccedil;&atilde;o dos <a href="http://www.cssnolanche.com.br/22-javascript-frameworks/" title="22 Frameworks JavaScript" rel="external">Frameworks JavaScript</a> fica a cada dia mais dif&iacute;cil voc&ecirc; encontar alguma coisa na web desenvolvida com puro JavaScript. Desenvolver um sistema de Tabs com a utiliza&ccedil;&atilde;o de jQuery &eacute; muito simples, mas as vezes pode ser desnecess&aacute;rio voc&ecirc; utilizar tanto JavaScript para fazer simples tabs. Foi pensando nisso que resolvi efetuar a tradu&ccedil;&atilde;o do artigo do site <a href="http://www.elated.com/articles/javascript-tabs/" title="Tutorial: JavaScript Tabs - Create Tabbed Web Pages Easily" rel="external">Elated</a>, onde ele ensina de uma forma muito simples a desenvolver um sistema de Tabs com puro JavaScript.</p>
<p><span id="more-3728"></span></p>
<h3>Cria&ccedil;&atilde;o do HTML para nossas abas</h3>
<p>O HTML para as tabs e conte&uacute;do &eacute; muito simples. Voc&ecirc; armazena o conte&uacute;do de cada tab dentro de um elemento div com uma classe chamada tabContent e um id exclusivo para refer&ecirc;ncia. Aqui est&aacute; como exemplo o conte&uacute;do da primeira de 3 tabs:</p>
<pre class="brush: xhtml">
&lt;div class=&quot;tabContent&quot; id=&quot;about&quot;&gt;
  &lt;h2&gt;About JavaScript tabs&lt;/h2&gt;
  &lt;div&gt;
    &lt;p&gt;JavaScript tabs partition your Web page content into tabbed sections. Only one section at a time is visible.&lt;/p&gt;
    &lt;p&gt;The code is written in such a way that the page degrades gracefully in browsers that don&#039;t support JavaScript or CSS.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
</pre>
<p>As tabs s&atilde;o simplesmente links dentro de uma lista desordenada:</p>
<pre class="brush: xhtml">
&lt;ul id=&quot;tabs&quot;&gt;
  &lt;li&gt;&lt;a href=&quot;#about&quot;&gt;About JavaScript tabs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#advantages&quot;&gt;Advantages of tabs&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#usage&quot;&gt;Using tabs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</pre>
<p>Voc&ecirc; deve definir que o ul tenha o id &#8220;tabs&#8221; para que o c&oacute;digo JavaScript possa localiz&aacute;-lo. Cada link dentro da lista de links faz refer&ecirc;ncia a sua div conte&uacute;do (&#8220;about&#8221;, &#8220;advantages&#8221;, e &#8220;usage&#8221;). Uma vez que eles s&atilde;o links padr&atilde;o do HTML, tamb&eacute;m funcionam com o JavaScript desabilitado.</p>
<p>Voc&ecirc; pode adicionar quantas tabs quiser a sua p&aacute;gina. Basta criar uma nova div com um identifica&ccedil;&atilde;o &uacute;nica e em seguida adicionar um link a mesma dentro da lista de tabs.</p>
<h3>Cria&ccedil;&atilde;o do CSS</h3>
<p>O CSS &eacute; necess&aacute;rio para tornar as guias parecidas com abas e tamb&eacute;m tornar a sua apar&ecirc;ncia mais agrad&aacute;vel:</p>
<pre class="brush: css">
body { font-size: 80%; font-family: &#039;Lucida Grande&#039;, Verdana, Arial, Sans-Serif; }
ul#tabs { list-style-type: none; margin: 30px 0 0 0; padding: 0 0 0.3em 0; }
ul#tabs li { display: inline; }
ul#tabs li a { color: #42454a; background-color: #dedbde; border: 1px solid #c9c3ba; border-bottom: none; padding: 0.3em; text-decoration: none; }
ul#tabs li a:hover { background-color: #f1f0ee; }
ul#tabs li a.selected { color: #000; background-color: #f1f0ee; font-weight: bold; padding: 0.7em 0.3em 0.38em 0.3em; }
div.tabContent { border: 1px solid #c9c3ba; padding: 0.5em; background-color: #f1f0ee; }
div.tabContent.hide { display: none; }
</pre>
<p>Essas regras CSS funcionam da seguinte forma:</p>
<dl>
<dt><strong>body</strong></dt>
<dd>Cont&eacute;m as regras de fonte para a p&aacute;gina e as tabs.</dd>
<dt><strong>ul#tabs</strong></dt>
<dd>Defini&ccedil;&atilde;o de estilo para as guias e remo&ccedil;&atilde;o dos bullets da lista.</dd>
<dt><strong>ul#tabs li</strong></dt>
<dd>O uso de display:inline &eacute; para que as tabs tenham sua disposi&ccedil;&atilde;o na horizontal.</dd>
<dt><strong>ul#tabs li a</strong></dt>
<dd>Aplicamos estilos aos links da lista. Cada link agora possui uma borda, exceto border-bottom para que ela combine perfeitamente com sua div conte&uacute;do.</dd>
<dt><strong>ul#tabs li a:hover</strong></dt>
<dd>A tab fica em destaque ao passar o mouse sob ela.</dd>
<dt><strong>ul#tabs li a.selected</strong></dt>
<dd>Estilos definidos para a guia selecionada, aplicando um fundo mais claro, texto em negrito e tamb&eacute;m aumentamos o tamanho da fonte. Observe que o padding-bottom foi definido como 0.38em para que ele se funda com a sua div conte&uacute;do.</dd>
<dt><strong>div.tabContent</strong></dt>
<dd>Define um estilo para as &aacute;reas de conte&uacute;do.</dd>
<dt><strong>div.tabContent.hide</strong></dt>
<dd>Usado para ocultar as tabs n&atilde;o selecionadas.</dd>
</dl>
<h3>Cria&ccedil;&atilde;o do c&oacute;digo JavaScript</h3>
<p>Finalmente, &eacute; claro, voc&ecirc; precisa de JavaScript para que as tabs funcionem.</p>
<ul>
<li>Adicionar a fun&ccedil;&atilde;o showTab() ao evento onclick para cada um dos links das tabs.</li>
<li>Ocultar todas as divs conte&uacute;do, exceto a primeira, de modo que s&oacute; o conte&uacute;do da primeira tab esteja vis&iacute;vel ao carregar a p&aacute;gina.</li>
<li>getFirstChildWithTagName() &eacute; uma fun&ccedil;&atilde;o auxiliar que recupera o primeiro filho de um determinado elemento que possui um tag name.</li>
<li>gethash () &eacute; outra fun&ccedil;&atilde;o auxiliar que retorna parte da URL que aparece ap&oacute;s o s&iacute;mbolo #.</li>
</ul>
<p>Veja como funciona essas fun&ccedil;&otilde;es.</p>
<h4>Fun&ccedil;&atilde;o init()</h4>
<p>A primeira, e mais complexa, &eacute; a fun&ccedil;&atilde;o init(). &Eacute; chamada quando a p&aacute;gina &eacute; carregada, gra&ccedil;as ao evento onload no elemento body:</p>
<pre><code>&lt;body onload="init()"&gt;</code></pre>
<p>Abaixo a pr&oacute;pria fun&ccedil;&atilde;o:</p>
<pre class="brush: javascript">
function init() {

      // Pega todas as tabs e as divs conte&uacute;do da p&aacute;gina
      var tabListItems = document.getElementById(&#039;tabs&#039;).childNodes;
      for ( var i = 0; i &lt; tabListItems.length; i++ ) {
        if ( tabListItems[i].nodeName == &quot;LI&quot; ) {
          var tabLink = getFirstChildWithTagName( tabListItems[i], &#039;A&#039; );
          var id = getHash( tabLink.getAttribute(&#039;href&#039;) );
          tabLinks[id] = tabLink;
          contentDivs[id] = document.getElementById( id );
        }
      }

      // Adiciona eventos onclick as tabs e destaca a primeira aba
      var i = 0;

      for ( var id in tabLinks ) {
        tabLinks[id].onclick = showTab;
        tabLinks[id].onfocus = function() { this.blur() };
        if ( i == 0 ) tabLinks[id].className = &#039;selected&#039;;
        i++;
      }

      // Oculta todas as divs conte&uacute;do, exceto a primeira
      var i = 0;

      for ( var id in contentDivs ) {
        if ( i != 0 ) contentDivs[id].className = &#039;tabContent hide&#039;;
        i++;
      }
    }
</pre>
<p>Essa fun&ccedil;&atilde;o faz 3 coisas:</p>
<ul>
<li>Ele percorre todos os elementos li na lista desordenada. Para cada elemento li ele chama a fun&ccedil;&atilde;o getFirstChildWithTagName() para recuperar o elemento dentro com o link. Em aux&iacute;lio, ele tamb&eacute;m chama a fun&ccedil;&atilde;o getHash() para extrair parte da URL do link, ap&oacute;s o hash, que &eacute; o ID da div conte&uacute;do correspondente. O link ent&atilde;o &eacute; armazenado no array tabLinks, e a div de conte&uacute;do &eacute; armazenada no array contentDivs.</li>
<li>Ele atribui o evento onclick com a fun&ccedil;&atilde;o showTab() para cada link da lista e destaca a primeira tab com a classe &#8217;selected&#8217;.</li>
<li>Ele oculta todas as divs conte&uacute;do, exceto a primeira, definindo que as divs tenham as classes &#8216;tabContent hide&#8217;.</li>
</ul>
<h4>Fun&ccedil;&atilde;o showTab()</h4>
<p>showTab() &eacute; chamada toda vez que uma tab &eacute; clicada. Ele destaca a tab selecionada e mostra o conte&uacute;do relacionado a tab. Ele tamb&eacute;m remove o destaque das outras tabs e oculta as divs com o conte&uacute;do relacionado.</p>
<pre class="brush: javascript">
function showTab() {
      var selectedId = getHash( this.getAttribute(&#039;href&#039;) );

      // Destaca a tab selecionada e remove o destaque das outras
      // Mostra a div com o conte&uacute;do relacionado e oculta as outras
      for ( var id in contentDivs ) {
        if ( id == selectedId ) {
          tabLinks[id].className = &#039;selected&#039;;
          contentDivs[id].className = &#039;tabContent&#039;;
        } else {
          tabLinks[id].className = &#039;&#039;;
          contentDivs[id].className = &#039;tabContent hide&#039;;
        }
      }

      // Faz com que o browser n&atilde;o siga o link
      return false;
    }
</pre>
<p>A fun&ccedil;&atilde;o estrai o ID do link selecionado e os armazena na vari&aacute;vel selectedId. Em seguida, percorre todos os IDs. Nos selecionados ocorre o destaque a div com o conte&uacute;do correspondente &eacute; mostrado, para as outras tabs o destaque &eacute; removido e o conte&uacute;do relacionado &eacute; oculto.</p>
<p>A fun&ccedil;&atilde;o possui um return false para que anule o comportamento padr&atilde;o do browser de seguir o link e adicionar o mesmo ao hist&oacute;rico do browser.</p>
<h4>Fun&ccedil;&atilde;o getFirstChildWithTagName()</h4>
<p>Essa fun&ccedil;&atilde;o retorna o primeiro filho de um elemento especificado correspondente a tag. init() chama essa fun&ccedil;&atilde;o para recuperar o link dentro de cada item da lista.</p>
<pre class="brush: javascript">
function getFirstChildWithTagName( element, tagName ) {
      for ( var i = 0; i &lt; element.childNodes.length; i++ ) {
        if ( element.childNodes[i].nodeName == tagName ) return element.childNodes[i];
      }
    }
</pre>
<p>A fun&ccedil;&atilde;o percorre os n&oacute;s filho do elemento at&eacute; encontrar um n&oacute; correspondente a seu tagName. Em seguida, ele retorna o n&oacute;.</p>
<p>Leia mais sobre as propriedades childNodes e nodeName no artigo: <a href="http://www.elated.com/articles/looking-inside-dom-page-elements/" title="Looking inside DOM page elements" rel="external">Looking inside DOM page elements</a>.</p>
<h4>Fun&ccedil;&atilde;o getHash()</h4>
<p>A fun&ccedil;&atilde;o getHash() retorna parte da URL ap&oacute;s encontrar qualquer s&iacute;mbolo hash(#). Usado por init() e showTab() para extrair o ID da div conte&uacute;do relacionado com o link das tabs.</p>
<pre class="brush: javascript">
function getHash( url ) {
      var hashPos = url.lastIndexOf ( &#039;#&#039; );
      return url.substring( hashPos + 1 );
    }
</pre>
<h3>Todas as fun&ccedil;&otilde;es em conjunto</h3>
<p>Isso &eacute; tudo o que voc&ecirc; precisa para desenvolver tabs com JavaScript. Veja a <a href="http://www.pinceladasdaweb.com.br/blog/uploads/javascript-tabs/" title="JavaScript Tabs sem Framework ou Plugin" rel="alternate">demonstra&ccedil;&atilde;o</a> e olhe o c&oacute;digo fonte da p&aacute;gina para ver como o HTML, CSS e JavaScript aparecem.</p>
<ul>
<li>O CSS e o JavaScript v&atilde;o no topo da p&aacute;gina. (Voc&ecirc; pode coloc&aacute;-los em arquivos separadados).</li>
<li>Elemento body da p&aacute;gina que cont&eacute;m o manipulador de eventos onload para iniciar a fun&ccedil;&atilde;o init().</li>
<li>O elemento ul que cont&eacute;m as tabs com os links.</li>
<li>Cada conte&uacute;do da tab &eacute; armazenado em uma div com a classe tabContent e um id &uacute;nico (referenciado no link da aba correspondente).</li>
</ul>
<p><hr />
<a href="http://www.pinceladasdaweb.com.br/blog/2010/01/13/javascript-tabs-sem-framework-ou-plugin/">JavaScript Tabs sem Framework ou Plugin</a>
<br />
<p>J&aacute; conhece o meu outro blog? O endere&ccedil;o &eacute; o: <a href="http://www.cssnolanche.com.br">CSS no Lanche</a></p>
<p>Voc&ecirc; ainda n&atilde;o est&aacute; me seguindo no <a href="http://twitter.com/pinceladasdaweb" title="Siga-me no Twitter" rel="external">Twitter</a>, o que est&aacute; esperando para fazer isso?</p></p>
<ul class="related_post"><li><a href="http://www.pinceladasdaweb.com.br/blog/2010/03/12/validacao-de-formularios-de-quem-e-a-responsabilidade/" title="Validação de formulários &#8211; De quem é a responsabilidade?">Validação de formulários &#8211; De quem é a responsabilidade?</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2010/03/08/help-do-jquery-1-4-em-formato-chm/" title="Help do jQuery 1.4 em formato .chm">Help do jQuery 1.4 em formato .chm</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2009/12/30/ecsstender-assuma-o-controle-do-seu-css/" title="eCSStender: Assuma o controle do seu CSS">eCSStender: Assuma o controle do seu CSS</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2009/10/02/quer-ganhar-um-livro-de-javascript/" title="Quer ganhar um livro de JavaScript?">Quer ganhar um livro de JavaScript?</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2009/09/01/os-temporizadores-do-javascript/" title="Os Temporizadores do JavaScript">Os Temporizadores do JavaScript</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.pinceladasdaweb.com.br/blog/2010/01/13/javascript-tabs-sem-framework-ou-plugin/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>eCSStender: Assuma o controle do seu CSS</title>
		<link>http://www.pinceladasdaweb.com.br/blog/2009/12/30/ecsstender-assuma-o-controle-do-seu-css/</link>
		<comments>http://www.pinceladasdaweb.com.br/blog/2009/12/30/ecsstender-assuma-o-controle-do-seu-css/#comments</comments>
		<pubDate>Wed, 30 Dec 2009 12:55:29 +0000</pubDate>
		<dc:creator>Walter Vieira</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.pinceladasdaweb.com.br/blog/?p=3632</guid>
		<description><![CDATA[
Diga adeus aos c&#243;digos CSS cheios de hacks que em alguns casos acabam mais atrapalhando do que ajudando e projete seus c&#243;digos muito mais enxutos.
Estou falando do eCSStender, com ele voc&#234; pode usar seletores CSS avan&#231;ados como border-radius e ter a certeza de que vai funcionar at&#233; no IE6.
Acesse o site e descubra como esse [...]<p><hr />
<a href="http://www.pinceladasdaweb.com.br/blog/2009/12/30/ecsstender-assuma-o-controle-do-seu-css/">eCSStender: Assuma o controle do seu CSS</a>
<br />
<p>J&aacute; conhece o meu outro blog? O endere&ccedil;o &eacute; o: <a href="http://www.cssnolanche.com.br">CSS no Lanche</a></p>
<p>Voc&ecirc; ainda n&atilde;o est&aacute; me seguindo no <a href="http://twitter.com/pinceladasdaweb" title="Siga-me no Twitter" rel="external">Twitter</a>, o que est&aacute; esperando para fazer isso?</p></p>
]]></description>
			<content:encoded><![CDATA[<div class="aligncenter"><img src="http://www.kv2.com.br/pinceladasdaweb/Imagem1.png" alt="eCSStender" title="eCSStender" /></div>
<p>Diga adeus aos c&oacute;digos CSS cheios de hacks que em alguns casos acabam mais atrapalhando do que ajudando e projete seus c&oacute;digos muito mais enxutos.<br />
Estou falando do <a title="eCSStender" href="http://ecsstender.org" rel="external">eCSStender</a>, com ele voc&ecirc; pode usar seletores CSS avan&ccedil;ados como <strong>border-radius</strong> e ter a certeza de que vai funcionar at&eacute; no IE6.</p>
<p>Acesse o site e descubra como esse framework maravilhoso pode facilitar sua vida.</p>
<p><strong>Link direto:</strong> <a rel="external" href="http://ecsstender.org/" title="eCSStender">http://ecsstender.org</a></p>
<p><hr />
<a href="http://www.pinceladasdaweb.com.br/blog/2009/12/30/ecsstender-assuma-o-controle-do-seu-css/">eCSStender: Assuma o controle do seu CSS</a>
<br />
<p>J&aacute; conhece o meu outro blog? O endere&ccedil;o &eacute; o: <a href="http://www.cssnolanche.com.br">CSS no Lanche</a></p>
<p>Voc&ecirc; ainda n&atilde;o est&aacute; me seguindo no <a href="http://twitter.com/pinceladasdaweb" title="Siga-me no Twitter" rel="external">Twitter</a>, o que est&aacute; esperando para fazer isso?</p></p>
<ul class="related_post"><li><a href="http://www.pinceladasdaweb.com.br/blog/2009/05/13/colunas-com-alturas-iguais-com-javascript/" title="Colunas com alturas iguais com JavaScript">Colunas com alturas iguais com JavaScript</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2009/05/01/ebook-gratis-de-jankoatwarpspeed-os-melhores-tutoriais/" title="Ebook grátis de JankoAtWarpSpeed: Os melhores tutoriais ">Ebook grátis de JankoAtWarpSpeed: Os melhores tutoriais </a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2008/12/02/24-ways-versao-2008/" title="24 ways: Versão 2008">24 ways: Versão 2008</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2008/11/18/seletores-css-com-jquery/" title="Seletores CSS com jQuery">Seletores CSS com jQuery</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2008/11/05/peppy-seletor-javascript-css3-mais-rapido-da-web/" title="Peppy &#8211; Seletor JavaScript CSS3 mais rápido da Web">Peppy &#8211; Seletor JavaScript CSS3 mais rápido da Web</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.pinceladasdaweb.com.br/blog/2009/12/30/ecsstender-assuma-o-controle-do-seu-css/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Detectar Mobile Browsers em v&#225;rias linguagens</title>
		<link>http://www.pinceladasdaweb.com.br/blog/2009/12/09/detectar-mobile-browsers-em-varias-linguagens/</link>
		<comments>http://www.pinceladasdaweb.com.br/blog/2009/12/09/detectar-mobile-browsers-em-varias-linguagens/#comments</comments>
		<pubDate>Wed, 09 Dec 2009 10:14:25 +0000</pubDate>
		<dc:creator>Walter Vieira</dc:creator>
				<category><![CDATA[Browsers]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[Browser]]></category>
		<category><![CDATA[Mobile]]></category>

		<guid isPermaLink="false">http://www.pinceladasdaweb.com.br/blog/?p=3578</guid>
		<description><![CDATA[Dando continuidade ao post do Pedro Rog&#233;rio sobre como Detectar Mobile Browsers com PHP, apresento mais uma op&#231;&#227;o que vai ajudar muito no desenvolvimento Mobile, o Detectmobilebrowser.com.

Trata-se de uma ferramenta opensource de Mobile Phone Detection, que oferece suporte para as principais linguagens do mercado (PHP,Rails,Javascript,ASP,etc).
&#201; s&#243; escolher a linguagem desejada e baixar o arquivo.

Detectar Mobile [...]<p><hr />
<a href="http://www.pinceladasdaweb.com.br/blog/2009/12/09/detectar-mobile-browsers-em-varias-linguagens/">Detectar Mobile Browsers em v&aacute;rias linguagens</a>
<br />
<p>J&aacute; conhece o meu outro blog? O endere&ccedil;o &eacute; o: <a href="http://www.cssnolanche.com.br">CSS no Lanche</a></p>
<p>Voc&ecirc; ainda n&atilde;o est&aacute; me seguindo no <a href="http://twitter.com/pinceladasdaweb" title="Siga-me no Twitter" rel="external">Twitter</a>, o que est&aacute; esperando para fazer isso?</p></p>
]]></description>
			<content:encoded><![CDATA[<p>Dando continuidade ao post do <a href="http://www.pinceladasdaweb.com.br/blog/" title="Pinceladas da Web" rel="alternate">Pedro Rog&eacute;rio</a> sobre como <a title="Mobile" href="http://www.pinceladasdaweb.com.br/blog/2009/11/24/detectar-mobile-browsers-com-php/">Detectar Mobile Browsers com PHP</a>, apresento mais uma op&ccedil;&atilde;o que vai ajudar muito no desenvolvimento Mobile, o <a title="http://detectmobilebrowser.com/" href="http://detectmobilebrowser.com/">Detectmobilebrowser.com</a>.</p>
<div class="aligncenter"><img src="http://www.kv2.com.br/pinceladasdaweb/mobile-browser.jpg" alt="Mobile Browser Detection" title="Mobile Browser Detection" /></div>
<p>Trata-se de uma ferramenta opensource de Mobile Phone Detection, que oferece suporte para as principais linguagens do mercado (PHP,Rails,Javascript,ASP,etc).</p>
<p>&Eacute; s&oacute; escolher a linguagem desejada e baixar o arquivo.</p>
<p><hr />
<a href="http://www.pinceladasdaweb.com.br/blog/2009/12/09/detectar-mobile-browsers-em-varias-linguagens/">Detectar Mobile Browsers em v&aacute;rias linguagens</a>
<br />
<p>J&aacute; conhece o meu outro blog? O endere&ccedil;o &eacute; o: <a href="http://www.cssnolanche.com.br">CSS no Lanche</a></p>
<p>Voc&ecirc; ainda n&atilde;o est&aacute; me seguindo no <a href="http://twitter.com/pinceladasdaweb" title="Siga-me no Twitter" rel="external">Twitter</a>, o que est&aacute; esperando para fazer isso?</p></p>
<ul class="related_post"><li><a href="http://www.pinceladasdaweb.com.br/blog/2009/11/24/detectar-mobile-browsers-com-php/" title="Detectar Mobile Browsers com PHP">Detectar Mobile Browsers com PHP</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2009/07/28/mobile-phone-development-tools/" title="Mobile Phone Development Tools">Mobile Phone Development Tools</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2008/12/08/primeiro-mobile-expert/" title="1º Mobile Expert">1º Mobile Expert</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2008/10/31/skyfire-browser-alternativo-para-windows-mobile/" title="Skyfire &#8211; Browser alternativo para Windows Mobile">Skyfire &#8211; Browser alternativo para Windows Mobile</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2008/03/12/acessibilidade-e-boas-praticas-no-desenvolvimento-para-dispositivos-moveis/" title="Acessibilidade e boas práticas no desenvolvimento para dispositivos móveis ">Acessibilidade e boas práticas no desenvolvimento para dispositivos móveis </a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.pinceladasdaweb.com.br/blog/2009/12/09/detectar-mobile-browsers-em-varias-linguagens/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Quer ganhar um livro de JavaScript?</title>
		<link>http://www.pinceladasdaweb.com.br/blog/2009/10/02/quer-ganhar-um-livro-de-javascript/</link>
		<comments>http://www.pinceladasdaweb.com.br/blog/2009/10/02/quer-ganhar-um-livro-de-javascript/#comments</comments>
		<pubDate>Fri, 02 Oct 2009 12:34:10 +0000</pubDate>
		<dc:creator>Pedro Rogério</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.pinceladasdaweb.com.br/blog/?p=3257</guid>
		<description><![CDATA[
Fui convidado a um tempo atr&#225;s pela editora Bookman para fazer a avalia&#231;&#227;o do livro A Arte e a Ci&#234;ncia da CSS, um livro muito bom que traz solu&#231;&#245;es pr&#225;ticas para problemas mais corriqueiros do dia-a-dia. O livro tem foco no que voc&#234; mais utiliza, como formul&#225;rios, t&#237;tulos, imagens, backgrounds, navega&#231;&#227;o.

Se j&#225; n&#227;o bastasse eu [...]<p><hr />
<a href="http://www.pinceladasdaweb.com.br/blog/2009/10/02/quer-ganhar-um-livro-de-javascript/">Quer ganhar um livro de JavaScript?</a>
<br />
<p>J&aacute; conhece o meu outro blog? O endere&ccedil;o &eacute; o: <a href="http://www.cssnolanche.com.br">CSS no Lanche</a></p>
<p>Voc&ecirc; ainda n&atilde;o est&aacute; me seguindo no <a href="http://twitter.com/pinceladasdaweb" title="Siga-me no Twitter" rel="external">Twitter</a>, o que est&aacute; esperando para fazer isso?</p></p>
]]></description>
			<content:encoded><![CDATA[<div class="aligncenter"><a href="http://www.artmed.com.br/WEB-PRODUTOS/produto_detalhe.aspx?id_produto=2818" title="S&oacute; JavaScript" rel="external"><img src="http://www.pinceladasdaweb.com.br/blog/uploads/so-javascript.jpg" alt="S&oacute; JavaScript" title="S&oacute; JavaScript" /></a></div>
<p>Fui convidado a um tempo atr&aacute;s pela editora <a href="http://www.bookman.com.br/" title="Bookman" rel="external">Bookman</a> para fazer a avalia&ccedil;&atilde;o do livro <a href="http://www.artmed.com.br/WEB-PRODUTOS/produto_detalhe.aspx?id_produto=2786" title="A Arte e a Ci&ecirc;ncia da CSS" rel="external">A Arte e a Ci&ecirc;ncia da CSS</a>, um livro muito bom que traz solu&ccedil;&otilde;es pr&aacute;ticas para problemas mais corriqueiros do dia-a-dia. O livro tem foco no que voc&ecirc; mais utiliza, como formul&aacute;rios, t&iacute;tulos, imagens, backgrounds, navega&ccedil;&atilde;o.</p>
<p><span id="more-3257"></span></p>
<p>Se j&aacute; n&atilde;o bastasse eu ter enviado o review do livro de CSS, fui chamado para fazer mais um, dessa vez do livro <a href="http://www.artmed.com.br/WEB-PRODUTOS/produto_detalhe.aspx?id_produto=2818" title="S&oacute; JavaScript" rel="external">S&oacute; JavaScript</a>. Esse livro &eacute; ideal para iniciantes, e para aqueles que tamb&eacute;m j&aacute; trabalham com JavaScript, pois com ele voc&ecirc; aprender&aacute; a programar da forma correta.</p>
<p>Eles explicam muito bem eventos, valida&ccedil;&atilde;o de formul&aacute;rios, entre outras coisas essenciais para programar em JavaScript. Ao decorrer do livro, voc&ecirc; vai montando sua pr&oacute;pria biblioteca, inclusive com a possibilidade de criar anima&ccedil;&otilde;es via JavaScript. Ficou interessado no livro? Eu possuo um exemplar para sortear aqui no blog e o sorteio funciona da seguinte forma:</p>
<p>O primeiro que enviar um Tweet para a <a href="http://twitter.com/bookmaneditora" title="Twitter da Editora Bookman" rel="external">Editora Bookman</a> dizendo que l&ecirc; o meu blog e quer o livro ganha o mesmo. Muito simples n&atilde;o, s&oacute; basta ser r&aacute;pido.</p>
<p><hr />
<a href="http://www.pinceladasdaweb.com.br/blog/2009/10/02/quer-ganhar-um-livro-de-javascript/">Quer ganhar um livro de JavaScript?</a>
<br />
<p>J&aacute; conhece o meu outro blog? O endere&ccedil;o &eacute; o: <a href="http://www.cssnolanche.com.br">CSS no Lanche</a></p>
<p>Voc&ecirc; ainda n&atilde;o est&aacute; me seguindo no <a href="http://twitter.com/pinceladasdaweb" title="Siga-me no Twitter" rel="external">Twitter</a>, o que est&aacute; esperando para fazer isso?</p></p>
<ul class="related_post"><li><a href="http://www.pinceladasdaweb.com.br/blog/2010/03/12/validacao-de-formularios-de-quem-e-a-responsabilidade/" title="Validação de formulários &#8211; De quem é a responsabilidade?">Validação de formulários &#8211; De quem é a responsabilidade?</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2010/03/08/help-do-jquery-1-4-em-formato-chm/" title="Help do jQuery 1.4 em formato .chm">Help do jQuery 1.4 em formato .chm</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2010/01/13/javascript-tabs-sem-framework-ou-plugin/" title="JavaScript Tabs sem Framework ou Plugin">JavaScript Tabs sem Framework ou Plugin</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2009/12/30/ecsstender-assuma-o-controle-do-seu-css/" title="eCSStender: Assuma o controle do seu CSS">eCSStender: Assuma o controle do seu CSS</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2009/09/01/os-temporizadores-do-javascript/" title="Os Temporizadores do JavaScript">Os Temporizadores do JavaScript</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.pinceladasdaweb.com.br/blog/2009/10/02/quer-ganhar-um-livro-de-javascript/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Os Temporizadores do JavaScript</title>
		<link>http://www.pinceladasdaweb.com.br/blog/2009/09/01/os-temporizadores-do-javascript/</link>
		<comments>http://www.pinceladasdaweb.com.br/blog/2009/09/01/os-temporizadores-do-javascript/#comments</comments>
		<pubDate>Tue, 01 Sep 2009 11:30:31 +0000</pubDate>
		<dc:creator>Jeronimo Fagundes</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.pinceladasdaweb.com.br/blog/?p=2987</guid>
		<description><![CDATA[JavaScript tem duas fun&ccedil;&otilde;es muito &uacute;teis que servem para "agendar tarefas" que devam ser executadas. S&atilde;o elas o setTimeout e o setInterval.<p><hr />
<a href="http://www.pinceladasdaweb.com.br/blog/2009/09/01/os-temporizadores-do-javascript/">Os Temporizadores do JavaScript</a>
<br />
<p>J&aacute; conhece o meu outro blog? O endere&ccedil;o &eacute; o: <a href="http://www.cssnolanche.com.br">CSS no Lanche</a></p>
<p>Voc&ecirc; ainda n&atilde;o est&aacute; me seguindo no <a href="http://twitter.com/pinceladasdaweb" title="Siga-me no Twitter" rel="external">Twitter</a>, o que est&aacute; esperando para fazer isso?</p></p>
]]></description>
			<content:encoded><![CDATA[<p>JavaScript tem duas fun&ccedil;&otilde;es muito &uacute;teis que servem para &#8220;agendar tarefas&#8221; que devam ser executadas. S&atilde;o elas o <em>setTimeout</em> e o <em>setInterval</em>.</p>
<p>O <em>setTimeout</em> tem dois par&acirc;metros; o primeiro &eacute; uma string contendo o c&oacute;digo a ser executado. O segundo &eacute; o tempo, em milissegundos, que se deve esperar para executar tal c&oacute;digo. O seguinte trecho de c&oacute;digo mostrar&aacute; um alerta ap&oacute;s 2000 milissegundos (ou seja, 2 segundos).</p>
<pre class="brush: javascript">
setTimeout(&quot;alert(&#039;Viva!&#039;)&quot;, 2000);
</pre>
<p>A diferen&ccedil;a entre <em>setTimeout</em> e <em>setInterval</em> &eacute; que o setTimeout executa o c&oacute;digo especificado apenas uma vez. O setInterval executa infinitas vezes, com o intervalo de tempo especificado entre cada execu&ccedil;&atilde;o. Por exemplo, o seguinte c&oacute;digo exibir&aacute; um alerta a cada 10 segundos.</p>
<pre class="brush: javascript">
setInterval(&quot;alert(&#039;Viva!&#039;)&quot;, 10000);
</pre>
<p><span id="more-2987"></span></p>
<p>Voc&ecirc; pode se arrepender de ter agendado a execu&ccedil;&atilde;o do c&oacute;digo. Nesse caso, s&atilde;o necess&aacute;rias duas coisas: ter guardado a tarefa numa vari&aacute;vel, e usar a fun&ccedil;&atilde;o de cancelamento de execu&ccedil;&atilde;o. S&atilde;o duas as fun&ccedil;&otilde;es de cancelamento: <em>clearTimeout</em>, para cancelar as tarefas agendadas com setTimeout, e <em>clearInterval</em>, que cancela as agendadas com setInterval.<br />
Por exemplo, o c&oacute;digo abaixo <em>n&atilde;o</em> mostrar&aacute; alerta algum, pois as tarefas agendadas ser&atilde;o canceladas.</p>
<pre class="brush: javascript">
var alerta_unico = setTimeout(&quot;alert(&#039;Viva!&#039;)&quot;, 5000);
var alerta_intermitente = setInterval(&quot;alert(&#039;Viva!&#039;)&quot;, 10000);

clearTimeout(alerta_unico); // Cancela o alerta agendado em setTimeout
clearInterval(alerta_intermitente); // Cancela o alerta agendado em setInterval
</pre>
<p><hr />
<a href="http://www.pinceladasdaweb.com.br/blog/2009/09/01/os-temporizadores-do-javascript/">Os Temporizadores do JavaScript</a>
<br />
<p>J&aacute; conhece o meu outro blog? O endere&ccedil;o &eacute; o: <a href="http://www.cssnolanche.com.br">CSS no Lanche</a></p>
<p>Voc&ecirc; ainda n&atilde;o est&aacute; me seguindo no <a href="http://twitter.com/pinceladasdaweb" title="Siga-me no Twitter" rel="external">Twitter</a>, o que est&aacute; esperando para fazer isso?</p></p>
<ul class="related_post"><li><a href="http://www.pinceladasdaweb.com.br/blog/2010/03/12/validacao-de-formularios-de-quem-e-a-responsabilidade/" title="Validação de formulários &#8211; De quem é a responsabilidade?">Validação de formulários &#8211; De quem é a responsabilidade?</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2010/03/08/help-do-jquery-1-4-em-formato-chm/" title="Help do jQuery 1.4 em formato .chm">Help do jQuery 1.4 em formato .chm</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2010/01/13/javascript-tabs-sem-framework-ou-plugin/" title="JavaScript Tabs sem Framework ou Plugin">JavaScript Tabs sem Framework ou Plugin</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2009/12/30/ecsstender-assuma-o-controle-do-seu-css/" title="eCSStender: Assuma o controle do seu CSS">eCSStender: Assuma o controle do seu CSS</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2009/10/02/quer-ganhar-um-livro-de-javascript/" title="Quer ganhar um livro de JavaScript?">Quer ganhar um livro de JavaScript?</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.pinceladasdaweb.com.br/blog/2009/09/01/os-temporizadores-do-javascript/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>JavaScript &#8211; Uma String &#233; um Array de Caracteres?</title>
		<link>http://www.pinceladasdaweb.com.br/blog/2009/07/10/javascript-uma-string-e-um-array-de-caracteres/</link>
		<comments>http://www.pinceladasdaweb.com.br/blog/2009/07/10/javascript-uma-string-e-um-array-de-caracteres/#comments</comments>
		<pubDate>Fri, 10 Jul 2009 13:28:42 +0000</pubDate>
		<dc:creator>Jeronimo Fagundes</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Browsers]]></category>

		<guid isPermaLink="false">http://www.pinceladasdaweb.com.br/blog/?p=2674</guid>
		<description><![CDATA[Acessar um determinado caracter de uma string como se fosse um array &eacute; comum. Mas parece que a Microsoft n&atilde;o compartilha dessa vis&atilde;o. <p><hr />
<a href="http://www.pinceladasdaweb.com.br/blog/2009/07/10/javascript-uma-string-e-um-array-de-caracteres/">JavaScript &#8211; Uma String &eacute; um Array de Caracteres?</a>
<br />
<p>J&aacute; conhece o meu outro blog? O endere&ccedil;o &eacute; o: <a href="http://www.cssnolanche.com.br">CSS no Lanche</a></p>
<p>Voc&ecirc; ainda n&atilde;o est&aacute; me seguindo no <a href="http://twitter.com/pinceladasdaweb" title="Siga-me no Twitter" rel="external">Twitter</a>, o que est&aacute; esperando para fazer isso?</p></p>
]]></description>
			<content:encoded><![CDATA[<p>Algo bastante comum em qualquer linguagem de programa&ccedil;&atilde;o &eacute; querer acessar um determinado caracter de uma string. Geralmente fazemos isso tratando a string como se fosse um array, ou seja, sendo <em>str</em> a nossa vari&aacute;vel que cont&eacute;m a string, bastaria fazer um <em>str[4]</em> pra acessar o quinto caracter da string, por exemplo.</p>
<p>Em JavaScript n&atilde;o deveria ser diferente. Voc&ecirc; faz isso, testa no seu Firefox cheio de extens&otilde;es (ou at&eacute; mesmo em safe-mode), e tudo funciona. O seu cliente abre a p&aacute;gina, e nos primeiros dez segundos ele diz que n&atilde;o funciona. Provavelmente seu cliente est&aacute; usando o Internet Explorer.</p>
<p>Acessar um caracter espec&iacute;fico de uma string em JavaScript como se fosse um array n&atilde;o funciona no IE. Por exemplo, se temos isso:</p>
<pre class="brush: javascript">
var str = &quot;abcdef&quot;;
alert(str[4]);
</pre>
<p>No Firefox ser&aacute; alertado corretamente a letra &#8220;e&#8221;. No Internet Explorer, ser&aacute; alertado &#8220;undefined&#8221;. Assim, o recomendado &eacute; acessar um caracter espec&iacute;fico com a fun&ccedil;&atilde;o <em>charAt</em>, da classe String. Desse modo, o c&oacute;digo ficaria assim:</p>
<pre class="brush: javascript">
var str = &quot;abcdef&quot;;
alert(str.charAt(4));
</pre>
<p>E isso funciona em ambos os browsers.</p>
<p><hr />
<a href="http://www.pinceladasdaweb.com.br/blog/2009/07/10/javascript-uma-string-e-um-array-de-caracteres/">JavaScript &#8211; Uma String &eacute; um Array de Caracteres?</a>
<br />
<p>J&aacute; conhece o meu outro blog? O endere&ccedil;o &eacute; o: <a href="http://www.cssnolanche.com.br">CSS no Lanche</a></p>
<p>Voc&ecirc; ainda n&atilde;o est&aacute; me seguindo no <a href="http://twitter.com/pinceladasdaweb" title="Siga-me no Twitter" rel="external">Twitter</a>, o que est&aacute; esperando para fazer isso?</p></p>
<ul class="related_post"><li><a href="http://www.pinceladasdaweb.com.br/blog/2008/01/24/debugbar-firebug-para-internet-explorer/" title="Debugbar &#8211; Firebug para Internet Explorer">Debugbar &#8211; Firebug para Internet Explorer</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2010/03/17/microsoft-acerta-no-desenvolvimento-do-internet-explorer-9/" title="Microsoft acerta no desenvolvimento do Internet Explorer 9">Microsoft acerta no desenvolvimento do Internet Explorer 9</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2010/03/12/validacao-de-formularios-de-quem-e-a-responsabilidade/" title="Validação de formulários &#8211; De quem é a responsabilidade?">Validação de formulários &#8211; De quem é a responsabilidade?</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2010/03/08/help-do-jquery-1-4-em-formato-chm/" title="Help do jQuery 1.4 em formato .chm">Help do jQuery 1.4 em formato .chm</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2010/02/10/firefox-3-5-e-o-browser-mais-utilizado-no-brasil/" title="Firefox 3.5 é o Browser mais utilizado no Brasil">Firefox 3.5 é o Browser mais utilizado no Brasil</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.pinceladasdaweb.com.br/blog/2009/07/10/javascript-uma-string-e-um-array-de-caracteres/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Javascript &#8211; &#218;ltimo dia do m&#234;s</title>
		<link>http://www.pinceladasdaweb.com.br/blog/2009/07/07/javascript-ultimo-dia-do-mes/</link>
		<comments>http://www.pinceladasdaweb.com.br/blog/2009/07/07/javascript-ultimo-dia-do-mes/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 11:28:54 +0000</pubDate>
		<dc:creator>Luiz Paulo</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.pinceladasdaweb.com.br/blog/?p=2629</guid>
		<description><![CDATA[Essa semana, eu precisei de uma solu&#231;&#227;o em Javascript para encontrar o &#8220;&#250;ltimo dia do m&#234;s&#8221; ou &#8220;quantidade de dias do m&#234;s&#8221; como preferir. Consultei o Google e encontrei algumas solu&#231;&#245;es, algumas delas mais simples e outras bem criativas.
Achei o assunto interessante e resolvi divulgar aqui para quem precisar utilizar.
Primeiro vou postar as solu&#231;&#245;es s&#233;rias [...]<p><hr />
<a href="http://www.pinceladasdaweb.com.br/blog/2009/07/07/javascript-ultimo-dia-do-mes/">Javascript &#8211; &Uacute;ltimo dia do m&ecirc;s</a>
<br />
<p>J&aacute; conhece o meu outro blog? O endere&ccedil;o &eacute; o: <a href="http://www.cssnolanche.com.br">CSS no Lanche</a></p>
<p>Voc&ecirc; ainda n&atilde;o est&aacute; me seguindo no <a href="http://twitter.com/pinceladasdaweb" title="Siga-me no Twitter" rel="external">Twitter</a>, o que est&aacute; esperando para fazer isso?</p></p>
]]></description>
			<content:encoded><![CDATA[<p>Essa semana, eu precisei de uma solu&ccedil;&atilde;o em Javascript para encontrar o &#8220;&uacute;ltimo dia do m&ecirc;s&#8221; ou &#8220;quantidade de dias do m&ecirc;s&#8221; <em>como preferir</em>. Consultei o Google e encontrei algumas solu&ccedil;&otilde;es, algumas delas mais simples e outras bem criativas.</p>
<p>Achei o assunto interessante e resolvi divulgar aqui para quem precisar utilizar.</p>
<p>Primeiro vou postar as solu&ccedil;&otilde;es s&eacute;rias para o pessoal que est&aacute; pesquisando e precisa utilizar em seu c&oacute;digo</p>
<h3>Solu&ccedil;&otilde;es simples</h3>
<p><strong>Exemplo longo (fun&ccedil;&atilde;o):</strong></p>
<pre class="brush: javascript">
function daysInMonth(month,year) {
	var m = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
	if (month != 2) return m[month - 1];
	if (year % 4 != 0) return m[1];
	if (year % 100 == 0 &amp;amp;&amp;amp; year%400 != 0) return m[1];

	return m[1] + 1;
}
</pre>
<p><span id="more-2629"></span><br />
<strong>Exemplo curto (fun&ccedil;&atilde;o):</strong><br />
Aqui est&aacute; a grande sacada do javaScript, que interpreta o 0(zero) como &#8220;o dia antes do dia primeiro&#8221; que obviamente &eacute; o &uacute;ltimo dia do m&ecirc;s anterior.</p>
<pre class="brush: javascript">
function daysInMonth(month,year) {
	var dd = new Date(year, month, 0);
	return dd.getDate();
}
</pre>
<p><strong>Exemplo curto (inline):</strong></p>
<pre class="brush: javascript">
var lastDay = (new Date(year, month, 0)).getDate();
</pre>
<h3>Solu&ccedil;&otilde;es criativas</h3>
<p>N&atilde;o se assustem, mas as solu&ccedil;&otilde;es citadas abaixo funcionam!</p>
<p><strong>Solu&ccedil;&atilde;o utilizando Switch:</strong></p>
<pre class="brush: javascript">
function getLastDayOfMonth(month,year)
{
	var day;

	switch(month)
	{
		case 1 :
		case 3 :
		case 5 :
		case 7 :
		case 8 :
		case 10:
		case 12:
			day = 31;
			break;
		case 4 :
		case 6 :
		case 9 :
		case 11:
		   	day = 30;
			break;
		case 2 :
			if( ( (year % 4 == 0) &amp;amp;&amp;amp; ( year % 100 != 0) ) || (year % 400 == 0) )
				day = 29;
			else
				day = 28;
			break;

	}
	return day;
}
</pre>
<p><strong>Essa &eacute; legal</strong></p>
<pre class="brush: javascript">
function anoBissexto(anoCompleto)
{
	if(!(anoCompleto%4) &amp;amp;&amp;amp; (anoCompleto%100 || !(anoCompleto%400))) return true;
	return false;
}
function diasNoMes(mes,ano)
{
	var var_type=typeof mes;
	if(var_type != &quot;number&quot; &amp;amp;&amp;amp; var_type != &quot;string&quot;) return false;
	if(var_type == &quot;number&quot; &amp;amp;&amp;amp; (mes &gt; 11 || mes =0) return dias[indice_eng];
		if(indice_bra&gt;=0) return dias[indice_bra];
		return false;
	}
	else return dias[mes];
}
</pre>
<p>Fa&ccedil;am bom proveito!</p>
<p><hr />
<a href="http://www.pinceladasdaweb.com.br/blog/2009/07/07/javascript-ultimo-dia-do-mes/">Javascript &#8211; &Uacute;ltimo dia do m&ecirc;s</a>
<br />
<p>J&aacute; conhece o meu outro blog? O endere&ccedil;o &eacute; o: <a href="http://www.cssnolanche.com.br">CSS no Lanche</a></p>
<p>Voc&ecirc; ainda n&atilde;o est&aacute; me seguindo no <a href="http://twitter.com/pinceladasdaweb" title="Siga-me no Twitter" rel="external">Twitter</a>, o que est&aacute; esperando para fazer isso?</p></p>
<ul class="related_post"><li><a href="http://www.pinceladasdaweb.com.br/blog/2010/03/12/validacao-de-formularios-de-quem-e-a-responsabilidade/" title="Validação de formulários &#8211; De quem é a responsabilidade?">Validação de formulários &#8211; De quem é a responsabilidade?</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2010/03/08/help-do-jquery-1-4-em-formato-chm/" title="Help do jQuery 1.4 em formato .chm">Help do jQuery 1.4 em formato .chm</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2010/01/13/javascript-tabs-sem-framework-ou-plugin/" title="JavaScript Tabs sem Framework ou Plugin">JavaScript Tabs sem Framework ou Plugin</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2009/12/30/ecsstender-assuma-o-controle-do-seu-css/" title="eCSStender: Assuma o controle do seu CSS">eCSStender: Assuma o controle do seu CSS</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2009/10/02/quer-ganhar-um-livro-de-javascript/" title="Quer ganhar um livro de JavaScript?">Quer ganhar um livro de JavaScript?</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.pinceladasdaweb.com.br/blog/2009/07/07/javascript-ultimo-dia-do-mes/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Javascript &#8211; Retirando espa&#231;os de string (fun&#231;&#227;o trim)</title>
		<link>http://www.pinceladasdaweb.com.br/blog/2009/06/29/javascript-retirando-espacos-de-string-funcao-trim/</link>
		<comments>http://www.pinceladasdaweb.com.br/blog/2009/06/29/javascript-retirando-espacos-de-string-funcao-trim/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 11:05:26 +0000</pubDate>
		<dc:creator>Luiz Paulo</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.pinceladasdaweb.com.br/blog/?p=2562</guid>
		<description><![CDATA[Veja abaixo algumas solu&#231;&#245;es para retirar espa&#231;os do in&#237;cio e final de strings.
Exemplos simples
Exemplo curto (fun&#231;&#245;es com express&#227;o regular):

	//trim completo
	function trim(str) {
		return str.replace(/^\s+&#124;\s+$/g,&#34;&#34;);
	}

	//left trim
	function ltrim(str) {
		return str.replace(/^\s+/,&#34;&#34;);
	}

	//right trim
	function rtrim(str) {
		return str.replace(/\s+$/,&#34;&#34;);
	}

	alert(trim(&#34;        TEXTO        &#34;));

Exemplo curto (m&#233;todos da string com express&#227;o regular):
Essa solu&#231;&#227;o [...]<p><hr />
<a href="http://www.pinceladasdaweb.com.br/blog/2009/06/29/javascript-retirando-espacos-de-string-funcao-trim/">Javascript &#8211; Retirando espa&ccedil;os de string (fun&ccedil;&atilde;o trim)</a>
<br />
<p>J&aacute; conhece o meu outro blog? O endere&ccedil;o &eacute; o: <a href="http://www.cssnolanche.com.br">CSS no Lanche</a></p>
<p>Voc&ecirc; ainda n&atilde;o est&aacute; me seguindo no <a href="http://twitter.com/pinceladasdaweb" title="Siga-me no Twitter" rel="external">Twitter</a>, o que est&aacute; esperando para fazer isso?</p></p>
]]></description>
			<content:encoded><![CDATA[<p>Veja abaixo algumas solu&ccedil;&otilde;es para retirar espa&ccedil;os do in&iacute;cio e final de strings.</p>
<h3>Exemplos simples</h3>
<p><strong>Exemplo curto (fun&ccedil;&otilde;es com express&atilde;o regular):</strong></p>
<pre class="brush: javascript">
	//trim completo
	function trim(str) {
		return str.replace(/^\s+|\s+$/g,&quot;&quot;);
	}

	//left trim
	function ltrim(str) {
		return str.replace(/^\s+/,&quot;&quot;);
	}

	//right trim
	function rtrim(str) {
		return str.replace(/\s+$/,&quot;&quot;);
	}

	alert(trim(&quot;        TEXTO        &quot;));
</pre>
<p><strong>Exemplo curto (m&eacute;todos da string com express&atilde;o regular):</strong><br />
Essa solu&ccedil;&atilde;o &eacute; bem mais elegante!</p>
<pre class="brush: javascript">
	//trim completo
	String.prototype.trim = function () {
		return this.replace(/^\s+|\s+$/g,&quot;&quot;);
	}

	//left trim
	String.prototype.ltrim = function () {
		return this.replace(/^\s+/,&quot;&quot;);
	}

	//right trim
	String.prototype.rtrim = function () {
		return this.replace(/\s+$/,&quot;&quot;);
	}
	alert(&quot;        TEXTO        &quot;.trim());
</pre>
<p><span id="more-2562"></span></p>
<h3>Outras solu&ccedil;&otilde;es</h3>
<p><strong>Exemplo longo</strong></p>
<pre class="brush: javascript">
function trim (str)
	{
		var whitespace = &#039; \n\r\t\f\x0b\xa0\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u200b\u2028\u2029\u3000&#039;;
		for (var i = 0; i = 0; i--)
		{
			if (whitespace.indexOf(str.charAt(i)) == -1)
			{
				str = str.substring(0, i + 1);
				break;
			}
		}
	    return whitespace.indexOf(str.charAt(0)) == -1 ? str : &#039;&#039;;
	}
</pre>
<p><strong>Outro exemplo</strong></p>
<pre class="brush: javascript">
	function isWhitespace(charToCheck) {
		var whitespaceChars = &quot; \t\n\r\f&quot;;
		return (whitespaceChars.indexOf(charToCheck) != -1);
	}

	//left trim
	function ltrim(str) {
		for(var k = 0; k =0 &amp;&amp; isWhitespace(str.charAt(j)) ; j--) ;
		return str.substring(0,j+1);
	}

	//trim completo
	function trim(str) {
		return ltrim(rtrim(str));
	}
</pre>
<p>Caso queira se aprofundar no assunto, aconselho a leitura do artigo <a href="http://blog.stevenlevithan.com/archives/faster-trim-javascript" title="Faster JavaScript Trim" rel="external">Faster JavaScript Trim</a> que mostra v&aacute;rios testes de performance no IE e FF.</p>
<p><hr />
<a href="http://www.pinceladasdaweb.com.br/blog/2009/06/29/javascript-retirando-espacos-de-string-funcao-trim/">Javascript &#8211; Retirando espa&ccedil;os de string (fun&ccedil;&atilde;o trim)</a>
<br />
<p>J&aacute; conhece o meu outro blog? O endere&ccedil;o &eacute; o: <a href="http://www.cssnolanche.com.br">CSS no Lanche</a></p>
<p>Voc&ecirc; ainda n&atilde;o est&aacute; me seguindo no <a href="http://twitter.com/pinceladasdaweb" title="Siga-me no Twitter" rel="external">Twitter</a>, o que est&aacute; esperando para fazer isso?</p></p>
<ul class="related_post"><li><a href="http://www.pinceladasdaweb.com.br/blog/2010/03/12/validacao-de-formularios-de-quem-e-a-responsabilidade/" title="Validação de formulários &#8211; De quem é a responsabilidade?">Validação de formulários &#8211; De quem é a responsabilidade?</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2010/03/08/help-do-jquery-1-4-em-formato-chm/" title="Help do jQuery 1.4 em formato .chm">Help do jQuery 1.4 em formato .chm</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2010/01/13/javascript-tabs-sem-framework-ou-plugin/" title="JavaScript Tabs sem Framework ou Plugin">JavaScript Tabs sem Framework ou Plugin</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2009/12/30/ecsstender-assuma-o-controle-do-seu-css/" title="eCSStender: Assuma o controle do seu CSS">eCSStender: Assuma o controle do seu CSS</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2009/10/02/quer-ganhar-um-livro-de-javascript/" title="Quer ganhar um livro de JavaScript?">Quer ganhar um livro de JavaScript?</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.pinceladasdaweb.com.br/blog/2009/06/29/javascript-retirando-espacos-de-string-funcao-trim/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>JavaScript &#8211; Pegadinha no getElementById</title>
		<link>http://www.pinceladasdaweb.com.br/blog/2009/06/27/javascript-pegadinha-no-getelementbyid/</link>
		<comments>http://www.pinceladasdaweb.com.br/blog/2009/06/27/javascript-pegadinha-no-getelementbyid/#comments</comments>
		<pubDate>Sat, 27 Jun 2009 12:24:36 +0000</pubDate>
		<dc:creator>Jeronimo Fagundes</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.pinceladasdaweb.com.br/blog/?p=2564</guid>
		<description><![CDATA[Como sabemos, a fun&ccedil;&atilde;o document.getElementById retorna um elemento da p&aacute;gina cujo id &eacute; passado como par&acirc;metro. Contudo, o Internet Explorer (at&eacute; a vers&atilde;o 7) tem uma implementa&ccedil;&atilde;o dessa fun&ccedil;&atilde;o um tanto controversa.<p><hr />
<a href="http://www.pinceladasdaweb.com.br/blog/2009/06/27/javascript-pegadinha-no-getelementbyid/">JavaScript &#8211; Pegadinha no getElementById</a>
<br />
<p>J&aacute; conhece o meu outro blog? O endere&ccedil;o &eacute; o: <a href="http://www.cssnolanche.com.br">CSS no Lanche</a></p>
<p>Voc&ecirc; ainda n&atilde;o est&aacute; me seguindo no <a href="http://twitter.com/pinceladasdaweb" title="Siga-me no Twitter" rel="external">Twitter</a>, o que est&aacute; esperando para fazer isso?</p></p>
]]></description>
			<content:encoded><![CDATA[<p>Claramente inspirei o t&iacute;tulo deste post no <a href="http://www.pinceladasdaweb.com.br/blog/2009/06/24/javascript-pegadinha-no-parseint/" title="JavaScript - Pegadinha no parseInt" rel="alternate">outro</a> escrito pelo colega Luiz Paulo. O problema do getElementById no Internet Explorer j&aacute; &eacute; bem conhecido, mas posto aqui, pois muita gente ainda n&atilde;o deve saber.</p>
<p>Como sabemos, a fun&ccedil;&atilde;o <em>document.getElementById</em> retorna um elemento da p&aacute;gina cujo <em>id</em> &eacute; passado como par&acirc;metro. Contudo, o Internet Explorer (at&eacute; a vers&atilde;o 7) tem uma implementa&ccedil;&atilde;o dessa fun&ccedil;&atilde;o um tanto, digamos, controversa.</p>
<p>Na execu&ccedil;&atilde;o dessa fun&ccedil;&atilde;o, o IE procura n&atilde;o s&oacute; por elementos cujo <em>id</em> seja igual ao passado por par&acirc;metro, mas tamb&eacute;m considera os elementos cujo <em>name</em> seja igual &agrave;quele id.</p>
<p><span id="more-2564"></span><br />
Por exemplo, se temos o seguinte elemento:</p>
<pre class="brush: html">
&lt;input name=&quot;login&quot; type=&quot;text&quot; /&gt;
</pre>
<p>e tentamos busc&aacute;-lo com <em>getElementById:</em></p>
<pre class="brush: javascript">
var meu_campo = document.getElementById(&quot;login&quot;);
</pre>
<p>No Internet Explorer ser&aacute; retornado o campo de texto, mas no Firefox, por exemplo, n&atilde;o. Todavia, o correto &eacute; realmente <strong>n&atilde;o </strong>retornar, pois o campo de texto n&atilde;o possui atributo <em>id </em>definido. O nome da fun&ccedil;&atilde;o &eacute; <em>getElementBy<strong>Id</strong></em>, e n&atilde;o <em>getElementBy<strong>IdOrName</strong></em>. Al&eacute;m disso, &eacute; o que define a <a href="http://www.w3.org/TR/REC-DOM-Level-1/level-one-html.html">recomenda&ccedil;&atilde;o do W3C</a>.</p>
<p>A Microsoft se defendia, dizendo que, <a href="http://www.w3.org/TR/html401/struct/global.html#h-7.5.2">segundo o W3C</a>, <em>id</em> e <em>name </em>compartilham do mesmo namespace (eles ignoraram a parte em que diz que isto &eacute; apenas para &acirc;ncoras (tag <em>a</em>), mas tudo bem, vamos dar esse desconto). Ou seja, segundo a MS, se houvesse um elemento com <em>id </em>igual ao passado por par&acirc;metro, seria o mesmo cujo <em>name</em> fosse igual &agrave;quele <em>id. </em>Mas eles n&atilde;o admitem ter ignorado a recomenda&ccedil;&atilde;o do pr&oacute;prio W3C que diz que a fun&ccedil;&atilde;o <em>getElementById</em> deve retornar o elemento cujo atributo <em>id</em>, e apenas o atributo <em>id</em>, seja igual &agrave;quele passado pelo programador como par&acirc;metro.</p>
<p>Finalmente, eles admitiram o erro que perdurou por anos. A fun&ccedil;&atilde;o foi corrigida no Internet Explorer 8. Mas aten&ccedil;&atilde;o: se a p&aacute;gina estiver no modo de compatibilidade, a fun&ccedil;&atilde;o ser&aacute; executada como no IE7!</p>
<p>Ent&atilde;o, para evitar problemas com vers&otilde;es anteriores a 8, n&atilde;o use dois elementos em que o <em>name</em> de um seja igual ao <em>id</em> do outro. Evita dor de cabe&ccedil;a com browsers mais antigos. Mas &eacute; bem poss&iacute;vel que voc&ecirc; encontre algo assim em algum c&oacute;digo legado, ent&atilde;o, fique atendo ao experimentar erros estranhos ao utilizar o getElementById no Internet Explorer.</p>
<p><hr />
<a href="http://www.pinceladasdaweb.com.br/blog/2009/06/27/javascript-pegadinha-no-getelementbyid/">JavaScript &#8211; Pegadinha no getElementById</a>
<br />
<p>J&aacute; conhece o meu outro blog? O endere&ccedil;o &eacute; o: <a href="http://www.cssnolanche.com.br">CSS no Lanche</a></p>
<p>Voc&ecirc; ainda n&atilde;o est&aacute; me seguindo no <a href="http://twitter.com/pinceladasdaweb" title="Siga-me no Twitter" rel="external">Twitter</a>, o que est&aacute; esperando para fazer isso?</p></p>
<ul class="related_post"><li><a href="http://www.pinceladasdaweb.com.br/blog/2010/03/12/validacao-de-formularios-de-quem-e-a-responsabilidade/" title="Validação de formulários &#8211; De quem é a responsabilidade?">Validação de formulários &#8211; De quem é a responsabilidade?</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2010/03/08/help-do-jquery-1-4-em-formato-chm/" title="Help do jQuery 1.4 em formato .chm">Help do jQuery 1.4 em formato .chm</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2010/01/13/javascript-tabs-sem-framework-ou-plugin/" title="JavaScript Tabs sem Framework ou Plugin">JavaScript Tabs sem Framework ou Plugin</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2009/12/30/ecsstender-assuma-o-controle-do-seu-css/" title="eCSStender: Assuma o controle do seu CSS">eCSStender: Assuma o controle do seu CSS</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2009/10/02/quer-ganhar-um-livro-de-javascript/" title="Quer ganhar um livro de JavaScript?">Quer ganhar um livro de JavaScript?</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.pinceladasdaweb.com.br/blog/2009/06/27/javascript-pegadinha-no-getelementbyid/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Cheat Sheet &#8211; Guia r&#225;pido sobre Jquery 1.3.2</title>
		<link>http://www.pinceladasdaweb.com.br/blog/2009/06/26/cheat-sheet-guia-rapido-sobre-jquery-1-3-2/</link>
		<comments>http://www.pinceladasdaweb.com.br/blog/2009/06/26/cheat-sheet-guia-rapido-sobre-jquery-1-3-2/#comments</comments>
		<pubDate>Fri, 26 Jun 2009 10:58:16 +0000</pubDate>
		<dc:creator>Luiz Paulo</dc:creator>
				<category><![CDATA[Cheat Sheets]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Cheat Sheet]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.pinceladasdaweb.com.br/blog/?p=2541</guid>
		<description><![CDATA[O Cheat Sheet &#233; um resumo de um assunto espec&#237;fico que pode ser utilizada como guia r&#225;pido. Nele voc&#234; pode encontrar sintaxes, c&#243;digos, exemplos, conceitos e dicas.
N&#227;o podemos consider&#225;-lo um manual completo pois &#233; bem compacto, mas quebra bastante o galho! Al&#233;m de &#250;teis, normalmente s&#227;o feitos com visual agrad&#225;vel, podendo ser impresso e facilmente [...]<p><hr />
<a href="http://www.pinceladasdaweb.com.br/blog/2009/06/26/cheat-sheet-guia-rapido-sobre-jquery-1-3-2/">Cheat Sheet &#8211; Guia r&aacute;pido sobre Jquery 1.3.2</a>
<br />
<p>J&aacute; conhece o meu outro blog? O endere&ccedil;o &eacute; o: <a href="http://www.cssnolanche.com.br">CSS no Lanche</a></p>
<p>Voc&ecirc; ainda n&atilde;o est&aacute; me seguindo no <a href="http://twitter.com/pinceladasdaweb" title="Siga-me no Twitter" rel="external">Twitter</a>, o que est&aacute; esperando para fazer isso?</p></p>
]]></description>
			<content:encoded><![CDATA[<p>O Cheat Sheet &eacute; um resumo de um assunto espec&iacute;fico que pode ser utilizada como guia r&aacute;pido. Nele voc&ecirc; pode encontrar sintaxes, c&oacute;digos, exemplos, conceitos e dicas.<br />
N&atilde;o podemos consider&aacute;-lo um manual completo pois &eacute; bem compacto, mas quebra bastante o galho! Al&eacute;m de &uacute;teis, normalmente s&atilde;o feitos com visual agrad&aacute;vel, podendo ser impresso e facilmente colado no seu escrit&oacute;rio.</p>
<p>Aqui voc&ecirc; encontra outros <a href="http://blog.lppjunior.com/cheatsheet-guia-rapido-sobre-jquery/" title="CheatSheet - Guia r&aacute;pido sobre Jquery" rel="external">CheatSheet &#8211; Guia r&aacute;pido sobre Jquery</a> mas s&atilde;o das vers&otilde;es anteriores do jQuery, ent&atilde;o segue a documenta&ccedil;&atilde;o para o jQuery 1.3.2.</p>
<p><a href="http://www.javascripttoolbox.com/jquery/cheatsheet/" title="jQuery Cheat Sheet" rel="external">Clique aqui e baixe de uma vez!</a></p>
<p>Fa&ccedil;am bom proveito!</p>
<p><hr />
<a href="http://www.pinceladasdaweb.com.br/blog/2009/06/26/cheat-sheet-guia-rapido-sobre-jquery-1-3-2/">Cheat Sheet &#8211; Guia r&aacute;pido sobre Jquery 1.3.2</a>
<br />
<p>J&aacute; conhece o meu outro blog? O endere&ccedil;o &eacute; o: <a href="http://www.cssnolanche.com.br">CSS no Lanche</a></p>
<p>Voc&ecirc; ainda n&atilde;o est&aacute; me seguindo no <a href="http://twitter.com/pinceladasdaweb" title="Siga-me no Twitter" rel="external">Twitter</a>, o que est&aacute; esperando para fazer isso?</p></p>
<ul class="related_post"><li><a href="http://www.pinceladasdaweb.com.br/blog/2007/12/12/jquery-cheat-sheet/" title="jQuery Cheat Sheet">jQuery Cheat Sheet</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2010/03/18/css3-columns-e-jquery-plugins/" title="CSS3 Columns &#038; jQuery Plugins">CSS3 Columns &#038; jQuery Plugins</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2010/03/08/help-do-jquery-1-4-em-formato-chm/" title="Help do jQuery 1.4 em formato .chm">Help do jQuery 1.4 em formato .chm</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2009/08/03/ajax-load-com-jquery/" title="Ajax load com jQuery">Ajax load com jQuery</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2009/06/15/menu-accordion-com-jquery/" title="Menu Accordion com jQuery">Menu Accordion com jQuery</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.pinceladasdaweb.com.br/blog/2009/06/26/cheat-sheet-guia-rapido-sobre-jquery-1-3-2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Javascript &#8211; Pegadinha no parseInt()</title>
		<link>http://www.pinceladasdaweb.com.br/blog/2009/06/24/javascript-pegadinha-no-parseint/</link>
		<comments>http://www.pinceladasdaweb.com.br/blog/2009/06/24/javascript-pegadinha-no-parseint/#comments</comments>
		<pubDate>Wed, 24 Jun 2009 15:54:55 +0000</pubDate>
		<dc:creator>Luiz Paulo</dc:creator>
				<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.pinceladasdaweb.com.br/blog/?p=2538</guid>
		<description><![CDATA[J&#225; estamos cansados de saber que javascript &#233; totalmente din&#226;mico e podemos mudar facilmente o tipo das vari&#225;veis.
Uma das facilidades em javascript &#233; a convers&#227;o de vari&#225;veis em inteiro, com a fun&#231;&#227;o parseInt(). S&#243; que essa fun&#231;&#227;o tem uma pegadinha que pode atrapalhar bastante aos desatentos.
Sua sintaxe &#233; bem simples como segue:

var number = &#34;123456348965&#34;;
var [...]<p><hr />
<a href="http://www.pinceladasdaweb.com.br/blog/2009/06/24/javascript-pegadinha-no-parseint/">Javascript &#8211; Pegadinha no parseInt()</a>
<br />
<p>J&aacute; conhece o meu outro blog? O endere&ccedil;o &eacute; o: <a href="http://www.cssnolanche.com.br">CSS no Lanche</a></p>
<p>Voc&ecirc; ainda n&atilde;o est&aacute; me seguindo no <a href="http://twitter.com/pinceladasdaweb" title="Siga-me no Twitter" rel="external">Twitter</a>, o que est&aacute; esperando para fazer isso?</p></p>
]]></description>
			<content:encoded><![CDATA[<p>J&aacute; estamos cansados de saber que javascript &eacute; totalmente din&acirc;mico e podemos mudar facilmente o tipo das vari&aacute;veis.</p>
<p>Uma das facilidades em javascript &eacute; a convers&atilde;o de vari&aacute;veis em inteiro, com a fun&ccedil;&atilde;o parseInt(). S&oacute; que essa fun&ccedil;&atilde;o tem uma pegadinha que pode atrapalhar bastante aos desatentos.</p>
<p>Sua sintaxe &eacute; bem simples como segue:</p>
<pre class="brush: javascript">
var number = &quot;123456348965&quot;;
var integerNumber = parseInt(number);
alert(integerNumber); //123456348965
</pre>
<p><span id="more-2538"></span><br />
Nesse caso, tranquilo! Nenhum problema. Mas se, por exemplo, quisermos converter uma string &#8220;010&#8243; teremos problemas. Vejam o exemplo:</p>
<pre class="brush: javascript">
var number = &quot;010&quot;;
var integerNumber = parseInt(number);
alert(integerNumber); //8
</pre>
<p>Isso acontece pois o n&uacute;mero &eacute; automaticamente detectado como Octal. Para resolver esse problema, a fun&ccedil;&atilde;o parseInt pode receber 2 par&acirc;metros.</p>
<p><strong>parseInt(string, radix)</strong></p>
<p>Onde:<br />
string = String a ser transformada<br />
radix = Numeral que voc&ecirc; quer se basear (de 2 a 36)</p>
<p>Veja ent&atilde;o como fica a solu&ccedil;&atilde;o para este problema:</p>
<pre class="brush: javascript">
var number = &quot;010&quot;;
var integerNumber = parseInt(number, 10); //10 = base decimal
alert(integerNumber); //10
</pre>
<p>Pegadinha desvendada e problema resolvido!</p>
<p><hr />
<a href="http://www.pinceladasdaweb.com.br/blog/2009/06/24/javascript-pegadinha-no-parseint/">Javascript &#8211; Pegadinha no parseInt()</a>
<br />
<p>J&aacute; conhece o meu outro blog? O endere&ccedil;o &eacute; o: <a href="http://www.cssnolanche.com.br">CSS no Lanche</a></p>
<p>Voc&ecirc; ainda n&atilde;o est&aacute; me seguindo no <a href="http://twitter.com/pinceladasdaweb" title="Siga-me no Twitter" rel="external">Twitter</a>, o que est&aacute; esperando para fazer isso?</p></p>
<ul class="related_post"><li><a href="http://www.pinceladasdaweb.com.br/blog/2010/03/12/validacao-de-formularios-de-quem-e-a-responsabilidade/" title="Validação de formulários &#8211; De quem é a responsabilidade?">Validação de formulários &#8211; De quem é a responsabilidade?</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2010/03/08/help-do-jquery-1-4-em-formato-chm/" title="Help do jQuery 1.4 em formato .chm">Help do jQuery 1.4 em formato .chm</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2010/01/13/javascript-tabs-sem-framework-ou-plugin/" title="JavaScript Tabs sem Framework ou Plugin">JavaScript Tabs sem Framework ou Plugin</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2009/12/30/ecsstender-assuma-o-controle-do-seu-css/" title="eCSStender: Assuma o controle do seu CSS">eCSStender: Assuma o controle do seu CSS</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2009/10/02/quer-ganhar-um-livro-de-javascript/" title="Quer ganhar um livro de JavaScript?">Quer ganhar um livro de JavaScript?</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.pinceladasdaweb.com.br/blog/2009/06/24/javascript-pegadinha-no-parseint/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Menu Accordion com jQuery</title>
		<link>http://www.pinceladasdaweb.com.br/blog/2009/06/15/menu-accordion-com-jquery/</link>
		<comments>http://www.pinceladasdaweb.com.br/blog/2009/06/15/menu-accordion-com-jquery/#comments</comments>
		<pubDate>Mon, 15 Jun 2009 10:38:21 +0000</pubDate>
		<dc:creator>Pedro Rogério</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.pinceladasdaweb.com.br/blog/?p=2461</guid>
		<description><![CDATA[Esse efeito de Accordion que vou mostrar aqui hoje pode ser usado n&#227;o somente para menus, mas tamb&#233;m para outras finalidades. &#201; muito simples conseguir esse tipo de efeito utilizando a jQuery, que proporciona uma simplicidade ao escrever c&#243;digo JavaScript. A marca&#231;&#227;o HTML utilizada nesse exemplo &#233; a seguinte:

&#60;dl&#62;
	&#60;dt&#62;&#60;a href=&#34;http://www.pinceladasdaweb.com.br/blog/&#34;&#62;Pinceladas da Web&#60;/a&#62;&#60;/dt&#62;
	&#60;dd&#62;
    [...]<p><hr />
<a href="http://www.pinceladasdaweb.com.br/blog/2009/06/15/menu-accordion-com-jquery/">Menu Accordion com jQuery</a>
<br />
<p>J&aacute; conhece o meu outro blog? O endere&ccedil;o &eacute; o: <a href="http://www.cssnolanche.com.br">CSS no Lanche</a></p>
<p>Voc&ecirc; ainda n&atilde;o est&aacute; me seguindo no <a href="http://twitter.com/pinceladasdaweb" title="Siga-me no Twitter" rel="external">Twitter</a>, o que est&aacute; esperando para fazer isso?</p></p>
]]></description>
			<content:encoded><![CDATA[<p>Esse efeito de Accordion que vou mostrar aqui hoje pode ser usado n&atilde;o somente para menus, mas tamb&eacute;m para outras finalidades. &Eacute; muito simples conseguir esse tipo de efeito utilizando a jQuery, que proporciona uma simplicidade ao escrever c&oacute;digo JavaScript. A marca&ccedil;&atilde;o HTML utilizada nesse exemplo &eacute; a seguinte:</p>
<pre class="brush: xhtml">
&lt;dl&gt;
	&lt;dt&gt;&lt;a href=&quot;http://www.pinceladasdaweb.com.br/blog/&quot;&gt;Pinceladas da Web&lt;/a&gt;&lt;/dt&gt;
	&lt;dd&gt;
        &lt;ul&gt;
            &lt;li&gt;&lt;a href=&quot;http://www.pinceladasdaweb.com.br/blog/category/css/&quot;&gt;CSS&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&quot;http://www.pinceladasdaweb.com.br/blog/category/xhtml/&quot;&gt;XHTML&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&quot;http://www.pinceladasdaweb.com.br/blog/category/webstandards/&quot;&gt;WebStandards&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
	&lt;/dd&gt;
	&lt;dt&gt;&lt;a href=&quot;http://www.cssnolanche.com.br&quot;&gt;CSS no Lanche&lt;/a&gt;&lt;/dt&gt;
	&lt;dd&gt;
        &lt;ul&gt;
            &lt;li&gt;&lt;a href=&quot;http://www.cssnolanche.com.br/categoria/css/&quot;&gt;Tutoriais CSS&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&quot;http://www.cssnolanche.com.br/categoria/javascript/&quot;&gt;JavaScript&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&quot;http://www.cssnolanche.com.br/categoria/jquery/&quot;&gt;jQuery&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
	&lt;/dd&gt;
	&lt;dt&gt;&lt;a href=&quot;http://www.jquery.com&quot;&gt;jQuery&lt;/a&gt;&lt;/dt&gt;
    &lt;dd&gt;
        &lt;ul&gt;
            &lt;li&gt;&lt;a href=&quot;http://docs.jquery.com/Downloading_jQuery&quot;&gt;Download&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&quot;http://docs.jquery.com/&quot;&gt;Documenta&ccedil;&atilde;o&lt;/a&gt;&lt;/li&gt;
            &lt;li&gt;&lt;a href=&quot;http://docs.jquery.com/Tutorials&quot;&gt;Tutoriais&lt;/a&gt;&lt;/li&gt;
        &lt;/ul&gt;
    &lt;/dd&gt;
&lt;/dl&gt;
</pre>
<p><span id="more-2461"></span></p>
<p>Como podem ver utilizei de listas de defini&ccedil;&atilde;o e listas desordenadas para montar o <strong>menu accordion</strong>, estando com o HTML pronto, vamos ao CSS:</p>
<pre class="brush: css">
body {font:1.6em Helvetica, Arial, sans-serif}
a {display:block; text-decoration:none}
dl {margin:0 auto; width:500px}
dt {background-color:#000; border-bottom:2px solid #fff; padding:5px}
dt a {color:#fff;}
dd, ul {margin:0; padding:0}
ul li {background-color:#EFEFEF; font-size:.6em; list-style:none}
ul li a {color:#069; padding:5px}
ul li a:hover {background-color:#aaa; color:#fff}
</pre>
<p>Voc&ecirc; pode aplicar estilos como quiser ao seu menu, s&oacute; apliquei alguns estilos aqui para um melhor entendimento do efeito final. Agora o grande respons&aacute;vel pelos efeitos &eacute; o JavaScript, primeiramente adicione o Framework <a href="http://www.jquery.com" title="jQuery" rel="external">jQuery</a> a sua p&aacute;gina, feito isso, basta utilizar o seguinte c&oacute;digo JavaScript:</p>
<pre class="brush: javascript">
&lt;script type=&quot;text/javascript&quot;&gt;
	$(document).ready(function(){
		//Definimos que todos as tags dd ter&atilde;o display:none menos o primeiro filho
		$(&#039;dd:not(:first)&#039;).hide();
		//Ao clicar no link, executamos a func&atilde;o
		$(&#039;dt a&#039;).click(function(){
			//As tags dd&#039;s vis&iacute;veis agora ficam com display:none
			$(&quot;dd:visible&quot;).slideUp(&quot;slow&quot;);
			//Ap&oacute;s, a func&atilde;o &eacute; transferida para seu pai, que procura o pr&oacute;ximo irm&atilde;o no c&oacute;digo o tonando vis&iacute;vel
			$(this).parent().next().slideDown(&quot;slow&quot;);
			return false;
		});
	});
&lt;/script&gt;
</pre>
<p>Como podem ver o c&oacute;digo JavaScript est&aacute; todo comentado tornando-se de f&aacute;cil entendimento. Vejam <a href="http://www.pinceladasdaweb.com.br/blog/uploads/accordion-jquery/" title="Menu Accordion com jQuery" rel="alternate">aqui o exemplo</a> criado para esse tutorial. Se quiser pode fazer o <a href="http://www.pinceladasdaweb.com.br/blog/uploads/accordion-jquery/accordion.rar" title="Download do Accordion" rel="enclosure">download dos arquivos do exemplo</a> para estudo.</p>
<p><hr />
<a href="http://www.pinceladasdaweb.com.br/blog/2009/06/15/menu-accordion-com-jquery/">Menu Accordion com jQuery</a>
<br />
<p>J&aacute; conhece o meu outro blog? O endere&ccedil;o &eacute; o: <a href="http://www.cssnolanche.com.br">CSS no Lanche</a></p>
<p>Voc&ecirc; ainda n&atilde;o est&aacute; me seguindo no <a href="http://twitter.com/pinceladasdaweb" title="Siga-me no Twitter" rel="external">Twitter</a>, o que est&aacute; esperando para fazer isso?</p></p>
<ul class="related_post"><li><a href="http://www.pinceladasdaweb.com.br/blog/2010/03/18/css3-columns-e-jquery-plugins/" title="CSS3 Columns &#038; jQuery Plugins">CSS3 Columns &#038; jQuery Plugins</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2010/03/08/help-do-jquery-1-4-em-formato-chm/" title="Help do jQuery 1.4 em formato .chm">Help do jQuery 1.4 em formato .chm</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2009/08/03/ajax-load-com-jquery/" title="Ajax load com jQuery">Ajax load com jQuery</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2009/06/26/cheat-sheet-guia-rapido-sobre-jquery-1-3-2/" title="Cheat Sheet &#8211; Guia rápido sobre Jquery 1.3.2">Cheat Sheet &#8211; Guia rápido sobre Jquery 1.3.2</a></li><li><a href="http://www.pinceladasdaweb.com.br/blog/2009/06/08/jquery-como-evitar-problemas-com-animate/" title="jQuery: Como evitar problemas com animate()">jQuery: Como evitar problemas com animate()</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.pinceladasdaweb.com.br/blog/2009/06/15/menu-accordion-com-jquery/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
