<?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>singuska :: JavaScript</title>
	<atom:link href="http://javascript.singuska.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://javascript.singuska.com</link>
	<description>Fragmentos de código e gambiarras.</description>
	<lastBuildDate>Wed, 07 Apr 2010 03:19:52 +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>Funções como argumentos e funções anônimas</title>
		<link>http://javascript.singuska.com/2010/04/03/funcoes-como-argumentos-e-funcoes-anonimas/</link>
		<comments>http://javascript.singuska.com/2010/04/03/funcoes-como-argumentos-e-funcoes-anonimas/#comments</comments>
		<pubDate>Sat, 03 Apr 2010 21:06:52 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Outros]]></category>
		<category><![CDATA[funções]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=269</guid>
		<description><![CDATA[Funções em JavaScript podem ser passadas como argumentos de outras funções. Esta prática é inclusive muito explorada pelos programadores. Se você ainda não esta familiarizado com o uso de funções, leia este post primeiro. Vamos então aos exemplos.
Funções como argumentos
 

1
2
3
4
5
6
7
8
9
10
function imprimir&#40;fn&#41; &#123;
    var texto = fn&#40;&#41;;
    alert&#40;texto&#41;;
&#125;
&#160;
function gerador&#40;&#41; [...]]]></description>
			<content:encoded><![CDATA[<p>Funções em JavaScript podem ser passadas como argumentos de outras funções. Esta prática é inclusive muito explorada pelos programadores. Se você ainda não esta familiarizado com o uso de funções, <a href="http://javascript.singuska.com/2009/12/21/funcoes-o-basico/">leia este post primeiro</a>. Vamos então aos exemplos.</p>
<h3>Funções como argumentos</h3>
<p><span class="jsrun-exemplo-1 jsrun-button"> </span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">function</span> imprimir<span style="color: #ffffff;">&#40;</span>fn<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: #fbde2d; font-weight: bold;">var</span> texto <span style="color: #ffffff;">=</span> fn<span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
    <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>texto<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span>
&nbsp;
<span style="color: #fbde2d; font-weight: bold;">function</span> gerador<span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: #fbde2d; font-weight: bold;">return</span> <span style="color: #61ce3c;">'Sou um texto!'</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span>
&nbsp;
imprimir<span style="color: #ffffff;">&#40;</span>gerador<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Neste primeiro exemplo, declaramos uma função chamada &#8220;imprimir&#8221; que espera como argumento uma outra função. Ela executa esta outra função, pega o seu retorno e passa ele como argumento de &#8220;alert&#8221;. </p>
<p>É importante perceber que na linha 10 &#8220;gerador&#8221; é passado como argumento sem os parênteses &#8220;()&#8221; no final. Ou seja, ela não está sendo invocada, somente passada. A execução da função ocorre na linha 2. Uma variação do nosso exemplo:</p>
<p><span class="jsrun-exemplo-2 jsrun-button"> </span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">function</span> imprimir<span style="color: #ffffff;">&#40;</span>fn<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: #fbde2d; font-weight: bold;">var</span> texto <span style="color: #ffffff;">=</span> fn<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'por'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
    <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>texto<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span>
&nbsp;
<span style="color: #fbde2d; font-weight: bold;">function</span> gerador<span style="color: #ffffff;">&#40;</span>lingua<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: #fbde2d; font-weight: bold;">if</span> <span style="color: #ffffff;">&#40;</span>lingua <span style="color: #ffffff;">===</span> <span style="color: #61ce3c;">'por'</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
        <span style="color: #fbde2d; font-weight: bold;">return</span> <span style="color: #61ce3c;">'Sou um texto!'</span><span style="color: #ffffff;">;</span>
    <span style="color: #ffffff;">&#125;</span>
    <span style="color: #fbde2d; font-weight: bold;">return</span> <span style="color: #61ce3c;">'I´m a text!'</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span>
&nbsp;
imprimir<span style="color: #ffffff;">&#40;</span>gerador<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Agora &#8220;gerador&#8221; espera um parâmetro &#8220;lingua&#8221;. Este parâmetro é passado por &#8220;imprimir&#8221; no ato da execução, linha 2.</p>
<h3>Funções anônimas</h3>
<p>O nome pode parecer estranho mas o conceito é bem simples: funções anônimas são funções que não tem nome:</p>
<p><span class="jsrun-exemplo-3 jsrun-button"> </span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">function</span> imprimir<span style="color: #ffffff;">&#40;</span>fn<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: #fbde2d; font-weight: bold;">var</span> texto <span style="color: #ffffff;">=</span> fn<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'por'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
    <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>texto<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span>
&nbsp;
imprimir<span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span>lingua<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: #fbde2d; font-weight: bold;">if</span> <span style="color: #ffffff;">&#40;</span>lingua <span style="color: #ffffff;">===</span> <span style="color: #61ce3c;">'por'</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
        <span style="color: #fbde2d; font-weight: bold;">return</span> <span style="color: #61ce3c;">'Sou um texto!'</span><span style="color: #ffffff;">;</span>
    <span style="color: #ffffff;">&#125;</span>
    <span style="color: #fbde2d; font-weight: bold;">return</span> <span style="color: #61ce3c;">'I´m a text!'</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>&#8220;Imprimir&#8221; continua sendo exatamente igual. Aguarda uma função como parâmetro. A diferença é que, ao invocarmos &#8220;imprimir&#8221;, declaramos uma função anônima ao mesmo tempo. Como ela não tem nome, não existe a possibilidade dela ser executada por uma outra função ou em outro momento do código. Somente &#8220;imprimir&#8221; a contém e pode executá-la.</p>
<h3>E pra quê serve isso?</h3>
<p>Funções como argumentos e funções anônimas são amplamente utilizadas como &#8220;callbacks&#8221;. Se você atrela um evento de click a um botão, algo deve acontecer quando este botão for clicado. Este &#8220;algo&#8221; é uma função. Ou então uma requisição Ajax. Vamos supor que temos uma requisição que busca se um determinado email já foi ou não cadastrado em um banco de dados. Quando a requisição finalmente termina, uma resposta é enviada ao nosso programa. Esta resposta é normalmente passada como argumento de uma função &#8220;callback&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2010/04/03/funcoes-como-argumentos-e-funcoes-anonimas/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>hhSelectMaker: um plugin para criar selects a partir de uma fonte de dados</title>
		<link>http://javascript.singuska.com/2010/03/12/hhselectmaker-um-plugin-para-criar-selects-a-partir-de-uma-fonte-de-dados/</link>
		<comments>http://javascript.singuska.com/2010/03/12/hhselectmaker-um-plugin-para-criar-selects-a-partir-de-uma-fonte-de-dados/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 16:20:27 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Outros]]></category>
		<category><![CDATA[dom]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=473</guid>
		<description><![CDATA[Criei um plugin jQuery para criar selects no DOM a partir de um vetor de dados. O código do plugin abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
&#40;function&#40;$&#41;&#123;
	$.fn.hhSelectMaker = function&#40;data, cfg&#41; &#123;
&#160;
		var cfg = cfg &#124;&#124; &#123;&#125;;
		if &#40; !cfg.key&#41; cfg.key = 'key';
		if &#40; !cfg.value&#41; cfg.value = 'value';
		if &#40; !cfg.selected&#41; cfg.selected = false;
&#160;
		var snippet = '';
		for &#40;var i = 0; i &#60; data.length; [...]]]></description>
			<content:encoded><![CDATA[<p>Criei um plugin jQuery para criar selects no DOM a partir de um vetor de dados. O código do plugin abaixo:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span>$<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#123;</span>
	$.<span style="color: #6591f7;">fn</span>.<span style="color: #6591f7;">hhSelectMaker</span> <span style="color: #ffffff;">=</span> <span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span>data<span style="color: #ffffff;">,</span> cfg<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
&nbsp;
		<span style="color: #fbde2d; font-weight: bold;">var</span> cfg <span style="color: #ffffff;">=</span> cfg <span style="color: #ffffff;">||</span> <span style="color: #ffffff;">&#123;</span><span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">;</span>
		<span style="color: #fbde2d; font-weight: bold;">if</span> <span style="color: #ffffff;">&#40;</span> <span style="color: #ffffff;">!</span>cfg.<span style="color: #6591f7;">key</span><span style="color: #ffffff;">&#41;</span> cfg.<span style="color: #6591f7;">key</span> <span style="color: #ffffff;">=</span> <span style="color: #61ce3c;">'key'</span><span style="color: #ffffff;">;</span>
		<span style="color: #fbde2d; font-weight: bold;">if</span> <span style="color: #ffffff;">&#40;</span> <span style="color: #ffffff;">!</span>cfg.<span style="color: #6591f7;">value</span><span style="color: #ffffff;">&#41;</span> cfg.<span style="color: #6591f7;">value</span> <span style="color: #ffffff;">=</span> <span style="color: #61ce3c;">'value'</span><span style="color: #ffffff;">;</span>
		<span style="color: #fbde2d; font-weight: bold;">if</span> <span style="color: #ffffff;">&#40;</span> <span style="color: #ffffff;">!</span>cfg.<span style="color: #6591f7;">selected</span><span style="color: #ffffff;">&#41;</span> cfg.<span style="color: #6591f7;">selected</span> <span style="color: #ffffff;">=</span> <span style="color: #fbde2d; font-weight: bold;">false</span><span style="color: #ffffff;">;</span>
&nbsp;
		<span style="color: #fbde2d; font-weight: bold;">var</span> snippet <span style="color: #ffffff;">=</span> <span style="color: #61ce3c;">''</span><span style="color: #ffffff;">;</span>
		<span style="color: #fbde2d; font-weight: bold;">for</span> <span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">var</span> i <span style="color: #ffffff;">=</span> <span style="color: #f78465;">0</span><span style="color: #ffffff;">;</span> i <span style="color: #ffffff;">&lt;</span> data.<span style="color: #6591f7;">length</span><span style="color: #ffffff;">;</span> i<span style="color: #ffffff;">++</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
&nbsp;
			snippet <span style="color: #ffffff;">+=</span> <span style="color: #61ce3c;">&quot;&lt;option value='&quot;</span> <span style="color: #ffffff;">+</span> data<span style="color: #ffffff;">&#91;</span>i<span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">&#91;</span>cfg.<span style="color: #6591f7;">key</span><span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">;</span> 
&nbsp;
			<span style="color: #fbde2d; font-weight: bold;">if</span> <span style="color: #ffffff;">&#40;</span>cfg.<span style="color: #6591f7;">selected</span> <span style="color: #ffffff;">===</span> data<span style="color: #ffffff;">&#91;</span>i<span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">&#91;</span>cfg.<span style="color: #6591f7;">key</span><span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
				snippet <span style="color: #ffffff;">+=</span> <span style="color: #61ce3c;">&quot; selected='selected' &quot;</span><span style="color: #ffffff;">;</span>
			<span style="color: #ffffff;">&#125;</span>
&nbsp;
			snippet <span style="color: #ffffff;">+=</span> <span style="color: #61ce3c;">&quot;'&gt;&quot;</span> <span style="color: #ffffff;">+</span> data<span style="color: #ffffff;">&#91;</span>i<span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">&#91;</span>cfg.<span style="color: #6591f7;">value</span><span style="color: #ffffff;">&#93;</span> <span style="color: #ffffff;">+</span> <span style="color: #61ce3c;">'&lt;/option&gt;'</span><span style="color: #ffffff;">;</span>
		<span style="color: #ffffff;">&#125;</span>
		<span style="color: #fbde2d; font-weight: bold;">return</span> <span style="color: #fbde2d; font-weight: bold;">this</span>.<span style="color: #6591f7;">append</span><span style="color: #ffffff;">&#40;</span>snippet<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
	<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#40;</span>jQuery<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<h3>Como funciona?</h3>
<p><a href="http://javascript.singuska.com/exemplos/hhSelectMaker/">Montei dois exemplos</a> para ilustrar o funcionamento do plugin.<br />
O plugin recebe dois argumentos. O primeiro, obrigatório, é a fonte de dados. O segundo, opcional, é a configuração da fonte de dados.</p>
<p>Caso somente o primeiro argumento seja passado, o plugin espera um estrutura de dados no seguinte formato:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> dados <span style="color: #ffffff;">=</span> <span style="color: #ffffff;">&#91;</span>
    <span style="color: #ffffff;">&#123;</span> key<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Chave1'</span><span style="color: #ffffff;">,</span> value<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Valor1'</span> <span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">,</span>
    <span style="color: #ffffff;">&#123;</span> key<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Chave2'</span><span style="color: #ffffff;">,</span> value<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Valor2'</span> <span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">,</span>
    <span style="color: #ffffff;">&#123;</span> key<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Chave3'</span><span style="color: #ffffff;">,</span> value<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Valor3'</span> <span style="color: #ffffff;">&#125;</span>
    <span style="color: #bfbfbf; font-style: italic;">// etc...</span>
<span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">;</span></pre></div></div>

<p>O nome das chaves pode ser modificado utilizando-se o segundo argumento:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'select'</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">hhSelectMaker</span><span style="color: #ffffff;">&#40;</span>dados<span style="color: #ffffff;">,</span> <span style="color: #ffffff;">&#123;</span>
	key<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'id'</span><span style="color: #ffffff;">,</span> value<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'nome'</span><span style="color: #ffffff;">,</span> selected<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'5'</span>				
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></div></div>

<p>Configurando-se o plugin desta maneira a estrutura de dados esperada é a seguinte:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> dados <span style="color: #ffffff;">=</span> <span style="color: #ffffff;">&#91;</span>
    <span style="color: #ffffff;">&#123;</span> id<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Chave1'</span><span style="color: #ffffff;">,</span> nome<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Valor1'</span> <span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">,</span>
    <span style="color: #ffffff;">&#123;</span> id<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Chave2'</span><span style="color: #ffffff;">,</span> nome<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Valor2'</span> <span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">,</span>
    <span style="color: #ffffff;">&#123;</span> id<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Chave3'</span><span style="color: #ffffff;">,</span> nome<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Valor3'</span> <span style="color: #ffffff;">&#125;</span>
    <span style="color: #bfbfbf; font-style: italic;">// etc...</span>
<span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">;</span></pre></div></div>

<p>Além disso, a chave <em>selected</em> permite que um determinado valor seja selecionado como padrão após o carregamento do plugin.</p>
]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2010/03/12/hhselectmaker-um-plugin-para-criar-selects-a-partir-de-uma-fonte-de-dados/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Objetos: o básico</title>
		<link>http://javascript.singuska.com/2010/02/24/objetos-o-basico/</link>
		<comments>http://javascript.singuska.com/2010/02/24/objetos-o-basico/#comments</comments>
		<pubDate>Thu, 25 Feb 2010 01:43:52 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Básico]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=420</guid>
		<description><![CDATA[&#8220;No JavaScript, matrizes são objetos, funções são objetos, expressões regulares são objetos, e, claro, objetos são objetos&#8221; &#8211; O Melhor do JavaScript, pág. 17 &#8211; Douglas Crockford
Da mesma maneira que matrizes (ou vetores, ou, em inglês, arrays) objetos são listas. Nos vetores os elementos das listas são índices numéricos sequenciais. Nos objetos cada item tem [...]]]></description>
			<content:encoded><![CDATA[<p><cite>&#8220;No JavaScript, matrizes são objetos, funções são objetos, expressões regulares são objetos, e, claro, objetos são objetos&#8221;</cite> &#8211; O Melhor do JavaScript, pág. 17 &#8211; Douglas Crockford</p>
<p>Da mesma maneira que <a href="http://javascript.singuska.com/2010/01/31/vetores-arrays-o-basico/">matrizes</a> (ou vetores, ou, em inglês, arrays) objetos são listas. Nos vetores os elementos das listas são índices numéricos sequenciais. Nos objetos cada item tem um par nome/valor:</p>
<p><span class="jsrun-exemplo-1 jsrun-button"> </span></p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> computador <span style="color: #ffffff;">=</span> <span style="color: #ffffff;">&#123;</span>
    monitor<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'LG'</span><span style="color: #ffffff;">,</span>
    mouse<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Logitech'</span><span style="color: #ffffff;">,</span>
    teclado<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Microsoft'</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'Meu mouse é: '</span> <span style="color: #ffffff;">+</span> computador.<span style="color: #6591f7;">mouse</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></div></div>

<p>No exemplo acima um objeto foi armazenado em uma variável chamada &#8220;computador&#8221;. Este objeto possui três items. Para acessar um valor utilizamos um ponto e o nome do elemento a ser acessado logo após o nome da variável do objeto: computador.monitor, computador.mouse, computador.teclado.</p>
<p>É possível inicializar um objeto vazio e adicionar valores posteriormente:</p>
<p><span class="jsrun-exemplo-2 jsrun-button"> </span></p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> computador <span style="color: #ffffff;">=</span> <span style="color: #ffffff;">&#123;</span><span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">;</span>
&nbsp;
computador.<span style="color: #6591f7;">monitor</span> <span style="color: #ffffff;">=</span> <span style="color: #61ce3c;">'LG'</span><span style="color: #ffffff;">;</span>
computador.<span style="color: #6591f7;">mouse</span> <span style="color: #ffffff;">=</span> <span style="color: #61ce3c;">'Microsoft'</span><span style="color: #ffffff;">;</span>
computador.<span style="color: #6591f7;">mouse</span> <span style="color: #ffffff;">=</span> <span style="color: #61ce3c;">'Logitech'</span><span style="color: #ffffff;">;</span>
computador.<span style="color: #6591f7;">teclado</span> <span style="color: #ffffff;">=</span> <span style="color: #61ce3c;">'Microsoft'</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'Meu mouse é: '</span> <span style="color: #ffffff;">+</span> computador.<span style="color: #6591f7;">mouse</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></div></div>

<p>É também possível inicializar um objeto utilizando-se a seguinte sintaxe:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> computador <span style="color: #ffffff;">=</span> <span style="color: #fbde2d; font-weight: bold;">new</span> Object<span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></div></div>

<p>Esta forma não é considerada uma boa prática. Prefira sempre { }.</p>
<h3>Recuperando e inserindo valores</h3>
<p>Há duas formas de recuperar ou inserir valores. Com ponto (notação já descrita acima) e com [ ]:</p>
<p><span class="jsrun-exemplo-3 jsrun-button"> </span></p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> computador <span style="color: #ffffff;">=</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: #61ce3c;">'mouse-sem-fio'</span><span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Microsoft'</span><span style="color: #ffffff;">,</span>
    <span style="color: #61ce3c;">'caixa-de-som'</span><span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Creative Labs'</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">;</span>
&nbsp;
computador<span style="color: #ffffff;">&#91;</span><span style="color: #61ce3c;">'mouse-sem-fio'</span><span style="color: #ffffff;">&#93;</span> <span style="color: #ffffff;">=</span> <span style="color: #61ce3c;">'Logitech'</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'Mouse: '</span> <span style="color: #ffffff;">+</span> computador<span style="color: #ffffff;">&#91;</span><span style="color: #61ce3c;">'mouse-sem-fio'</span><span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></div></div>

<p>A notação [ ] permite recuperar valores com nomes que não são constantes ou palavras reservadas. A sintaxe abaixo é inválida:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">computador.<span style="color: #6591f7;">mouse</span><span style="color: #ffffff;">-</span>sem<span style="color: #ffffff;">-</span>fio <span style="color: #ffffff;">=</span> <span style="color: #61ce3c;">'Logitech'</span><span style="color: #ffffff;">;</span></pre></div></div>

<p>Não é possível utilizar -, _, espaços ou outros caracteres que não sejam letras e números quando utilizamos a notação de ponto. Neste caso é preciso utilizar [ ]. Da mesma forma, ao criarmos um objeto, se o nome possuir qualquer caracter especial, aspas (simples ou duplas) deverão ser utilizadas:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> computador <span style="color: #ffffff;">=</span> <span style="color: #ffffff;">&#123;</span> mouse<span style="color: #ffffff;">-</span>sem<span style="color: #ffffff;">-</span>fio<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Logitech'</span> <span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">;</span> <span style="color: #bfbfbf; font-style: italic;">// Errado</span>
<span style="color: #fbde2d; font-weight: bold;">var</span> computador <span style="color: #ffffff;">=</span> <span style="color: #ffffff;">&#123;</span> <span style="color: #61ce3c;">'mouse-sem-fio'</span><span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Logitech'</span> <span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">;</span> <span style="color: #bfbfbf; font-style: italic;">// Correto</span></pre></div></div>

<p>Além disso, se o nome do valor a ser recuperado vier de uma outra variáve é necessário utilizar [ ]:</p>
<p><span class="jsrun-exemplo-4 jsrun-button"> </span></p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> computador <span style="color: #ffffff;">=</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: #61ce3c;">'nome'</span><span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Meu Computador'</span><span style="color: #ffffff;">,</span>
    monitor<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'LG'</span><span style="color: #ffffff;">,</span>
    mouse<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Logitech'</span><span style="color: #ffffff;">,</span>
    teclado<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Microsoft'</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: #fbde2d; font-weight: bold;">var</span> nome <span style="color: #ffffff;">=</span> <span style="color: #61ce3c;">'mouse'</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'Meu mouse é: '</span> <span style="color: #ffffff;">+</span> computador<span style="color: #ffffff;">&#91;</span>nome<span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'Meu computador chama: '</span> <span style="color: #ffffff;">+</span> computador.<span style="color: #6591f7;">nome</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></div></div>

<p>É muito importante entender o exemplo acima, que ilustra bem a diferença entre a notação de ponto e [ ].</p>
<h3>Percorrendo um objeto</h3>
<p>É possível varrer todos os valores de um objeto:</p>
<p><span class="jsrun-exemplo-5 jsrun-button"> </span></p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> computador <span style="color: #ffffff;">=</span> <span style="color: #ffffff;">&#123;</span>
    monitor<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'LG'</span><span style="color: #ffffff;">,</span>
    mouse<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Logitech'</span><span style="color: #ffffff;">,</span>
    teclado<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Microsoft'</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: #fbde2d; font-weight: bold;">for</span> <span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">var</span> nome <span style="color: #fbde2d; font-weight: bold;">in</span> computador<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'Nome: '</span> <span style="color: #ffffff;">+</span> nome <span style="color: #ffffff;">+</span> <span style="color: #61ce3c;">' / Valor: '</span> <span style="color: #ffffff;">+</span> computador<span style="color: #ffffff;">&#91;</span>nome<span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span></pre></div></div>

<p>É importante salientar que este tipo de loop for / in não garante que a ordem dos elementos seja sempre a mesma. Dependendo da execução do script a ordem pode variar. Há meios de se utilizar o loop for tradicional para percorrer objetos mas isso fica para uma outra ocasião.</p>
<h3>Objetos dentro de objetos: estruturas mais complexas</h3>
<p><span class="jsrun-exemplo-6 jsrun-button"> </span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> computador <span style="color: #ffffff;">=</span> <span style="color: #ffffff;">&#123;</span>
    usuarios<span style="color: #ffffff;">:</span> <span style="color: #ffffff;">&#91;</span> 
        <span style="color: #ffffff;">&#123;</span> login<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'sigmus'</span><span style="color: #ffffff;">,</span> rank<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'admin'</span> <span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">,</span> 
        <span style="color: #ffffff;">&#123;</span> login<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'amigo'</span><span style="color: #ffffff;">,</span> rank<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'guest'</span> <span style="color: #ffffff;">&#125;</span>
    <span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">,</span>
    hardware<span style="color: #ffffff;">:</span> <span style="color: #ffffff;">&#123;</span>
        monitor<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'LG'</span><span style="color: #ffffff;">,</span>
        mouse<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Logitech'</span><span style="color: #ffffff;">,</span>
        teclado<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Microsoft'</span><span style="color: #ffffff;">,</span>
        hd<span style="color: #ffffff;">:</span> <span style="color: #ffffff;">&#123;</span>
            marca<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Seagate'</span><span style="color: #ffffff;">,</span>
            tamanho<span style="color: #ffffff;">:</span> <span style="color: #f78465;">256</span>
        <span style="color: #ffffff;">&#125;</span>
    <span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">,</span>
    software<span style="color: #ffffff;">:</span> <span style="color: #ffffff;">&#123;</span>
        sistemaOperacional<span style="color: #ffffff;">:</span> <span style="color: #ffffff;">&#123;</span>
            nome<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Windows'</span><span style="color: #ffffff;">,</span>
            versao<span style="color: #ffffff;">:</span> <span style="color: #f78465;">7</span>
        <span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">,</span>
        editorPHP<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'Aptana'</span>
    <span style="color: #ffffff;">&#125;</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">;</span> <span style="color: #bfbfbf; font-style: italic;">// Fim do objeto</span>
&nbsp;
<span style="color: #bfbfbf; font-style: italic;">// Início das funções</span>
&nbsp;
<span style="color: #fbde2d; font-weight: bold;">var</span> hdPrecisaDeUpgrade <span style="color: #ffffff;">=</span> <span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span>micro<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: #fbde2d; font-weight: bold;">var</span> tamanhoHd <span style="color: #ffffff;">=</span> micro.<span style="color: #6591f7;">hardware</span>.<span style="color: #6591f7;">hd</span>.<span style="color: #6591f7;">tamanho</span><span style="color: #ffffff;">;</span>
    <span style="color: #fbde2d; font-weight: bold;">if</span> <span style="color: #ffffff;">&#40;</span>tamanhoHd <span style="color: #ffffff;">&lt;</span> <span style="color: #f78465;">512</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
        <span style="color: #fbde2d; font-weight: bold;">return</span> <span style="color: #fbde2d; font-weight: bold;">true</span><span style="color: #ffffff;">;</span>
    <span style="color: #ffffff;">&#125;</span>
    <span style="color: #fbde2d; font-weight: bold;">return</span> <span style="color: #fbde2d; font-weight: bold;">false</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: #fbde2d; font-weight: bold;">var</span> usuarioEhAdmin <span style="color: #ffffff;">=</span> <span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span>login<span style="color: #ffffff;">,</span> usuarios<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: #fbde2d; font-weight: bold;">for</span> <span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">var</span> i <span style="color: #ffffff;">=</span> <span style="color: #f78465;">0</span><span style="color: #ffffff;">;</span> i <span style="color: #ffffff;">&lt;</span> usuarios.<span style="color: #6591f7;">length</span><span style="color: #ffffff;">;</span> i<span style="color: #ffffff;">++</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
        <span style="color: #fbde2d; font-weight: bold;">var</span>
        login <span style="color: #ffffff;">=</span> usuarios<span style="color: #ffffff;">&#91;</span>i<span style="color: #ffffff;">&#93;</span>.<span style="color: #6591f7;">login</span><span style="color: #ffffff;">,</span>
        rank <span style="color: #ffffff;">=</span> usuarios<span style="color: #ffffff;">&#91;</span>i<span style="color: #ffffff;">&#93;</span>.<span style="color: #6591f7;">rank</span><span style="color: #ffffff;">;</span>
&nbsp;
        <span style="color: #fbde2d; font-weight: bold;">if</span> <span style="color: #ffffff;">&#40;</span>rank <span style="color: #ffffff;">===</span> <span style="color: #61ce3c;">'admin'</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
            <span style="color: #fbde2d; font-weight: bold;">return</span> <span style="color: #fbde2d; font-weight: bold;">true</span><span style="color: #ffffff;">;</span>
        <span style="color: #ffffff;">&#125;</span>
    <span style="color: #ffffff;">&#125;</span>
    <span style="color: #fbde2d; font-weight: bold;">return</span> <span style="color: #fbde2d; font-weight: bold;">false</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: #bfbfbf; font-style: italic;">// Testando alguns dados</span>
&nbsp;
<span style="color: #fbde2d; font-weight: bold;">if</span> <span style="color: #ffffff;">&#40;</span>hdPrecisaDeUpgrade<span style="color: #ffffff;">&#40;</span>computador<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'Você precisa de um HD maior!'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span>
&nbsp;
<span style="color: #fbde2d; font-weight: bold;">if</span> <span style="color: #ffffff;">&#40;</span>usuarioEhAdmin<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'sigmus'</span><span style="color: #ffffff;">,</span> computador.<span style="color: #6591f7;">usuarios</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'O usuário é admin!'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span></pre></td></tr></table></div>

<p>Este exemplo mostra como é possível compor estruturas de dados mais complexas com objetos. É possível inclusive embutir funções dentro de objetos, mas isso é assunto para outro post. Por enquanto é isso. O entendimento de objetos é crucial para um real entendimento do JavaScript. E é também uma das suas facetas mais fascinantes. Caso você tenha alguma dúvida ou sugestão, por favor, comente!</p>
]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2010/02/24/objetos-o-basico/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Utilizando o método index: versão 1.4 do jQuery facilitando nossa vida</title>
		<link>http://javascript.singuska.com/2010/02/21/utilizando-o-metodo-index-versao-1-4-do-jquery-facilitando-nossa-vida/</link>
		<comments>http://javascript.singuska.com/2010/02/21/utilizando-o-metodo-index-versao-1-4-do-jquery-facilitando-nossa-vida/#comments</comments>
		<pubDate>Sun, 21 Feb 2010 18:46:51 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Outros]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=383</guid>
		<description><![CDATA[Uma importante novidade do jQuery 1.4 foi a melhoria do método index. Este método retorna um número inteiro que indica a posição de um determinado elemento do DOM em relação aos seus irmãos. A primeira posição é 0. Caso o elemento não seja encontrado -1 é retornado. A documentação completa deste método pode ser encontrada [...]]]></description>
			<content:encoded><![CDATA[<p>Uma importante novidade do jQuery 1.4 foi a melhoria do método <strong>index</strong>. Este método retorna um número inteiro que indica a posição de um determinado elemento do DOM em relação aos seus irmãos. A primeira posição é 0. Caso o elemento não seja encontrado -1 é retornado. A documentação completa deste método <a href="http://api.jquery.com/index/">pode ser encontrada aqui</a>.</p>
<p>Ele é muito útil porque geralmente determinados objetos de uma página possuem algum tipo de relação que os agrupa. Vamos imaginar a seguinte estrutura:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;">	<span style="color: #009900;">&lt;<span style="color: white; font-weight: bold;">ul</span> <span style="color: white;">id</span><span style="color: white;">=</span><span style="color: cyan;">&quot;menu&quot;</span>&gt;</span>
	    <span style="color: #009900;">&lt;<span style="color: white; font-weight: bold;">li</span>&gt;&lt;<span style="color: white; font-weight: bold;">a</span> <span style="color: white;">href</span><span style="color: white;">=</span><span style="color: cyan;">&quot;#&quot;</span>&gt;</span>Capítulo 1<span style="color: #009900;">&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">a</span>&gt;&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">li</span>&gt;</span>
	    <span style="color: #009900;">&lt;<span style="color: white; font-weight: bold;">li</span>&gt;&lt;<span style="color: white; font-weight: bold;">a</span> <span style="color: white;">href</span><span style="color: white;">=</span><span style="color: cyan;">&quot;#&quot;</span>&gt;</span>Capítulo 2<span style="color: #009900;">&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">a</span>&gt;&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">li</span>&gt;</span>
	    <span style="color: #009900;">&lt;<span style="color: white; font-weight: bold;">li</span>&gt;&lt;<span style="color: white; font-weight: bold;">a</span> <span style="color: white;">href</span><span style="color: white;">=</span><span style="color: cyan;">&quot;#&quot;</span>&gt;</span>Capítulo 3<span style="color: #009900;">&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">a</span>&gt;&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">li</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">ul</span>&gt;</span>
&nbsp;
	<span style="color: #009900;">&lt;<span style="color: white; font-weight: bold;">div</span> <span style="color: white;">id</span><span style="color: white;">=</span><span style="color: cyan;">&quot;capitulos&quot;</span>&gt;</span>
	    <span style="color: #009900;">&lt;<span style="color: white; font-weight: bold;">div</span>&gt;</span>Conteúdo capítulo 1<span style="color: #009900;">&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">div</span>&gt;</span>
	    <span style="color: #009900;">&lt;<span style="color: white; font-weight: bold;">div</span>&gt;</span>Conteúdo capítulo 2<span style="color: #009900;">&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">div</span>&gt;</span>
	    <span style="color: #009900;">&lt;<span style="color: white; font-weight: bold;">div</span>&gt;</span>Conteúdo capítulo 3<span style="color: #009900;">&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">div</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">div</span>&gt;</span></pre></td></tr></table></div>

<p>Um item de menu, ao ser clicado, faz com que seu respectivo conteúdo seja mostrado na tela. Todas as divs de conteúdo estão inicialmente escondidas. Se um item de menu for clicado novamente, todas as divs são escondidas e a div de conteúdo correspondente é revelada. Uma situação muito comum, trivial e extremamente recorrente. O código abaixo implementa a situação:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> gerenciarCapitulos <span style="color: #ffffff;">=</span> <span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#123;</span>
	$<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'#menu li a'</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">click</span><span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span>e<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#123;</span>
		e.<span style="color: #6591f7;">preventDefault</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
		<span style="color: #fbde2d; font-weight: bold;">var</span> indice <span style="color: #ffffff;">=</span> $<span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">this</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">index</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'#menu li a'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
		mostrarConteudo<span style="color: #ffffff;">&#40;</span>indice<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
	<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: #fbde2d; font-weight: bold;">var</span> mostrarConteudo <span style="color: #ffffff;">=</span> <span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span>indiceCapitulo<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#123;</span>
	<span style="color: #fbde2d; font-weight: bold;">var</span> 
	capitulos <span style="color: #ffffff;">=</span> $<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'#capitulos div'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">,</span>
	divCapitulo <span style="color: #ffffff;">=</span> $<span style="color: #ffffff;">&#40;</span>capitulos<span style="color: #ffffff;">&#91;</span>indiceCapitulo<span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
&nbsp;
	capitulos.<span style="color: #6591f7;">hide</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
	divCapitulo.<span style="color: #6591f7;">show</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">;</span>
&nbsp;
$<span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#123;</span>
	gerenciarCapitulos<span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Index é utilizado na linha 4:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>4
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">		<span style="color: #fbde2d; font-weight: bold;">var</span> indice <span style="color: #ffffff;">=</span> $<span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">this</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">index</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'#menu li a'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Neste caso index recebe como argumento um seletor que indica o contexto que deve ser utilizado para descobrir o índice em relação a <strong>this</strong> (ou seja, o elemento clicado). Como os items de menu estão na mesma sequência das divs de capítulos o índice acaba sendo o mesmo. O valor do índice é passado para a função <strong>mostrarConteudo</strong> que recupera do <a href="http://javascript.singuska.com/2010/01/31/vetores-arrays-o-basico/">vetor</a> <strong>capitulos</strong> a div que deve ser mostrada:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>12
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">	divCapitulo <span style="color: #ffffff;">=</span> $<span style="color: #ffffff;">&#40;</span>capitulos<span style="color: #ffffff;">&#91;</span>indiceCapitulo<span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p><a href="http://javascript.singuska.com/exemplos/metodo-index/bom.htm">Aqui você pode encontrar o exemplo funcionando</a>.</p>
<h3>Um exemplo ruim que não utiliza o método index</h3>
<p>É possível programar a mesma funcionalidade de várias outras maneiras sem a utilização de index. Antes eu contava com &#8220;ids&#8221; que tivessem números em comum. Entretanto, isso implicava em mais código html:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;">	<span style="color: #009900;">&lt;<span style="color: white; font-weight: bold;">ul</span> <span style="color: white;">id</span><span style="color: white;">=</span><span style="color: cyan;">&quot;menu&quot;</span>&gt;</span>
	    <span style="color: #009900;">&lt;<span style="color: white; font-weight: bold;">li</span> <span style="color: white;">id</span><span style="color: white;">=</span><span style="color: cyan;">&quot;link-1&quot;</span>&gt;&lt;<span style="color: white; font-weight: bold;">a</span> <span style="color: white;">href</span><span style="color: white;">=</span><span style="color: cyan;">&quot;#&quot;</span>&gt;</span>Capítulo 1<span style="color: #009900;">&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">a</span>&gt;&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">li</span>&gt;</span>
	    <span style="color: #009900;">&lt;<span style="color: white; font-weight: bold;">li</span> <span style="color: white;">id</span><span style="color: white;">=</span><span style="color: cyan;">&quot;link-2&quot;</span>&gt;&lt;<span style="color: white; font-weight: bold;">a</span> <span style="color: white;">href</span><span style="color: white;">=</span><span style="color: cyan;">&quot;#&quot;</span>&gt;</span>Capítulo 2<span style="color: #009900;">&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">a</span>&gt;&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">li</span>&gt;</span>
	    <span style="color: #009900;">&lt;<span style="color: white; font-weight: bold;">li</span> <span style="color: white;">id</span><span style="color: white;">=</span><span style="color: cyan;">&quot;link-3&quot;</span>&gt;&lt;<span style="color: white; font-weight: bold;">a</span> <span style="color: white;">href</span><span style="color: white;">=</span><span style="color: cyan;">&quot;#&quot;</span>&gt;</span>Capítulo 3<span style="color: #009900;">&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">a</span>&gt;&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">li</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">ul</span>&gt;</span>
&nbsp;
	<span style="color: #009900;">&lt;<span style="color: white; font-weight: bold;">div</span> <span style="color: white;">id</span><span style="color: white;">=</span><span style="color: cyan;">&quot;capitulos&quot;</span>&gt;</span>
	    <span style="color: #009900;">&lt;<span style="color: white; font-weight: bold;">div</span> <span style="color: white;">id</span><span style="color: white;">=</span><span style="color: cyan;">&quot;capitulo-1&quot;</span>&gt;</span>Conteúdo capítulo 1<span style="color: #009900;">&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">div</span>&gt;</span>
	    <span style="color: #009900;">&lt;<span style="color: white; font-weight: bold;">div</span> <span style="color: white;">id</span><span style="color: white;">=</span><span style="color: cyan;">&quot;capitulo-2&quot;</span>&gt;</span>Conteúdo capítulo 2<span style="color: #009900;">&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">div</span>&gt;</span>
	    <span style="color: #009900;">&lt;<span style="color: white; font-weight: bold;">div</span> <span style="color: white;">id</span><span style="color: white;">=</span><span style="color: cyan;">&quot;capitulo-3&quot;</span>&gt;</span>Conteúdo capítulo 3<span style="color: #009900;">&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">div</span>&gt;</span>
	<span style="color: #009900;">&lt;<span style="color: white;">/</span><span style="color: white; font-weight: bold;">div</span>&gt;</span></pre></td></tr></table></div>

<p>Percebam que agora todos as lis de menu e todas as divs de capítulo possuem ids. O código JavaScript correspondente:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> gerenciarCapitulos <span style="color: #ffffff;">=</span> <span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#123;</span>
	$<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'#menu li a'</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">click</span><span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span>e<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#123;</span>
		e.<span style="color: #6591f7;">preventDefault</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
		<span style="color: #fbde2d; font-weight: bold;">var</span> indice <span style="color: #ffffff;">=</span> $<span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">this</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">parent</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">attr</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'id'</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">split</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'-'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#91;</span><span style="color: #f78465;">1</span><span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">;</span>
		mostrarConteudo<span style="color: #ffffff;">&#40;</span>indice<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
	<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: #fbde2d; font-weight: bold;">var</span> mostrarConteudo <span style="color: #ffffff;">=</span> <span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span>indiceCapitulo<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#123;</span>
	<span style="color: #fbde2d; font-weight: bold;">var</span> 
	capitulos <span style="color: #ffffff;">=</span> $<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'#capitulos div'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">,</span>
	divCapitulo <span style="color: #ffffff;">=</span> $<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'#capitulo-'</span> <span style="color: #ffffff;">+</span> indiceCapitulo<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
&nbsp;
	capitulos.<span style="color: #6591f7;">hide</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
	divCapitulo.<span style="color: #6591f7;">show</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">;</span>
&nbsp;
$<span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#123;</span>
	gerenciarCapitulos<span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Somente as linhas 4 e 12 foram modificadas. Na linha 4 utilizamos um split para obter o índice. Na 12 um seletor é montado dinamicamente utilizando este índice. É um código fraco e pouquíssimo elegante. <a href="http://javascript.singuska.com/exemplos/metodo-index/ruim.htm">Exemplo ruim pode ser encontrado aqui</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2010/02/21/utilizando-o-metodo-index-versao-1-4-do-jquery-facilitando-nossa-vida/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vetores (arrays): o básico</title>
		<link>http://javascript.singuska.com/2010/01/31/vetores-arrays-o-basico/</link>
		<comments>http://javascript.singuska.com/2010/01/31/vetores-arrays-o-basico/#comments</comments>
		<pubDate>Sun, 31 Jan 2010 19:36:21 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Básico]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=117</guid>
		<description><![CDATA[Vetores (ou arrays em inglês) são listas de informações. Pode ser uma lista de números, de strings, de outros vetores, de objetos ou de funções. Vetores servem para agrupar dados similares
Imagine que tenhamos que guardar o nome de três carros que vieram de um formulário. É necessário exibir um alerta se um dos carros possuir [...]]]></description>
			<content:encoded><![CDATA[<p>Vetores (ou arrays em inglês) são listas de informações. Pode ser uma lista de números, de strings, de outros vetores, de objetos ou de funções. Vetores servem para agrupar dados similares</p>
<p>Imagine que tenhamos que guardar o nome de três carros que vieram de um formulário. É necessário exibir um alerta se um dos carros possuir o nome Civic.</p>
<p><span class="jsrun-exemplo-1 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span>
c1 <span style="color: #ffffff;">=</span> <span style="color: #61ce3c;">'Fiesta'</span><span style="color: #ffffff;">,</span>
c2 <span style="color: #ffffff;">=</span> <span style="color: #61ce3c;">'Palio'</span><span style="color: #ffffff;">,</span>
c3 <span style="color: #ffffff;">=</span> <span style="color: #61ce3c;">'Civic'</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: #fbde2d; font-weight: bold;">if</span> <span style="color: #ffffff;">&#40;</span>c1 <span style="color: #ffffff;">===</span> <span style="color: #61ce3c;">'Civic'</span> <span style="color: #ffffff;">||</span> c2 <span style="color: #ffffff;">===</span> <span style="color: #61ce3c;">'Civic'</span> <span style="color: #ffffff;">||</span> c3 <span style="color: #ffffff;">===</span> <span style="color: #61ce3c;">'Civic'</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'Parabéns, você tem um Civic!'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span></pre></td></tr></table></div>

<p>Após um tempo em produção, formulário precisa agora ter 4 campos para de entrada. Atualizado, o novo código seria o seguinte:</p>
<p><span class="jsrun-exemplo-2 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span>
c1 <span style="color: #ffffff;">=</span> <span style="color: #61ce3c;">'Fiesta'</span><span style="color: #ffffff;">,</span>
c2 <span style="color: #ffffff;">=</span> <span style="color: #61ce3c;">'Palio'</span><span style="color: #ffffff;">,</span>
c3 <span style="color: #ffffff;">=</span> <span style="color: #61ce3c;">'Civic'</span><span style="color: #ffffff;">,</span>
c4 <span style="color: #ffffff;">=</span> <span style="color: #61ce3c;">'Fox'</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: #fbde2d; font-weight: bold;">if</span> <span style="color: #ffffff;">&#40;</span>c1 <span style="color: #ffffff;">===</span> <span style="color: #61ce3c;">'Civic'</span> <span style="color: #ffffff;">||</span> c2 <span style="color: #ffffff;">===</span> <span style="color: #61ce3c;">'Civic'</span> <span style="color: #ffffff;">||</span> c3 <span style="color: #ffffff;">===</span> <span style="color: #61ce3c;">'Civic'</span> <span style="color: #ffffff;">||</span> c4 <span style="color: #ffffff;">==</span> <span style="color: #61ce3c;">'Civic'</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'Parabéns, você tem um Civic!'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span></pre></td></tr></table></div>

<p>De cara dá para perceber que este código não é nem um pouco prático de ser atualizado. Uitilizando vetores, é possível agrupar os carros em uma única variável. Além disso, as informações armazenadas em um vetor são facilmente acessadas:</p>
<p><span class="jsrun-exemplo-3 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> carros <span style="color: #ffffff;">=</span> <span style="color: #ffffff;">&#91;</span><span style="color: #61ce3c;">'Fiesta'</span><span style="color: #ffffff;">,</span> <span style="color: #61ce3c;">'Palio'</span><span style="color: #ffffff;">,</span> <span style="color: #61ce3c;">'Civic'</span><span style="color: #ffffff;">,</span> <span style="color: #61ce3c;">'Fox'</span><span style="color: #ffffff;">&#93;</span>
&nbsp;
<span style="color: #fbde2d; font-weight: bold;">for</span> <span style="color: #ffffff;">&#40;</span>indice <span style="color: #fbde2d; font-weight: bold;">in</span> carros<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: #fbde2d; font-weight: bold;">if</span><span style="color: #ffffff;">&#40;</span>carros<span style="color: #ffffff;">&#91;</span>indice<span style="color: #ffffff;">&#93;</span> <span style="color: #ffffff;">===</span> <span style="color: #61ce3c;">'Civic'</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
        <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'Parabéns, você tem um Civic!'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
    <span style="color: #ffffff;">&#125;</span>
<span style="color: #ffffff;">&#125;</span></pre></td></tr></table></div>

<h3>Acessando os elementos de um vetor</h3>
<p>Além de strings, os vetores podem conter números:</p>
<p><span class="jsrun-exemplo-4 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> lista <span style="color: #ffffff;">=</span> <span style="color: #ffffff;">&#91;</span><span style="color: #f78465;">5</span><span style="color: #ffffff;">,</span> <span style="color: #f78465;">25</span><span style="color: #ffffff;">,</span> <span style="color: #f78465;">40</span><span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>lista<span style="color: #ffffff;">&#91;</span><span style="color: #f78465;">1</span><span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Para acessarmos os valores do vetor <strong>lista</strong> precisamos utilizar um índice. <em>O primeiro índice de um vetor é sempre 0</em>. Por isso o resultado deste código é <em>25</em>. O índice <em>1</em> é na verdade o segundo índice do vetor.</p>
<p>Podemos também misturar tipos diferentes de dados em um mesmo vetor:</p>
<p><span class="jsrun-exemplo-5 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> lista <span style="color: #ffffff;">=</span> <span style="color: #ffffff;">&#91;</span><span style="color: #61ce3c;">'bananas'</span><span style="color: #ffffff;">,</span> <span style="color: #f78465;">10</span><span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>lista<span style="color: #ffffff;">&#91;</span><span style="color: #f78465;">0</span><span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Para inicializarmos uma lista como vazia e depois adicionar um elemento:</p>
<p><span class="jsrun-exemplo-6 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> lista <span style="color: #ffffff;">=</span> <span style="color: #ffffff;">&#91;</span><span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">;</span>
lista.<span style="color: #6591f7;">push</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'abacaxi'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
lista.<span style="color: #6591f7;">push</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'goiaba'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>lista<span style="color: #ffffff;">&#91;</span><span style="color: #f78465;">1</span><span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>É também possível adicionar valores fora de sequência:</p>
<p><span class="jsrun-exemplo-7 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> lista <span style="color: #ffffff;">=</span> <span style="color: #ffffff;">&#91;</span><span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">;</span>
lista<span style="color: #ffffff;">&#91;</span><span style="color: #f78465;">5</span><span style="color: #ffffff;">&#93;</span> <span style="color: #ffffff;">=</span> <span style="color: #61ce3c;">'melancia'</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>lista<span style="color: #ffffff;">&#91;</span><span style="color: #f78465;">5</span><span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>lista<span style="color: #ffffff;">&#91;</span><span style="color: #f78465;">0</span><span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>A tentativa de acesso ao índice 0 retorna <em>undefined</em> neste caso, pois o único índice existente é 5. Vetores podem também ser declarados utilizando-se a palavra reservada <em>Array</em>:</p>
<p><span class="jsrun-exemplo-8 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> lista <span style="color: #ffffff;">=</span> <span style="color: #fbde2d; font-weight: bold;">new</span> Array<span style="color: #ffffff;">&#40;</span><span style="color: #f78465;">30</span><span style="color: #ffffff;">,</span> <span style="color: #f78465;">60</span><span style="color: #ffffff;">,</span> <span style="color: #f78465;">90</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>lista<span style="color: #ffffff;">&#91;</span><span style="color: #f78465;">2</span><span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>A utilização de <em>[ ]</em> é mais prática e considerada boa prática, entretanto.</p>
<h3>Vetores com variáveis e com outros vetores dentro</h3>
<p>Elementos de vetores podem, obviamente, ser variáveis:</p>
<p><span class="jsrun-exemplo-9 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> meuCarro <span style="color: #ffffff;">=</span> <span style="color: #61ce3c;">'Fiesta'</span><span style="color: #ffffff;">;</span>
<span style="color: #fbde2d; font-weight: bold;">var</span> lista <span style="color: #ffffff;">=</span> <span style="color: #ffffff;">&#91;</span><span style="color: #61ce3c;">'Sandero'</span><span style="color: #ffffff;">,</span> meuCarro<span style="color: #ffffff;">,</span> <span style="color: #61ce3c;">'Fox'</span><span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>lista<span style="color: #ffffff;">&#91;</span><span style="color: #f78465;">1</span><span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Um vetor dentro de outro:</p>
<p><span class="jsrun-exemplo-10 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #bfbfbf; font-style: italic;">// exemplo-7</span>
<span style="color: #fbde2d; font-weight: bold;">var</span> numeros <span style="color: #ffffff;">=</span> <span style="color: #ffffff;">&#91;</span><span style="color: #f78465;">40</span><span style="color: #ffffff;">,</span> <span style="color: #f78465;">45</span><span style="color: #ffffff;">,</span> <span style="color: #f78465;">50</span><span style="color: #ffffff;">&#93;</span>
<span style="color: #fbde2d; font-weight: bold;">var</span> lista <span style="color: #ffffff;">=</span> <span style="color: #ffffff;">&#91;</span><span style="color: #f78465;">10</span><span style="color: #ffffff;">,</span> <span style="color: #f78465;">30</span><span style="color: #ffffff;">,</span> numeros<span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>lista<span style="color: #ffffff;">&#91;</span><span style="color: #f78465;">2</span><span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">&#91;</span><span style="color: #f78465;">1</span><span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>O nível de profundidade dos vetores em JavaScript não é definido e é dado apenas pelo limite da memória (e pelo seu bom senso, claro).</p>
<h3>Quantidade de elementos de um vetor</h3>
<p><span class="jsrun-exemplo-11 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> lista <span style="color: #ffffff;">=</span> <span style="color: #ffffff;">&#91;</span><span style="color: #f78465;">12</span><span style="color: #ffffff;">,</span> <span style="color: #f78465;">24</span><span style="color: #ffffff;">,</span> <span style="color: #f78465;">48</span><span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>lista.<span style="color: #6591f7;">length</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>A propriedade <em>length</em> nos retorna um número indicando quantos elementos um vetor tem. Isso é muito importante e útil, pois nos permite &#8220;passear&#8221; pelo vetor:</p>
<p><span class="jsrun-exemplo-12 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> lista <span style="color: #ffffff;">=</span> <span style="color: #ffffff;">&#91;</span><span style="color: #61ce3c;">'primeiro'</span><span style="color: #ffffff;">,</span> <span style="color: #61ce3c;">'segundo'</span><span style="color: #ffffff;">,</span> <span style="color: #61ce3c;">'terceiro'</span><span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: #fbde2d; font-weight: bold;">for</span> <span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">var</span> i <span style="color: #ffffff;">=</span> <span style="color: #f78465;">0</span><span style="color: #ffffff;">;</span> i <span style="color: #ffffff;">&lt;</span> lista.<span style="color: #6591f7;">length</span><span style="color: #ffffff;">;</span> i<span style="color: #ffffff;">++</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'Índice: '</span> <span style="color: #ffffff;">+</span> i <span style="color: #ffffff;">+</span> <span style="color: #61ce3c;">' valor: '</span> <span style="color: #ffffff;">+</span> lista<span style="color: #ffffff;">&#91;</span>i<span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span></pre></td></tr></table></div>

<p>Para finalizar, uma brincadeira inútil:</p>
<p><span class="jsrun-exemplo-13 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> lista <span style="color: #ffffff;">=</span> <span style="color: #ffffff;">&#91;</span>
    <span style="color: #61ce3c;">'motocicleta'</span><span style="color: #ffffff;">,</span>
    <span style="color: #ffffff;">&#91;</span><span style="color: #f78465;">30</span><span style="color: #ffffff;">,</span> <span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
        <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'Olá'</span><span style="color: #ffffff;">&#41;</span>
        <span style="color: #ffffff;">&#125;</span>
     <span style="color: #ffffff;">&#93;</span>
<span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>lista<span style="color: #ffffff;">&#91;</span><span style="color: #f78465;">0</span><span style="color: #ffffff;">,</span><span style="color: #f78465;">0</span><span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
&nbsp;
lista<span style="color: #ffffff;">&#91;</span><span style="color: #f78465;">1</span><span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">&#91;</span><span style="color: #f78465;">1</span><span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2010/01/31/vetores-arrays-o-basico/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Quem usa Google AJAX Libraries API para carregar jQuery?</title>
		<link>http://javascript.singuska.com/2010/01/23/quem-usa-google-ajax-libraries-api-para-carregar-jquery/</link>
		<comments>http://javascript.singuska.com/2010/01/23/quem-usa-google-ajax-libraries-api-para-carregar-jquery/#comments</comments>
		<pubDate>Sat, 23 Jan 2010 13:34:16 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Outros]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[performance]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=322</guid>
		<description><![CDATA[O Google AJAX Libraries API é um serviço que possibilita o carregamento remoto de frameworks JavaScript a partir de seus servidores. Com ele você pode, por exemplo, fazer com que o seu site carrege o código fonte do jQuery  diretamente dos servidores do Google. O serviço está em operação deste 2007.
O framework JavaScript do [...]]]></description>
			<content:encoded><![CDATA[<p>O <a href="http://code.google.com/apis/ajaxlibs/">Google AJAX Libraries API</a> é um serviço que possibilita o carregamento remoto de frameworks JavaScript a partir de seus servidores. Com ele você pode, por exemplo, fazer com que o seu site carrege o código fonte do jQuery  diretamente dos servidores do Google. O serviço está em operação deste 2007.</p>
<p>O framework JavaScript do Yahoo!,<a href="http://developer.yahoo.com/yui/">YUI</a>, sempre recomendou que seus códigos fossem carregados remotamente. <a href="http://ajaxian.com/archives/announcing-ajax-libraries-api-speed-up-your-ajax-apps-with-googles-infrastructure">Este post do Ajaxian</a> elenca uma série de vantagens. Destaco algumas delas:</p>
<ul>
<li>caching é feito corretamente; desenvolvedores não precisam mais se preocupar com isso</li>
<li>gzip funciona</li>
<li>a <a href="http://pt.wikipedia.org/wiki/Content_Delivery_Network">CDN</a> do Google, distribuida em vários lugares do mundo, possibilita que os arquivos hospedados estejam &#8220;próximos&#8221; do usuário</li>
<li>se uma quantidade significativa de websites utilizar a mesma URL para carregar um determinado framework, quando alguém entrar no seu site pode ser que este arquivo já tenha sido carregado</li>
</ul>
<p>Faz bastante sentido para mim. Claro que se por um acaso os servidores do Google ficarem indisponíveis, ou o serviço descontinuado, você terá graves problemas. Além disso, os mais paranóicos podem afirmar que este é apenas mais um método desenvolvido para colher informações de usuários. Mas isso com certeza não impede que as pessoas continuem utilizando Gmail ou Analytics.</p>
<p>Outro potencial problema é que você fica dependente de uma conexão com a internet para desenvolver. A vantagem é que a maioria dos desenvolvedores não consegue mesmo trabalhar offline. Nosso trabalho já depende demais ferramentas online para isso ser uma preocupação genuína.</p>
<h3>Como funciona?</h3>
<p>Existem dois jeitos de se utilizar o serviço. O primeiro, é mais &#8220;estático&#8221; e simples. O processo é igual ao que você já faz: para incluir um framework, como MooTools, Dojo, jQuery, você deve incluir <em>script src=&#8221;"</em> em seu html. Basta fazer com que o atributo src desta tag aponte para uma URL do serviço: <a href="http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js">http://ajax.googleapis.com/ajax/libs/jquery/1.4.0/jquery.min.js</a>. Este link leva diretamente para a versão minificada do jQuery 1.4 (que hoje é a mais atual).</p>
<p>O segundo jeito, mais &#8220;dinâmico&#8221;, consiste em incluir utilizando <em>script src=&#8221;"</em> o código fonte da API Ajax do Google: <a href="http://www.google.com/jsapi">http://www.google.com/jsapi</a>. Com este código disponível, você pode carregar os frameworks. Vamos incluir novamente o jQuery utilizando o método estático:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">google.<span style="color: #6591f7;">load</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">&quot;jquery&quot;</span><span style="color: #ffffff;">,</span> <span style="color: #61ce3c;">&quot;1&quot;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span> <span style="color: #bfbfbf; font-style: italic;">// obtém a última versão da família 1 (que hoje é a 1.4)</span>
google.<span style="color: #6591f7;">setOnLoadCallback</span><span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
&nbsp;
    $<span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#123;</span>
        <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'Olá'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
    <span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></div></div>

<p>A vantagem desta forma é que, com ela, você pode definir, como no exemplo acima, que quer pegar a versão mais atual do jQuery família de versão 1. É possível ser mais específico:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #bfbfbf; font-style: italic;">// obtém versão 1.3.2 (que é a última da família 1.3)</span>
google.<span style="color: #6591f7;">load</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">&quot;jquery&quot;</span><span style="color: #ffffff;">,</span> <span style="color: #61ce3c;">&quot;1.3&quot;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span> 
&nbsp;
<span style="color: #bfbfbf; font-style: italic;">// obtém especificamente a versão 1.2.6 sem compressão</span>
google.<span style="color: #6591f7;">load</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">&quot;jquery&quot;</span><span style="color: #ffffff;">,</span> <span style="color: #61ce3c;">&quot;1.2.6&quot;</span><span style="color: #ffffff;">,</span> <span style="color: #ffffff;">&#123;</span>uncompressed<span style="color: #ffffff;">:</span><span style="color: #fbde2d; font-weight: bold;">true</span><span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></div></div>

<p>É uma funcionalidade um pouco mais difícil de implementar mas sem dúvida interessante, pois permite que o seu código sempre utilize a versão mais atual de uma determinada família.</p>
]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2010/01/23/quem-usa-google-ajax-libraries-api-para-carregar-jquery/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>target=&#8221;_blank&#8221; com doctype Strict</title>
		<link>http://javascript.singuska.com/2010/01/17/target_blank-com-doctype-strict/</link>
		<comments>http://javascript.singuska.com/2010/01/17/target_blank-com-doctype-strict/#comments</comments>
		<pubDate>Sun, 17 Jan 2010 15:01:21 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Fragmento]]></category>
		<category><![CDATA[Gambiarra]]></category>
		<category><![CDATA[dom]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[ux]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=299</guid>
		<description><![CDATA[Se você é fresco como eu ou como a Dani Murai e gosta de codificar suas páginas utilizando doctype strict já sabe que target=&#8221;_blank&#8221; não valida. Particularmente eu sou contra _blank. É consenso entre os gurus de UX deixar a critério do usuário abrir ou não um link em uma nova guia. Mas como muitos [...]]]></description>
			<content:encoded><![CDATA[<p>Se você é fresco como eu ou como a <a href="http://twitter.com/NiaDany">Dani Murai</a> e gosta de codificar suas páginas utilizando <em>doctype strict</em> já sabe que <em>target=&#8221;_blank&#8221;</em> não valida. Particularmente eu sou contra _blank. É consenso entre os gurus de <a href="http://en.wikipedia.org/wiki/User_experience_design">UX</a> deixar a critério do usuário abrir ou não um link em uma nova guia. Mas como muitos clientes não entendem as implicações de forçar este tipo de prática guela abaixo do usuáro, e você é fresco e continua querendo usar strict, a solução é JavaScript:</p>
<p><span class="jsrun-exemplo-1 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'a'</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">click</span><span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#123;</span>
    <span style="color: #fbde2d; font-weight: bold;">var</span> href <span style="color: #ffffff;">=</span> $<span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">this</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">attr</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'href'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
    window.<span style="color: red;">open</span><span style="color: #ffffff;">&#40;</span>href<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
    <span style="color: #fbde2d; font-weight: bold;">return</span> <span style="color: #fbde2d; font-weight: bold;">false</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Este exemplo em jQuery, se executado, fará com que todos os links desta página sejam abertos em uma nova guia. O <em>return false</em> na linha 4 serve para barrar o evento padrão do link. Se o return for omitido, o destino do link vai ser aberto em uma nova guia <em>e também</em> na página atual.</p>
<h3>preventDefault: uma alternativa mais elegante</h3>
<p>Descobri recentemente o método <em>preventDefault</em> que acaba sendo muito mais prático e menos sujo do que o <em>return false</em>:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'a'</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">click</span><span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span>event<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#123;</span>
    event.<span style="color: #6591f7;">preventDefault</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
    <span style="color: #fbde2d; font-weight: bold;">var</span> href <span style="color: #ffffff;">=</span> $<span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">this</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">attr</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'href'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
    window.<span style="color: red;">open</span><span style="color: #ffffff;">&#40;</span>href<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Além de fazer muito mais sentido do que o return, <em>preventDefault</em> pode ser colocado em qualquer parte do evento, não interrompendo o fluxo da função.</p>
]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2010/01/17/target_blank-com-doctype-strict/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Analytics assíncrono e o plugin Google Analyticator</title>
		<link>http://javascript.singuska.com/2010/01/16/analytics-assincrono-e-o-plugin-google-analyticator/</link>
		<comments>http://javascript.singuska.com/2010/01/16/analytics-assincrono-e-o-plugin-google-analyticator/#comments</comments>
		<pubDate>Sat, 16 Jan 2010 13:54:33 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Fragmento]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=288</guid>
		<description><![CDATA[No final do ano passado o Google Analytics disponibilizou um novo método para a insercão do seu objeto de tracking:

&#160;
var _gaq = _gaq &#124;&#124; &#91;&#93;;
_gaq.push&#40;&#91;'_setAccount', 'UA-XXXXX-X'&#93;&#41;;
_gaq.push&#40;&#91;'_trackPageview'&#93;&#41;;
&#160;
&#40;function&#40;&#41; &#123;
  var ga = document.createElement&#40;'script'&#41;; ga.type = 'text/javascript'; ga.async = true;
  ga.src = &#40;'https:' == document.location.protocol ? 'https://ssl' : 'http://www'&#41; + '.google-analytics.com/ga.js';
  &#40;document.getElementsByTagName&#40;'head'&#41;&#91;0&#93; &#124;&#124; document.getElementsByTagName&#40;'body'&#41;&#91;0&#93;&#41;.appendChild&#40;ga&#41;;
&#125;&#41;&#40;&#41;;

Diferentemente do [...]]]></description>
			<content:encoded><![CDATA[<p>No final do ano passado o Google Analytics disponibilizou um novo método para a insercão do seu objeto de tracking:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">&nbsp;
<span style="color: #fbde2d; font-weight: bold;">var</span> _gaq <span style="color: #ffffff;">=</span> _gaq <span style="color: #ffffff;">||</span> <span style="color: #ffffff;">&#91;</span><span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">;</span>
_gaq.<span style="color: #6591f7;">push</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#91;</span><span style="color: #61ce3c;">'_setAccount'</span><span style="color: #ffffff;">,</span> <span style="color: #61ce3c;">'UA-XXXXX-X'</span><span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
_gaq.<span style="color: #6591f7;">push</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#91;</span><span style="color: #61ce3c;">'_trackPageview'</span><span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
  <span style="color: #fbde2d; font-weight: bold;">var</span> ga <span style="color: #ffffff;">=</span> document.<span style="color: #6591f7;">createElement</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'script'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span> ga.<span style="color: #6591f7;">type</span> <span style="color: #ffffff;">=</span> <span style="color: #61ce3c;">'text/javascript'</span><span style="color: #ffffff;">;</span> ga.<span style="color: #6591f7;">async</span> <span style="color: #ffffff;">=</span> <span style="color: #fbde2d; font-weight: bold;">true</span><span style="color: #ffffff;">;</span>
  ga.<span style="color: #6591f7;">src</span> <span style="color: #ffffff;">=</span> <span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'https:'</span> <span style="color: #ffffff;">==</span> document.<span style="color: #6591f7;">location</span>.<span style="color: #6591f7;">protocol</span> <span style="color: #ffffff;">?</span> <span style="color: #61ce3c;">'https://ssl'</span> <span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'http://www'</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">+</span> <span style="color: #61ce3c;">'.google-analytics.com/ga.js'</span><span style="color: #ffffff;">;</span>
  <span style="color: #ffffff;">&#40;</span>document.<span style="color: #6591f7;">getElementsByTagName</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'head'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#91;</span><span style="color: #f78465;">0</span><span style="color: #ffffff;">&#93;</span> <span style="color: #ffffff;">||</span> document.<span style="color: #6591f7;">getElementsByTagName</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'body'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#91;</span><span style="color: #f78465;">0</span><span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">appendChild</span><span style="color: #ffffff;">&#40;</span>ga<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></div></div>

<p>Diferentemente do método tradicional, este código deve ser colocado dentro da tag <em>head</em> ou no <em>início</em> da tag <em>body</em>. A documentação completa pode ser lida aqui: <a href="http://code.google.com/apis/analytics/docs/tracking/asyncTracking.html">http://code.google.com/apis/analytics/docs/tracking/asyncTracking.html</a>.</p>
<p>O método assíncrono permite que o impacto do script na experiência do usuário seja mínimo (maior performance). Além disso, se o usuário sair da página antes dela ter sido completamente carregada a probabilidade de registro pelo tracking é muito maior deste jeito.</p>
<h3>Wordpress plugin: Google Analyticator</h3>
<p>Aqui no blog eu utilizo o <a href="http://ronaldheft.com/code/analyticator/">Google Analyticator</a>, um excelente plugin para Wordpress. Duas funcionalidades são importantes para mim: filtrar as visitas do admin (eu) e tracking automático de eventos para links que levam pra fora do blog. Este plugin já utiliza o método assíncrono.</p>
]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2010/01/16/analytics-assincrono-e-o-plugin-google-analyticator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Sessões em JavaScript</title>
		<link>http://javascript.singuska.com/2010/01/11/sessoes-em-javascript/</link>
		<comments>http://javascript.singuska.com/2010/01/11/sessoes-em-javascript/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 00:42:40 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Fragmento]]></category>
		<category><![CDATA[Gambiarra]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=281</guid>
		<description><![CDATA[É possível fazer sessões em JavaScript? Mais ou menos. Eu sei, isso cheira a gambiarra. Fiquei sabendo desta técnica através deste post. O objeto window tem uma propriedade chamada name. Esta propriedade é raramente utilizada. O interessante é que ela sobrevive à mudanças de páginas:


window.name = 'testando';

Se você rodar este exemplo, for para outra página [...]]]></description>
			<content:encoded><![CDATA[<p>É possível fazer sessões em JavaScript? Mais ou menos. Eu sei, isso cheira a gambiarra. Fiquei sabendo desta técnica através deste <a href="http://www.sitepoint.com/blogs/2009/09/02/cookieless-javascript-session-variables/">post</a>. O objeto <em>window</em> tem uma propriedade chamada <em>name</em>. Esta propriedade é raramente utilizada. O interessante é que ela sobrevive à mudanças de páginas:</p>
<p><span class="jsrun-exemplo-1 jsrun-button"></span></p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">window.<span style="color: red;">name</span> <span style="color: #ffffff;">=</span> <span style="color: #61ce3c;">'testando'</span><span style="color: #ffffff;">;</span></pre></div></div>

<p>Se você rodar este exemplo, for para outra página e inspecionar o conteúdo da propriedade <em>window.name</em> vai perceber que o valor continua sendo <em>testando</em>. Ou seja, esta informação continua guardada, simulando uma sessão.</p>
<p>Infelizmente <em>window.name</em> consegue armazenar somente strings. Em um outro post pretendo demonstrar como podemos <a href="http://en.wikipedia.org/wiki/Serialization">serializar</a> os dados nesta propriedade. Serializando os dados seria possível armazenar qualquer tipo de vetor, objeto ou função. A maioria dos navegadores consegue armazenar até 10Mb de informações na propriedade.</p>
<p>O ideal seria utillizar uma sessão genuína via back-end, utilizando PHP, C#, Java, etc. Mas como todos nós sabemos, às vezes a realizade exige soluções um tanto quanto &#8220;criativas&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2010/01/11/sessoes-em-javascript/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Colocando objetos jQuery em variáveis</title>
		<link>http://javascript.singuska.com/2010/01/04/colocando-objetos-jquery-em-variaveis/</link>
		<comments>http://javascript.singuska.com/2010/01/04/colocando-objetos-jquery-em-variaveis/#comments</comments>
		<pubDate>Tue, 05 Jan 2010 00:55:38 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Fragmento]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=238</guid>
		<description><![CDATA[Por algum motivo idiota, sempre que eu precisava referenciar um elemento do DOM eu buscava o sujeito repetindo o  seletor:


$&#40;'#post-238 h2 a'&#41;.css&#40;'color','white'&#41;;
&#160;
if &#40;$&#40;'#post-238 h2 a'&#41;.text&#40;&#41; === 'Colocando objetos jQuery em variáveis'&#41; &#123;
    alert&#40;'Entramos na condição. Texto alterado para branco.'&#41;;
&#125;

Quando na verdade, o código abaixo é perfeitamente possível e muitíssimo mais limpo:


var [...]]]></description>
			<content:encoded><![CDATA[<p>Por algum motivo idiota, sempre que eu precisava referenciar um elemento do DOM eu buscava o sujeito repetindo o  seletor:</p>
<p><span class="jsrun-exemplo-1 jsrun-button"></span></p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'#post-238 h2 a'</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">css</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'color'</span><span style="color: #ffffff;">,</span><span style="color: #61ce3c;">'white'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: #fbde2d; font-weight: bold;">if</span> <span style="color: #ffffff;">&#40;</span>$<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'#post-238 h2 a'</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">text</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">===</span> <span style="color: #61ce3c;">'Colocando objetos jQuery em variáveis'</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'Entramos na condição. Texto alterado para branco.'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span></pre></div></div>

<p>Quando na verdade, o código abaixo é perfeitamente possível e muitíssimo mais limpo:</p>
<p><span class="jsrun-exemplo-2 jsrun-button"></span></p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> conteudo <span style="color: #ffffff;">=</span> $<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'#post-238 h2 a'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
&nbsp;
conteudo.<span style="color: #6591f7;">css</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'color'</span><span style="color: #ffffff;">,</span><span style="color: #61ce3c;">'yellow'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: #fbde2d; font-weight: bold;">if</span> <span style="color: #ffffff;">&#40;</span>conteudo.<span style="color: #6591f7;">text</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">===</span> <span style="color: #61ce3c;">'Colocando objetos jQuery em variáveis'</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'Entramos na condição. Texto alterado para amarelo.'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span></pre></div></div>

<h3>Vantagens</h3>
<p>É boa prática em programação evitar a duplicação de código (no caso a string que define o seletor). Isso evita bugs e facilita o entendimento e a manutenção do código. Além disso, imagino que a performance seja maior. </p>
<h3>Sou só eu???</h3>
<p>Quando o <a href="http://conheca.me/">Felipe Pupo</a> começou a me ensinar MooTools, ele me mostrou que adquirir o objeto do DOM uma única vez era uma das grandes vantagens em relação ao jQuery. Sempre achei que a repetição do <em>$</em> e dos seletores o tempo todo era algo realmente pouco prático. Não sei se isso é algo novo no jQuery ou se é algo que eu nunca havia reparado.</p>
<p>O fato é que não sou só eu que faço isso. Uma grande parte dos programadores jQuery não armazena os objetos já adquiridos em variáveis. <em>Será que existe algum efeito colateral?</em></p>
]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2010/01/04/colocando-objetos-jquery-em-variaveis/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Autocomplete e o recorrente problema da acentuação</title>
		<link>http://javascript.singuska.com/2009/12/29/autocomplete-e-o-recorrente-problema-da-acentuacao/</link>
		<comments>http://javascript.singuska.com/2009/12/29/autocomplete-e-o-recorrente-problema-da-acentuacao/#comments</comments>
		<pubDate>Tue, 29 Dec 2009 17:07:01 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Gambiarra]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=207</guid>
		<description><![CDATA[Todos estes anos trabalhando com desenvolvimento web e eu nunca havia implementado um autocomplete. Após uma rápida busca o candidato óbvio foi o jQuery Autocomplete plugin. A implementação foi tranquila. O autocomplete em questão puxa uma lista de aeroportos de um arquivo JSON.
O problema da acentuação
Infelizmente o plugin é rígido ao tratar caracteres. O comportamente [...]]]></description>
			<content:encoded><![CDATA[<p>Todos estes anos trabalhando com desenvolvimento web e eu nunca havia implementado um autocomplete. Após uma rápida busca o candidato óbvio foi o <a href="http://bassistance.de/jquery-plugins/jquery-plugin-autocomplete/">jQuery Autocomplete plugin</a>. A implementação foi tranquila. O autocomplete em questão puxa uma lista de aeroportos de um arquivo JSON.</p>
<h3>O problema da acentuação</h3>
<p>Infelizmente o plugin é rígido ao tratar caracteres. O comportamente desejado era que os mesmos resultados fossem devolvidos digitando-se, por exemplo, <em>&#8220;são&#8221;</em> ou <em>&#8220;sao&#8221;</em> (São Paulo e outros resultados apareceriam neste caso). Isso não acontecia. Ao digitar <em>sao</em>, &#8220;São Paulo&#8221; não era um dos resultados. Entretanto, percebi que o plugin não diferenciava caixa alta e baixa: <em>SÃO</em> e <em>são</em> retornam o mesmo resultado.</p>
<h3>A gambiarra</h3>
<p>Modificar plugins é uma péssima prática por vários motivos:</p>
<ul>
<li>um bug pode ser introduzido (e só percebido depois)</li>
<li>se uma nova versão do plugin for lançada, a modificação tem que ser refeita</li>
<li>pior: a modificação pode não funcionar numa nova versão</li>
</ul>
<p>Plugins bem feitos geralmente fornecem formas de personalização do comportamento através de objetos de configuração. Em algumas situações, como no nosso caso, isso não é possível. Vasculhei o código do plugin pelo método <em>toLowerCase</em>  (conversão de caixa alta para caixa baixa):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>177
178
179
180
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">if</span><span style="color: #ffffff;">&#40;</span> data<span style="color: #ffffff;">&#91;</span>i<span style="color: #ffffff;">&#93;</span>.<span style="color: #6591f7;">result</span>.<span style="color: #6591f7;">toLowerCase</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">==</span> q.<span style="color: #6591f7;">toLowerCase</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    result <span style="color: #ffffff;">=</span> data<span style="color: #ffffff;">&#91;</span>i<span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">;</span>
    <span style="color: #fbde2d; font-weight: bold;">break</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span></pre></td></tr></table></div>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>255
256
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">if</span> <span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">!</span>options.<span style="color: #6591f7;">matchCase</span><span style="color: #ffffff;">&#41;</span>
    currentValue <span style="color: #ffffff;">=</span> currentValue.<span style="color: #6591f7;">toLowerCase</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Continuei buscando e encontrei ocorrências da conversão em mais cinco ou seis lugares. Então criei um método <em>prototype</em> para o objeto <em>String</em> chamado <em>filterData</em>:</p>
<p><span class="jsrun-exemplo-1 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">String.<span style="color: #6591f7;">prototype</span>.<span style="color: #6591f7;">filterData</span> <span style="color: #ffffff;">=</span> <span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span> 
&nbsp;
    <span style="color: #fbde2d; font-weight: bold;">var</span>
    str <span style="color: #ffffff;">=</span> <span style="color: #fbde2d; font-weight: bold;">this</span>.<span style="color: #6591f7;">toLowerCase</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">,</span>
    specialChars <span style="color: #ffffff;">=</span> <span style="color: #ffffff;">&#91;</span>
        <span style="color: #ffffff;">&#123;</span>val<span style="color: #ffffff;">:</span><span style="color: #61ce3c;">'a'</span><span style="color: #ffffff;">,</span> let<span style="color: #ffffff;">:</span><span style="color: #61ce3c;">'áàãâä'</span><span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">,</span>
	<span style="color: #ffffff;">&#123;</span>val<span style="color: #ffffff;">:</span><span style="color: #61ce3c;">'e'</span><span style="color: #ffffff;">,</span> let<span style="color: #ffffff;">:</span><span style="color: #61ce3c;">'éèêë'</span><span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">,</span>
	<span style="color: #ffffff;">&#123;</span>val<span style="color: #ffffff;">:</span><span style="color: #61ce3c;">'i'</span><span style="color: #ffffff;">,</span> let<span style="color: #ffffff;">:</span><span style="color: #61ce3c;">'íìîï'</span><span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">,</span>
	<span style="color: #ffffff;">&#123;</span>val<span style="color: #ffffff;">:</span><span style="color: #61ce3c;">'o'</span><span style="color: #ffffff;">,</span> let<span style="color: #ffffff;">:</span><span style="color: #61ce3c;">'óòõôö'</span><span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">,</span>
	<span style="color: #ffffff;">&#123;</span>val<span style="color: #ffffff;">:</span><span style="color: #61ce3c;">'u'</span><span style="color: #ffffff;">,</span> let<span style="color: #ffffff;">:</span><span style="color: #61ce3c;">'úùûü'</span><span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">,</span>
	<span style="color: #ffffff;">&#123;</span>val<span style="color: #ffffff;">:</span><span style="color: #61ce3c;">'c'</span><span style="color: #ffffff;">,</span> let<span style="color: #ffffff;">:</span><span style="color: #61ce3c;">'ç'</span><span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">,</span>
    <span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">,</span>
    regex<span style="color: #ffffff;">;</span>
&nbsp;
    <span style="color: #fbde2d; font-weight: bold;">for</span> <span style="color: #ffffff;">&#40;</span><span style="color: #fbde2d; font-weight: bold;">var</span> i <span style="color: #fbde2d; font-weight: bold;">in</span>  specialChars<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
	regex <span style="color: #ffffff;">=</span> <span style="color: #fbde2d; font-weight: bold;">new</span> RegExp<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'['</span> <span style="color: #ffffff;">+</span> specialChars<span style="color: #ffffff;">&#91;</span>i<span style="color: #ffffff;">&#93;</span>.<span style="color: #6591f7;">let</span> <span style="color: #ffffff;">+</span> <span style="color: #61ce3c;">']'</span><span style="color: #ffffff;">,</span> <span style="color: #61ce3c;">'g'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
	str <span style="color: #ffffff;">=</span> str.<span style="color: #6591f7;">replace</span><span style="color: #ffffff;">&#40;</span>regex<span style="color: #ffffff;">,</span> specialChars<span style="color: #ffffff;">&#91;</span>i<span style="color: #ffffff;">&#93;</span>.<span style="color: #6591f7;">val</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
	regex <span style="color: #ffffff;">=</span> <span style="color: #fbde2d; font-weight: bold;">null</span><span style="color: #ffffff;">;</span>
    <span style="color: #ffffff;">&#125;</span>
&nbsp;
    <span style="color: #fbde2d; font-weight: bold;">return</span> str<span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: #bfbfbf; font-style: italic;">// Exemplo de uso</span>
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'Isto é um teste. NÃO podemos ter acentos nem CAIXA ALTA!'</span>.<span style="color: #6591f7;">filterData</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Finalmente, para encerrar a gambiarra, substitui no código do plugin todas as ocorrências de <em>toLowerCase</em> para <em>filterData</em>:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>177
178
179
180
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">if</span><span style="color: #ffffff;">&#40;</span> data<span style="color: #ffffff;">&#91;</span>i<span style="color: #ffffff;">&#93;</span>.<span style="color: #6591f7;">result</span>.<span style="color: #6591f7;">filterData</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">==</span> q.<span style="color: #6591f7;">filterData</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    result <span style="color: #ffffff;">=</span> data<span style="color: #ffffff;">&#91;</span>i<span style="color: #ffffff;">&#93;</span><span style="color: #ffffff;">;</span>
    <span style="color: #fbde2d; font-weight: bold;">break</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span></pre></td></tr></table></div>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>255
256
257
258
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">if</span> <span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">!</span>options.<span style="color: #6591f7;">matchCase</span><span style="color: #ffffff;">&#41;</span>
    currentValue <span style="color: #ffffff;">=</span> currentValue.<span style="color: #6591f7;">filterData</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: #bfbfbf; font-style: italic;">// e em todo o resto do plugin</span></pre></td></tr></table></div>

<p>E funciona! Vou tentar entrar em contato com o autor do plugin sugerindo esta funcionalidade para a próxima versão.</p>
<h3>Observação: utilize UTF-8</h3>
<p>Para esta modificação funcionar a página HTML deve ter o seu charset declarado como <em>UTF-8</em>. O charset ISO-8859-1 não funciona. Sei disso porque a página original teve que ser alterada para UTF-8. Com ISO-8859-1 buscas com acentos não retornavam resultado algum. Mistério, não tenho idéia porque isso ocorre.</p>
]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2009/12/29/autocomplete-e-o-recorrente-problema-da-acentuacao/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Funções: o básico</title>
		<link>http://javascript.singuska.com/2009/12/21/funcoes-o-basico/</link>
		<comments>http://javascript.singuska.com/2009/12/21/funcoes-o-basico/#comments</comments>
		<pubDate>Tue, 22 Dec 2009 00:50:30 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Básico]]></category>
		<category><![CDATA[funções]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=41</guid>
		<description><![CDATA[Função é uma porção de código de um programa maior que desempenha uma tarefa específica e é relativamente independente do resto do código. Geralmente uma função tem um nome, recebe argumentos, realiza sua tarefa e finalmente retorna um resultado.


1
2
3
4
// exemplo-1
function a&#40;&#41; &#123;
    alert&#40;'Olá, sou a função.'&#41;;
&#125;

O fragmento de código acima não realiza [...]]]></description>
			<content:encoded><![CDATA[<p>Função é uma porção de código de um programa maior que desempenha uma tarefa específica e é relativamente independente do resto do código. Geralmente uma função tem um nome, recebe argumentos, realiza sua tarefa e finalmente retorna um resultado.</p>
<p><span class="jsrun-exemplo-1"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #bfbfbf; font-style: italic;">// exemplo-1</span>
<span style="color: #fbde2d; font-weight: bold;">function</span> a<span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'Olá, sou a função.'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span></pre></td></tr></table></div>

<p>O fragmento de código acima não realiza nenhuma tarefa. A função de nome <em>a</em> foi apenas <em>declarada</em> e está pronta para ser utilizada. Para que algo aconteca precisamos <em>invocar</em>, chamar a função. Isso por ser feito da seguinte maneira:</p>
<p><span class="jsrun-exemplo-1 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>5
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">a<span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Se adicionarmos a linha acima ao nosso código, um alerta aparecerá no navegador exibindo a mensagem &#8220;Olá, sou uma função&#8221;.</p>
<h3>E para que servem as funções? (argumentos)</h3>
<p>Quando um programa de alguma complexidade maior é desenvolvido, problemas recorrentes tornam-se evidentes. Tarefas repetitivas que podem ser identificadas, isoladas e codificadas em funções. Vamos alterar nosso código para o seguinte:</p>
<p><span class="jsrun-exemplo-2"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #bfbfbf; font-style: italic;">// exemplo-2</span>
<span style="color: #fbde2d; font-weight: bold;">function</span> a<span style="color: #ffffff;">&#40;</span>texto<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>texto<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span></pre></td></tr></table></div>

<p>A função <em>a</em> agora recebe o que é chamado de argumento. Este argumento tem um nome: <em>texto</em>. Novamente, nosso código é inútil enquando não for acionado.</p>
<p><span class="jsrun-exemplo-2 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>5
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">a<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'Sou um exemplo de texto.'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Mais uma vez um alerta pipoca na tela no navegador, desta vez com a mensagem &#8220;Sou um exemplo de texto&#8221;. Perceba como isso é importante. Nossa função agora comporta-se de maneira diferente dependendo do argumento que lhe é passado. Nessa altura nossa função não é nem um pouco útil. Ela nada mais é do que uma espécie de &#8220;atalho&#8221; para um outra função: alert. Ambas desempenham a mesma tarefa. Vamos então modificar a função para que ela realize algo um pouco diferente:</p>
<p><span class="jsrun-exemplo-3 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #bfbfbf; font-style: italic;">// exemplo-3</span>
<span style="color: #fbde2d; font-weight: bold;">function</span> a<span style="color: #ffffff;">&#40;</span>texto<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'O argumento passado foi: '</span> <span style="color: #ffffff;">+</span> texto<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span>
a<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'um exemplo de texto.'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>O resultado do exemplo 3 é: <em>O argumento passado foi um exemplo de texto</em>. A função continua utilizando alert, mas agora ela realiza uma tarefa um pouco mais complexa.</p>
<p>É possível afirmar então que funções são pedaços de código que desempenham tarefas muito parecidas, mas de maneira um pouco diferente dependendo do jeito que as acionamos. O que faz a função se comportar de forma diferente é o <em>contexto</em>. O contexto, nos exemplos acima, é dado pelo argumento que é pasado no momento da invocação da função.</p>
<h3>Sobre os retornos de funções</h3>
<p>Como já foi dito, funções podem ter nomes, receber argumentos, desempenhar uma tarefa e retornar algum resultado.</p>
<p><span class="jsrun-exemplo-4 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #bfbfbf; font-style: italic;">// exemplo-4</span>
<span style="color: #fbde2d; font-weight: bold;">function</span> a<span style="color: #ffffff;">&#40;</span>texto<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: #fbde2d; font-weight: bold;">return</span> <span style="color: #61ce3c;">'O argumento passado foi: '</span> <span style="color: #ffffff;">+</span> texto<span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span>
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>a<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'um exemplo de texto.'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Este exemplo se comporta de maneira igual ao anterior. Alert é chamada e recebe como argumento o retorno da função &#8220;a&#8221;. Como &#8220;a&#8221; está dentro de &#8220;alert&#8221; ela é executada primeiro. Desta forma, quando alert é chamada já temos o resultado de &#8220;a&#8221; disponível, que é passado como argumento para &#8220;alert&#8221;. </p>
<p>É possível pensar na sequência de operações da seguinte forma: &#8220;alert&#8221; é invocada, invoca &#8220;a&#8221;, que retorna um resultado, que é passado como argumento o argumento de &#8220;alert&#8221;.</p>
<p>É muito importante entender que o retorno não somente retorna um resultado. Ele também pára a execução da função.</p>
<p><span class="jsrun-exemplo-5 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #bfbfbf; font-style: italic;">// exemplo-5</span>
<span style="color: #fbde2d; font-weight: bold;">function</span> a<span style="color: #ffffff;">&#40;</span>texto<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: #fbde2d; font-weight: bold;">return</span><span style="color: #ffffff;">;</span>
    <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'O argumento passado foi: '</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span>
a<span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'um exemplo de texto.'</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Neste caso <em>nada acontece no navegador</em>. Na linha 3 nossa função, invocada na linha 5, não retorna nenhum valor. Ou seja, ela para de ser executada. Esta função é inútil porque ele não desempenha nenhuma tarefa. Em nenhuma circunstância chegaremos na linha 4. É um exemplo besta mas serve para ilustrar que retornos podem ou não retornar um valor, mas sempre interrompem a execução da função.</p>
]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2009/12/21/funcoes-o-basico/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>eDate &#8211; Validação e manipulação de datas em JavaScript</title>
		<link>http://javascript.singuska.com/2009/12/13/edate-uma-biblioteca-para-manipular-datas-em-javascript/</link>
		<comments>http://javascript.singuska.com/2009/12/13/edate-uma-biblioteca-para-manipular-datas-em-javascript/#comments</comments>
		<pubDate>Sun, 13 Dec 2009 18:31:18 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Outros]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=160</guid>
		<description><![CDATA[

Manipulação e validação de datas é um assunto chato em qualquer linguagem de programação. Em JavaScript temos ao nosso dispor o objeto Date. Tarefas repetitivas como a validação de datas ou verificação de idade acabam se tornando extremamente maçantes. Esta foi a motivação que me levou a criar o eDate (Easy Date).
Download do eDate
Você pode [...]]]></description>
			<content:encoded><![CDATA[<p><script type="text/javascript" src="/wp-content/uploads/js/eDate.js">
</script></p>
<p>Manipulação e validação de datas é um assunto chato em qualquer linguagem de programação. Em JavaScript temos ao nosso dispor o objeto <em>Date</em>. Tarefas repetitivas como a validação de datas ou verificação de idade acabam se tornando extremamente maçantes. Esta foi a motivação que me levou a criar o eDate (Easy Date).</p>
<h3><a href="http://github.com/Sigmus/eDate/archives/master">Download do eDate</a></h3>
<p>Você pode baixar o eDate <a href="http://github.com/Sigmus/eDate/archives/master">aqui</a>. Não sei usar direito o GitHub ainda, então se vocês tiverem qualquer dificuldade é só avisar. Feito o download, é só incluir o arquivo na sua página utilizando uma tag <em>script</em> e começar a usar. eDate não é um plugin de nenhuma biblioteca funcionando com JavaScript puro.</p>
<h3>Como funciona?</h3>
<p>eDate funciona através de métodos estáticos. Praticamente todos os métodos recebem um objeto Date como argumento. As exceções são os métodos <em>isValid</em> e <em>getNew</em>. Vamos começar por eles.</p>
<h4>isValid</h4>
<p>Este método serve para determinar se uma data é ou não válida (retornando true / false). Recebe como argumento um objeto que será utilizado para validar a data.</p>
<p><span class="jsrun-exemplo-1 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> result <span style="color: #ffffff;">=</span> eDate.<span style="color: #6591f7;">isValid</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#123;</span>
    day<span style="color: #ffffff;">:</span> <span style="color: #f78465;">29</span><span style="color: #ffffff;">,</span>
    month<span style="color: #ffffff;">:</span> <span style="color: #f78465;">2</span><span style="color: #ffffff;">,</span>
    year<span style="color: #ffffff;">:</span> <span style="color: #f78465;">2009</span>   
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>result<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>A data não é válida porque 2009 não é um ano bissexto. Notem que utilizamos 2 para fevereiro. Uma das inconveniências do objeto date é a sua bizarra atribuição de números aos meses. Janeiro é 0, fevereiro 1, etc. eDate &#8220;conserta&#8221; isso, fazendo com que janeiro seja 1, fevereiro 2, etc. <em>isValid</em> pode receber parâmetros de outra forma:</p>
<p><span class="jsrun-exemplo-2 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> result <span style="color: #ffffff;">=</span> eDate.<span style="color: #6591f7;">isValid</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#123;</span>
    <span style="color: #61ce3c;">'dd/mm/yyyy'</span><span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'29/02/2009'</span>
<span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>result<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Foi por isso que optei em utilizar um objeto como argumento para isValid. No exemplo acima utilizamos a máscara <em>dd/mm/yyyy</em>. É possível também utilizar <em>mm/dd/yyyy</em> e <em>yyyy/mm/dd</em>. </p>
<p>A grande vantagem das máscaras é que, muitas vezes, as datas que manipulamos em páginas estão em um único campo input de um formulário. Pretendo adicionar mais máscaras utilizando expressões regulares no futuro.</p>
<h4>getNew</h4>
<p>Este método retorna um novo objeto date. A vantagem de utilizar getNew ao invés de <em>new Date</em> é que podemos utilizar as máscaras. Além disso, não precisamos nos preocupar em subtrair o mês.</p>
<p><span class="jsrun-exemplo-3 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> 
d1 <span style="color: #ffffff;">=</span> <span style="color: #fbde2d; font-weight: bold;">new</span> Date<span style="color: #ffffff;">&#40;</span><span style="color: #f78465;">2009</span><span style="color: #ffffff;">,</span> <span style="color: #f78465;">11</span><span style="color: #ffffff;">,</span> <span style="color: #f78465;">13</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">,</span>
d2 <span style="color: #ffffff;">=</span> eDate.<span style="color: #6591f7;">getNew</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#123;</span><span style="color: #61ce3c;">'dd/mm/yyyy'</span><span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'13/12/2009'</span><span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: #fbde2d; font-weight: bold;">if</span> <span style="color: #ffffff;">&#40;</span>d1.<span style="color: #6591f7;">toString</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">===</span> d2.<span style="color: #6591f7;">toString</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>d2.<span style="color: #6591f7;">toString</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span></pre></td></tr></table></div>

<h4>getToday</h4>
<p>getToday retorna a data atual do seu computador mas com uma diferença: o horário vem zerado (meia-noite):</p>
<p><span class="jsrun-exemplo-4 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> t <span style="color: #ffffff;">=</span> eDate.<span style="color: #6591f7;">getToday</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>t.<span style="color: #6591f7;">toString</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Isso é diferente de:</p>
<p><span class="jsrun-exemplo-5 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> t <span style="color: #ffffff;">=</span> <span style="color: #fbde2d; font-weight: bold;">new</span> Date<span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>t.<span style="color: #6591f7;">toString</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<h4>addDays</h4>
<p>Este método serve para adicionar ou subtrair dias de um objeto date:</p>
<p><span class="jsrun-exemplo-6 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> d <span style="color: #ffffff;">=</span> eDate.<span style="color: #6591f7;">getNew</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#123;</span><span style="color: #61ce3c;">'dd/mm/yyyy'</span><span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'1/1/2010'</span><span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
eDate.<span style="color: #6591f7;">addDays</span><span style="color: #ffffff;">&#40;</span>d<span style="color: #ffffff;">,</span> <span style="color: #ffffff;">-</span><span style="color: #f78465;">1</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>d.<span style="color: #6591f7;">toString</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Criamos um objeto date através de eDate.getNew(). Depois utilizamos o método addDays para subtrair um dia do objeto. Percebam que o objeto em si foi manipulado por referência.</p>
<h4>diffDays</h4>
<p>Caso você precise saber a diferença em dias de uma data para outra:</p>
<p><span class="jsrun-exemplo-7 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> diff <span style="color: #ffffff;">=</span> eDate.<span style="color: #6591f7;">diffDays</span><span style="color: #ffffff;">&#40;</span>
    eDate.<span style="color: #6591f7;">getNew</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#123;</span><span style="color: #61ce3c;">'dd/mm/yyyy'</span><span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'03/03/2010'</span><span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">,</span>
    eDate.<span style="color: #6591f7;">getNew</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#123;</span><span style="color: #61ce3c;">'dd/mm/yyyy'</span><span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'20/02/2010'</span><span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span>
<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>diff<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>Neste caso a primeira data está <em>11</em> dias no futuro em relação a segunda. Se invertéssemos a ordem das datas, o resultado seria <em>-11</em>. Se as datas fossem iguais o resultado seria <em>0</em>.</p>
<h4>isOverAge</h4>
<p>Este método permite verificar, por exemplo, se alguém é ou não maior de idade:</p>
<p><span class="jsrun-exemplo-8 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> result <span style="color: #ffffff;">=</span> eDate.<span style="color: #6591f7;">isOverAge</span><span style="color: #ffffff;">&#40;</span>
    eDate.<span style="color: #6591f7;">getNew</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#123;</span><span style="color: #61ce3c;">'dd/mm/yyyy'</span><span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'20/10/1985'</span><span style="color: #ffffff;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">,</span>
    <span style="color: #f78465;">18</span>
<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>result<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>O primeiro argumento é um objeto date, o segundo o número de anos que deve ser utilizado para a comparação. Uma gama de websites exige que o usuário informe sua idade antes de liberar o acesso. É uma política um tanto quanto duvidosa porque o usuário pode mentir a idade ou alterar a data do seu computador, já que as datas geradas pelo JavaScript dependem do horário do computador do usuário.</p>
<h3>Sugestões e melhorias</h3>
<p>Por enquanto é isso que a o eDate faz. Penso em adicionar métodos e resolver bugs conforme a necessidade surgir. Aguardo comentários e sugestões.</p>
<p><del datetime="2009-12-13T17:56:50+00:00"></p>
]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2009/12/13/edate-uma-biblioteca-para-manipular-datas-em-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Escopo (variáveis globais / locais)</title>
		<link>http://javascript.singuska.com/2009/12/09/escopo-variaveis-globais-locais/</link>
		<comments>http://javascript.singuska.com/2009/12/09/escopo-variaveis-globais-locais/#comments</comments>
		<pubDate>Wed, 09 Dec 2009 20:45:21 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Básico]]></category>
		<category><![CDATA[escopo]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=14</guid>
		<description><![CDATA[A palavra reservada var em JavaScript define a variável como sendo local ao bloco de escopo onde está sendo declarada:


1
2
3
4
5
6
7
8
9
10
11
12
var x = 1;
&#160;
function fn1&#40;&#41; &#123;
    var x = 2;
    alert&#40;x&#41;;
&#125;
function fn2&#40;&#41; &#123;
    alert&#40;x&#41;;
&#125;
&#160;
fn1&#40;&#41;;
fn2&#40;&#41;;

O resultado é: 2 e depois 1. Neste exemplo, uma outra variável x (que [...]]]></description>
			<content:encoded><![CDATA[<p>A palavra reservada <strong>var</strong> em JavaScript define a variável como sendo local ao bloco de escopo onde está sendo declarada:</p>
<p><span class="jsrun-exemplo-1 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> x <span style="color: #ffffff;">=</span> <span style="color: #f78465;">1</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: #fbde2d; font-weight: bold;">function</span> fn1<span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: #fbde2d; font-weight: bold;">var</span> x <span style="color: #ffffff;">=</span> <span style="color: #f78465;">2</span><span style="color: #ffffff;">;</span>
    <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>x<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span>
<span style="color: #fbde2d; font-weight: bold;">function</span> fn2<span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>x<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span>
&nbsp;
fn1<span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
fn2<span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>O resultado é: <strong>2</strong> e depois <strong>1</strong>. Neste exemplo, uma outra variável x (que por acaso tem o mesmo nome) foi definida dentro da função fn1. Por isso, ao executarmos a função fn2 o valor original da variável declarada na linha 1 permanece.</p>
<p>Para que o resultado fosse <strong>2</strong> e <strong>2</strong>:</p>
<p><span class="jsrun-exemplo-2 jsrun-button"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #fbde2d; font-weight: bold;">var</span> x <span style="color: #ffffff;">=</span> <span style="color: #f78465;">1</span><span style="color: #ffffff;">;</span>
&nbsp;
<span style="color: #fbde2d; font-weight: bold;">function</span> fn1<span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    x <span style="color: #ffffff;">=</span> <span style="color: #f78465;">2</span><span style="color: #ffffff;">;</span> <span style="color: #bfbfbf; font-style: italic;">// atribuição de valor sem var</span>
    <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>x<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span>
<span style="color: #fbde2d; font-weight: bold;">function</span> fn2<span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</span>
    <span style="color: red;">alert</span><span style="color: #ffffff;">&#40;</span>x<span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span>
&nbsp;
fn1<span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span>
fn2<span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>A modificação da linha 4 altera o valor da variável declarada na linha 1 e temos, consequentemente, o mesmo resultado nos dois alerts (trata-se da mesma variável com o mesmo nome).</p>
<p>Note que na linha 1 dos dois exemplos a variável foi declarada utilizando-se <strong>var</strong>. Entretanto, a remoção de var não implica em nenhuma mudança de comportamento. Isso acontece porque neste caso a declaração ocorre no escopo mais &#8220;exterior&#8221; do nosso código. Com ou sem <strong>var</strong> ela pode ser considerada global.</p>
<h3>E porque isso é importante?</h3>
<p>O uso de variáveis globais é uma péssima prática. A variável pode ser utilizada e modificada por qualquer parte do código. Isso é fonte de inúmeros bugs. A não ser que seja realmente necessário, sempre declare as variáveis como locais. É possível (e recomendável) declarar várias variáveis locais de uma vez:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">    <span style="color: #fbde2d; font-weight: bold;">var</span> x <span style="color: #ffffff;">=</span> <span style="color: #f78465;">1</span><span style="color: #ffffff;">,</span> y<span style="color: #ffffff;">,</span> z<span style="color: #ffffff;">;</span> <span style="color: #bfbfbf; font-style: italic;">// boa prática</span>
&nbsp;
    <span style="color: #fbde2d; font-weight: bold;">var</span> x <span style="color: #ffffff;">=</span> <span style="color: #f78465;">1</span><span style="color: #ffffff;">;</span> <span style="color: #bfbfbf; font-style: italic;">// não tão boa</span>
    <span style="color: #fbde2d; font-weight: bold;">var</span> y<span style="color: #ffffff;">;</span>
    <span style="color: #fbde2d; font-weight: bold;">var</span> z<span style="color: #ffffff;">;</span>
<span style="color: #ffffff;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2009/12/09/escopo-variaveis-globais-locais/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Sempre aspas duplas no JSON</title>
		<link>http://javascript.singuska.com/2009/12/06/sempre-aspas-duplas-no-json/</link>
		<comments>http://javascript.singuska.com/2009/12/06/sempre-aspas-duplas-no-json/#comments</comments>
		<pubDate>Sun, 06 Dec 2009 02:55:37 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Fragmento]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[json]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=91</guid>
		<description><![CDATA[Outro dia perdi um bom tempo tentando utilizar a função json_decode do PHP para parsear um código JSON que eu havia criado. O problema é que eu estava utilizando aspas simples ao invés de duplas:

&#123;
    'prop1': 'valor1'
&#125;

O código válido seria o seguinte:

&#123;
    &#34;prop1&#34;: &#34;valor1&#34;
&#125;

Vale lembrar que o exemplo abaixo [...]]]></description>
			<content:encoded><![CDATA[<p>Outro dia perdi um bom tempo tentando utilizar a função <a href="http://php.net/manual/en/function.json-decode.php">json_decode</a> do PHP para parsear um código <a href="http://pt.wikipedia.org/wiki/JSON">JSON</a> que eu havia criado. O problema é que eu estava utilizando aspas simples ao invés de duplas:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #ffffff;">&#123;</span>
    <span style="color: #61ce3c;">'prop1'</span><span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">'valor1'</span>
<span style="color: #ffffff;">&#125;</span></pre></div></div>

<p>O código válido seria o seguinte:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #ffffff;">&#123;</span>
    <span style="color: #61ce3c;">&quot;prop1&quot;</span><span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">&quot;valor1&quot;</span>
<span style="color: #ffffff;">&#125;</span></pre></div></div>

<p>Vale lembrar que o exemplo abaixo <em>não</em> é um JSON válido:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #ffffff;">&#123;</span>
    prop1<span style="color: #ffffff;">:</span> <span style="color: #61ce3c;">&quot;valor1&quot;</span>
<span style="color: #ffffff;">&#125;</span></pre></div></div>

<p>Apesar deste código ser um objeto JavaScript válido, a sintaxe do JSON <em>exige</em> que as propriedades sejam declaradas entre aspas duplas.</p>
]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2009/12/06/sempre-aspas-duplas-no-json/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
