<?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>JavaScript: Singuska &#187; jquery</title>
	<atom:link href="http://javascript.singuska.com/tag/jquery/feed/" rel="self" type="application/rss+xml" />
	<link>http://javascript.singuska.com</link>
	<description>Fragmentos de código e gambiarras (0.2)</description>
	<lastBuildDate>Mon, 03 Oct 2011 19:45:27 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>Click interrompido</title>
		<link>http://javascript.singuska.com/2011/06/22/click-interrompido/</link>
		<comments>http://javascript.singuska.com/2011/06/22/click-interrompido/#comments</comments>
		<pubDate>Wed, 22 Jun 2011 04:51:48 +0000</pubDate>
		<dc:creator>Flávio</dc:creator>
				<category><![CDATA[Fragmento]]></category>
		<category><![CDATA[Gambiarra]]></category>
		<category><![CDATA[funções]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[plugin]]></category>

		<guid isPermaLink="false">http://javascript.singuska.com/?p=605</guid>
		<description><![CDATA[Um padrão recorrente na programação em jQuery é executar uma função quando um link é clicado e, concomitantemente, evitar o que navegador carrege uma nova página ao ser clicado. É possível criar uma função que sirva de atalho para esta tarefa repetitiva: 1 2 3 4 5 6 $.fn.extend&#40;&#123;clickPrevented: function&#40;fn&#41; &#123; $&#40;this&#41;.click&#40;function&#40;e&#41; &#123; e.preventDefault&#40;&#41;; fn&#40;e&#41;; [...]]]></description>
			<content:encoded><![CDATA[<p>Um padrão recorrente na programação em jQuery é executar uma função quando um link é clicado e, concomitantemente, evitar o que navegador carrege uma nova página ao ser clicado. É possível criar uma função que sirva de atalho para esta tarefa repetitiva:</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: #6591f7;">fn</span>.<span style="color: #6591f7;">extend</span><span style="color: #ffffff;">&#40;</span><span style="color: #ffffff;">&#123;</span>clickPrevented<span style="color: #ffffff;">:</span> <span style="color: #fbde2d; font-weight: bold;">function</span><span style="color: #ffffff;">&#40;</span>fn<span style="color: #ffffff;">&#41;</span> <span style="color: #ffffff;">&#123;</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;">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>
		fn<span style="color: #ffffff;">&#40;</span>e<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;">&#125;</span><span style="color: #ffffff;">&#41;</span><span style="color: #ffffff;">;</span></pre></td></tr></table></div>

<p>A utilização aconteceria mais ou menos assim:</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: #ffffff;">&#40;</span><span style="color: #61ce3c;">'#apenas_um_cara'</span><span style="color: #ffffff;">&#41;</span>.<span style="color: #6591f7;">clickPrevented</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: red;">alert</span><span style="color: #ffffff;">&#40;</span><span style="color: #61ce3c;">'Você vai continuar nesta página após o alert.'</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>

]]></content:encoded>
			<wfw:commentRss>http://javascript.singuska.com/2011/06/22/click-interrompido/feed/</wfw:commentRss>
		<slash:comments>0</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; [...]]]></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>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>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>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 [...]]]></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. [...]]]></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>4</slash:comments>
		</item>
	</channel>
</rss>

