<?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>Leandro Garcia &#187; JavaScript</title>
	<atom:link href="http://www.leandrogarcia.com/blog/category/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.leandrogarcia.com</link>
	<description></description>
	<lastBuildDate>Wed, 11 Jan 2012 13:31:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>A melhor maneira de aprender Javascript</title>
		<link>http://www.leandrogarcia.com/blog/a-melhor-maneira-de-aprender-javascript/</link>
		<comments>http://www.leandrogarcia.com/blog/a-melhor-maneira-de-aprender-javascript/#comments</comments>
		<pubDate>Fri, 14 Oct 2011 20:21:54 +0000</pubDate>
		<dc:creator>leandro garcia</dc:creator>
				<category><![CDATA[dicas]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://www.leandrogarcia.com/?p=467</guid>
		<description><![CDATA[Tem um site que acompanho chamado nettuts, que possui diversos tutoriais sobre diversas coisas, uma dessas é sobre  a melhor maneira de aprender javascript. Vou tentar sintetizar o eles recomendam. Eu recomendo seguir este site.  
Item 0: Entender o que JavaScript é e não é
Javascript não é jQuery, Java ou flash. JavaScript é uma [...]]]></description>
			<content:encoded><![CDATA[<p>Tem um site que acompanho chamado <a href="http://net.tutsplus.com/">nettuts</a>, que possui diversos tutoriais sobre diversas coisas, uma dessas é sobre  <a href="http://net.tutsplus.com/tutorials/javascript-ajax/the-best-way-to-learn-javascript/">a melhor maneira de aprender javascript</a>. Vou tentar sintetizar o eles recomendam. Eu recomendo seguir este site. <img src='http://www.leandrogarcia.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Item 0: Entender o que JavaScript é e não é</strong></p>
<p>Javascript não é jQuery, Java ou flash. JavaScript é uma linguagem do navegador. Sua primeira proposta é adicionar interatividade à páginas estáticas. Não substitui PHP ou Ruby. Nem mesmo HTML ou CSS, é usado em conjunto. Talvez você tenha ouvido falar em jQuery jQuery não é Javascript ou não substiui o javascript. jQuery é uma ferramenta de trabalho escrita em Javascript, ou seja, você programa javascript sem jquery, ams o jQuery pode facilitar sua vida.</p>
<p><strong>Item 1: Aprender através de screencasts</strong></p>
<p>O site <a href="http://learn.appendto.com/">http://learn.appendto.com/</a> tem uma série de screencasts interessantes para iniciantes.</p>
<p><strong>Item 2: Ler uma boa introdução de JavaScript</strong></p>
<p><a href="https://developer.mozilla.org/en/A_re-introduction_to_JavaScript">Uma introdução ao Java Script &#8211; Mozzila</a></p>
<p><a href="http://www.amazon.com/gp/product/1593272820/ref=as_li_ss_tl?ie=UTF8&amp;tag=nett02-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=1593272820">Eloquent JavaScript: A Modern Introduction to Programming </a></p>
<p><a href="http://rockablepress.com/books/getting-good-with-javascript/">http://rockablepress.com/books/getting-good-with-javascript/</a></p>
<p><strong>Item 3: Instalar e aprender FireBug ou Devlopers Tools</strong></p>
<p>Uma vez que você começou à trabalhar com javascript no navegador, instale o firebug para aprimorar seus conhecimentos. Tempos atrás eu fiz um <a title="Firebug, Mais que um complemento, um &quot;amigo&quot; do desenvolvedor" href="http://www.leandrogarcia.com/blog/fire-bug-mais-que-um-complemento-um-amigo-do-desenvolvedor/">post sobre Firebug</a>, leia-o, é interessante. Leia o <a href="http://getfirebug.com/">wiki do Firebug</a>, leia sobre o <a href="http://code.google.com/intl/pt-BR/chrome/devtools/">developer tools</a>.</p>
<p><strong>Item 4: Ler um livro</strong></p>
<p>Presumindo que você já está familiarizado com a linguagem, agora é hora de ler um livro à respeito. Os que acho mais interessantes são da editora O&#8217;reilly</p>
<p><a href="http://www.amazon.com/gp/product/047022780X/ref=as_li_ss_tl?ie=UTF8&amp;tag=nett02-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=047022780X">Professional JavaScript for Web Developers (Wrox Programmer to Programmer)</a></p>
<p><a href="http://www.amazon.com/gp/product/0470647833/ref=as_li_ss_tl?ie=UTF8&amp;tag=nett02-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=0470647833">JavaScript 24-Hour Trainer (Wrox Programmer to Programmer)</a></p>
<p><a href="http://www.amazon.com/gp/product/0596806752/ref=as_li_ss_tl?ie=UTF8&amp;tag=nett02-20&amp;linkCode=as2&amp;camp=217145&amp;creative=399369&amp;creativeASIN=0596806752">JavaScript Patterns</a></p>
<p><strong>Item 5: Construa alguma coisa</strong></p>
<p>Este item eu acho o mais importante. Para você ser bom, você tem que fazer. Faça uma lista de tarefas, uma galeria de fotos, uma caixa que se move, sei lá, faça algo e depois tente melhorar o código</p>
<p><strong>Item 6: Aprenda alguma biblioteca JS</strong></p>
<p>Usar uma bilbioteca ou framework traz uma agilidade enorme para o desenvolvimento das coisas, mas acredito que para você ser bom em alguma biblioteca você deve aprender Javascript tradicional, pois em algum momento você pode ser desafiado à fazer alguma coisa sem a biblioteca que você está acostumado.</p>
<p><strong>Item 7: Acompanhe os melhores</strong></p>
<p>Ler é a melhor maneira de você evoluir na programação e para ler, nada melhor do que ler o que os melhores postam. no post <a href="http://net.tutsplus.com/articles/web-roundups/30-developers-you-must-subscribe-to-as-a-javascript-junkie/">http://net.tutsplus.com/articles/web-roundups/30-developers-you-must-subscribe-to-as-a-javascript-junkie/</a>, há uma série de excelentes programadores que tem muito a ensinar. Leiam seus blogs.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.leandrogarcia.com/blog/a-melhor-maneira-de-aprender-javascript/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Operador ternário</title>
		<link>http://www.leandrogarcia.com/blog/operador-ternario/</link>
		<comments>http://www.leandrogarcia.com/blog/operador-ternario/#comments</comments>
		<pubDate>Thu, 10 Feb 2011 16:34:20 +0000</pubDate>
		<dc:creator>leandro garcia</dc:creator>
				<category><![CDATA[dicas]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[operador ternário]]></category>

		<guid isPermaLink="false">http://www.leandrogarcia.com/?p=416</guid>
		<description><![CDATA[O Operador ternário está presente na maioria das linguagens de programação e serve para agrupar condicionais em uma única linha, economizando código e na minha opinião deixado o código mais clean.
A sintaxe é simples (condição) ? verdadeira : falsa
Em PHP uma sintaxe normal
Agora com o Operador ternário
ou 
Em javascript é a mesma coisa.
Vejam:
Tradicional
Operador ternário
]]></description>
			<content:encoded><![CDATA[<p>O Operador ternário está presente na maioria das linguagens de programação e serve para agrupar condicionais em uma única linha, economizando código e na minha opinião deixado o código mais clean.</p>
<p>A sintaxe é simples <strong>(condição) ? verdadeira : falsa</strong></p>
<p>Em PHP uma sintaxe normal</p>
<pre class="brush: php; title: ; notranslate">
$direcao = &quot;d&quot;;
if($direcao == &quot;d&quot;){
	$sentido = &quot;direita&quot;;
}else{
	$sentido = &quot;esquerda&quot;;
}

print $sentido;
</pre>
<p>Agora com o Operador ternário</p>
<pre class="brush: php; title: ; notranslate">
$direcao = &quot;d&quot;;
$sentido = ($direcao == &quot;d&quot;) ? &quot;direita&quot; : &quot;esquerda&quot;;
print $sentido;
</pre>
<p>ou </p>
<pre class="brush: php; title: ; notranslate">
$direcao = &quot;d&quot;;
print ($direcao == &quot;d&quot;) ? &quot;direita&quot; : &quot;esquerda&quot;;
</pre>
<p>Em javascript é a mesma coisa.</p>
<p>Vejam:</p>
<p>Tradicional</p>
<pre class="brush: jscript; title: ; notranslate">

var direcao = &quot;d&quot;;
if(direcao == &quot;d&quot;){
	sentido = &quot;direita&quot;;
}else{
	sentido = &quot;esquerda&quot;;
}

document.write(sentido);
</pre>
<p>Operador ternário</p>
<pre class="brush: jscript; title: ; notranslate">
var direcao = &quot;d&quot;;
var sentido = (direcao == &quot;d&quot;) ? &quot;direita&quot; : &quot;esquerda&quot;;
document.write(sentido);
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.leandrogarcia.com/blog/operador-ternario/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Validação de formularios com jQuery</title>
		<link>http://www.leandrogarcia.com/blog/validacao-de-formularios-com-jquery/</link>
		<comments>http://www.leandrogarcia.com/blog/validacao-de-formularios-com-jquery/#comments</comments>
		<pubDate>Sat, 28 Aug 2010 18:28:29 +0000</pubDate>
		<dc:creator>leandro garcia</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[validação]]></category>
		<category><![CDATA[validation]]></category>

		<guid isPermaLink="false">http://www.leandrogarcia.com/?p=350</guid>
		<description><![CDATA[ção É muito comum que em projetos que desenvolvemos tenham formulários e em formularios é praticamente necessário que haja validações qunaton à entrada de dados. Por mais que tenhamos quer validar a entrada dos dados por backend, uma boa prática é validar no front, através de JS.
A validação por JS é interessante uma vez que [...]]]></description>
			<content:encoded><![CDATA[<p>ção É muito comum que em projetos que desenvolvemos tenham formulários e em formularios é praticamente necessário que haja validações qunaton à entrada de dados. Por mais que tenhamos quer validar a entrada dos dados por backend, uma boa prática é validar no front, através de JS.</p>
<p>A validação por JS é interessante uma vez que poupamos processamento  do servidor por requisições inuteis como uma postagem de dados faltando algum campo requerido, além de ser mais rápido para o usuário. Muito trabalho com validação de dados nos diversos trabalhos em que participei. No entanto, depois que passei a utilizar jQuery o trabalho com validação foi muito facilitado. Uso de vez enquando um plugin chamado jquery validator, mas é muito raro, uma vez que o tamanho dele em KBs pode tornar a página mais lenta de ser carregada, e o que, geralmente, preciso validar é entrada de dados em brando ou formato de emails. Para isso, eu desenvolvi uma função para validar  entrada de dados em branco e formato de e-mail, de frma bem simples e com poucas linhas de código. Essa função só funciona com jQuery.</p>
<pre class="brush: jscript; title: ; notranslate">
function validaForm(){
	var emailfilter = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;
	$(&quot;.erro&quot;).remove();
	$(&quot;.emailerr&quot;).remove();
	var required = $(&quot;.required&quot;);
	var req = 0;
	for(i=0;i&lt;required.length;i++){
		if($(required[i]).val() == &quot;&quot;){
			if($(&quot;.erro&quot;).length == 0){
				$(&quot;form&quot;).prepend('&lt;p class=&quot;erro&quot;&gt;campos obrigatorios&lt;/p&gt;');
			}
			$(required[i]).css(&quot;border-color&quot;,&quot;#ff0000&quot;);
			req = 1;
		}
	}

	var email = $(&quot;.email&quot;);
	for(i=0;i&lt;email.length;i++){
		if(!emailfilter.test($(email[i]).val())){
			if($(&quot;.emailerr&quot;).length == 0){
				$(&quot;form&quot;).prepend('&lt;p class=&quot;emailerr&quot;&gt;Email errado&lt;/p&gt;');
			}
			$(email[i]).css(&quot;border-color&quot;,&quot;#ff0000&quot;);
			req = 1;
		}
	}

	if(req == 1){
		return false;
	}
}
</pre>
<p>Para que esta função funcione, você precisa incluir na tag form o atributo &#8216;onsubmit=&#8221;return validaForm()&#8221;&#8216; e a classe &#8216;required&#8217; em cada campo que não pode ser em branco, para e-mail a classe &#8216;email&#8217; como no exemplo a seguir.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;form action=&quot;#&quot; method=&quot;post&quot; onsubmit=&quot;return validaForm()&quot;&gt;
	&lt;fieldset&gt;
		&lt;label&gt;Nome&lt;/label&gt;&lt;br /&gt;
		&lt;input type=&quot;text&quot; name=&quot;nome&quot; class=&quot;required&quot; /&gt;

		&lt;br /&gt;
		&lt;label&gt;Nome&lt;/label&gt;&lt;br /&gt;
		&lt;input type=&quot;text&quot; name=&quot;nome&quot; class=&quot;email&quot; /&gt;
		&lt;br /&gt;
		&lt;input type=&quot;submit&quot; value=&quot;OK&quot; /&gt;
	&lt;/fieldset&gt;
&lt;/form&gt;
</pre>
<p>Espero que seja tão util à vocês quanto écpara mim. Ckique nos links à baixo e veja em funcionamento.<br />
<a href="http://tutoriais.leandrogarcia.com/jquery_validacao_formulario/">http://tutoriais.leandrogarcia.com/jquery_validacao_formulario/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.leandrogarcia.com/blog/validacao-de-formularios-com-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Verificar se um objeto Json está vazio</title>
		<link>http://www.leandrogarcia.com/blog/verificar-se-um-objeto-json-esta-vazio/</link>
		<comments>http://www.leandrogarcia.com/blog/verificar-se-um-objeto-json-esta-vazio/#comments</comments>
		<pubDate>Fri, 28 May 2010 21:37:43 +0000</pubDate>
		<dc:creator>leandro garcia</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JS]]></category>
		<category><![CDATA[json]]></category>

		<guid isPermaLink="false">http://www.leandrogarcia.com/?p=303</guid>
		<description><![CDATA[Tive um problema recentemente, a API do twitter que na busca me traz as informações que preciso, em um determinado usuário resolveu não trazer, consequentemente o sistema não funcionou para este usuário.
A solução verificar o resultado se está vazio, no entando como o callback traz um jason é um pouco difícil. Pesquisando na Net descobri [...]]]></description>
			<content:encoded><![CDATA[<p>Tive um problema recentemente, a API do twitter que na busca me traz as informações que preciso, em um determinado usuário resolveu não trazer, consequentemente o sistema não funcionou para este usuário.</p>
<p>A solução verificar o resultado se está vazio, no entando como o callback traz um jason é um pouco difícil. Pesquisando na Net descobri a função abaixo. Ela verifica se o objeto está vazio, se sim retorna true se não false. Bem útil.</p>
<pre class="brush: jscript; title: ; notranslate">
function isEmpty(obj) {
    for(var prop in obj) {
        if(obj.hasOwnProperty(prop))
            return false;
    }

    return true;
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.leandrogarcia.com/blog/verificar-se-um-objeto-json-esta-vazio/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>JSON (JavaScript Object Notation)</title>
		<link>http://www.leandrogarcia.com/blog/json-javascript-object-notation/</link>
		<comments>http://www.leandrogarcia.com/blog/json-javascript-object-notation/#comments</comments>
		<pubDate>Tue, 09 Mar 2010 19:07:55 +0000</pubDate>
		<dc:creator>leandro garcia</dc:creator>
				<category><![CDATA[dicas]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[json]]></category>

		<guid isPermaLink="false">http://www.leandrogarcia.com/blog/?p=207</guid>
		<description><![CDATA[Muitas vezes nos deparamos com a necessidade de intercambiar dados entre páginas, servidores ou até mesmo domiínios. A maioria de nós, inclusive eu a não muito tempo atrás, acredita que a única maneira de fazer esse intercambio é através de XML. Mas não é bem assim. Existe o JSON.
O JSON é um formato leve para [...]]]></description>
			<content:encoded><![CDATA[<p>Muitas vezes nos deparamos com a necessidade de intercambiar dados entre páginas, servidores ou até mesmo domiínios. A maioria de nós, inclusive eu a não muito tempo atrás, acredita que a única maneira de fazer esse intercambio é através de XML. Mas não é bem assim. Existe o JSON.</p>
<p>O JSON é um formato leve para intercambio de dados.</p>
<p><strong>Mas qual a vantagem em relação ao XML?</strong></p>
<p>Eu vejo três.</p>
<p>1ª &#8211; É bem mais leve de ser carregado do que um arquivo XML.</p>
<p>2ª &#8211; É mais fácil de se trabalhar</p>
<p>3ª &#8211; É Cross Browser*</p>
<blockquote><p>*Quando usamos XML nos deparamos com um problemão para parsear as informações, as regras de segurança dos browsers. No Firefox, por exemplo, não é possível parsear as informações provenientes de um XML que esteja em um servidor diferente da aplicação, ou seja, se sua aplicação estiver hospedada em www.aqui.com.br, o Firefox só permitirá que você parseie um XML se ele estiver em, por exempo, www.aqui.com.com/esse.xml, agora se estiver, por exemplo em www.outro.com.br/esse.xml, as regras de segurança bloquearão sua aplicação. (Não necessáriamente isso acontece nas linguagens Backend)</p></blockquote>
<p>Um vez explicado as vantagens do JSON, vamos ao formato.</p>
<pre>{"notas" : [
   {"nome":"João", "nota1":8, "nota2":6, "nota3":10 },
   {"nome":"Maria", "nota1":5, "nota2":9, "nota3":8 },
   {"nome":"Pedro", "nota1":2, "nota2":7, "nota3":5 }
]};</pre>
<p>No exemplo acima, temos um conjunto de dados chamado &#8220;notas&#8221; que tem as informações de três alunos, commo nome e notas.</p>
<p>Você pode ir hieranquizando as informaçõe da forma que melhor lhes convier.</p>
<p>Você encontra o JSON na maioria das APIs abertas da Internet, como as do Google, Facebook, Flickr, Twitter, etc.</p>
<p>Mas tudo isso não quer dizer que o XML seja inútil ou não deva ser usado. Cada caso e um caso. Existem casos web a for que se utilizam dos dois formato, outros disponibilizam os dois formatos (Twitter por exemplo)&#8230;</p>
<p>Mais informações em <a href="http://www.json.org/json-pt.html" target="_blank">http://www.json.org/json-pt.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.leandrogarcia.com/blog/json-javascript-object-notation/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Javascript: A diferença entre &quot;setTimeout&quot; e &quot;setInterval&quot;</title>
		<link>http://www.leandrogarcia.com/blog/settimeout-e-setinterval/</link>
		<comments>http://www.leandrogarcia.com/blog/settimeout-e-setinterval/#comments</comments>
		<pubDate>Tue, 26 Jan 2010 17:27:45 +0000</pubDate>
		<dc:creator>leandro garcia</dc:creator>
				<category><![CDATA[Descategorizado]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[setinterval]]></category>
		<category><![CDATA[settimeout]]></category>
		<category><![CDATA[tempo]]></category>

		<guid isPermaLink="false">http://www.leandrogarcia.com/blog/?p=203</guid>
		<description><![CDATA[Salve!
Em javascript há duas funções bem interessantes para se trabalhar com tempo a setTimeout e a setInterval.
Nos dois casos você diz ao navegador para executar determinado código dentro de determinado tempo, ou seja, você pode dizer ao browser para executar a função alert, por exemplo, daqui a 5 segundos.
Mas qual é a diferença??
A diferença é [...]]]></description>
			<content:encoded><![CDATA[<p>Salve!</p>
<p>Em javascript há duas funções bem interessantes para se trabalhar com tempo a setTimeout e a setInterval.</p>
<p>Nos dois casos você diz ao navegador para executar determinado código dentro de determinado tempo, ou seja, você pode dizer ao browser para executar a função alert, por exemplo, daqui a 5 segundos.</p>
<p>Mas qual é a diferença??</p>
<p>A diferença é que a &#8220;setTimeout&#8221; é executada uma vez e a setInterval é executada de tantos em tantos segundos.</p>
<p>na Prática.</p>
<pre class="brush: jscript; title: ; notranslate">
/*Acionado uma vez. Em 10 segundo à partir da chamada da função*/
setTimeout(alert(&quot;alerta&quot;),10000);
</pre>
<pre class="brush: jscript; title: ; notranslate">
/*Acionado sempre, a cada 10 segundos*/
setInterval(alert(&quot;alerta&quot;),10000);
</pre>
<p>Para mim, é muito útil&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.leandrogarcia.com/blog/settimeout-e-setinterval/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Função Trim em Javascript</title>
		<link>http://www.leandrogarcia.com/blog/funcao-trim-em-javascript/</link>
		<comments>http://www.leandrogarcia.com/blog/funcao-trim-em-javascript/#comments</comments>
		<pubDate>Wed, 06 Jan 2010 20:02:57 +0000</pubDate>
		<dc:creator>leandro garcia</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[função]]></category>
		<category><![CDATA[Java Script]]></category>

		<guid isPermaLink="false">http://www.leandrogarcia.com/blog/?p=201</guid>
		<description><![CDATA[Se tem uma função básica em quase todas as linguagens de programação e extremamente util é a &#8220;trim&#8221;.
Pra quem não sabe, a função trim serve para retirar os espaços antes e depois de uma string. Algom mais ou menos assim:
Antes:
&#8221;     Olá Mundo      &#8221;
Depois do uso do [...]]]></description>
			<content:encoded><![CDATA[<p>Se tem uma função básica em quase todas as linguagens de programação e extremamente util é a &#8220;trim&#8221;.</p>
<p>Pra quem não sabe, a função trim serve para retirar os espaços antes e depois de uma string. Algom mais ou menos assim:</p>
<blockquote><p>Antes:<br />
&#8221;     Olá Mundo      &#8221;</p>
<p>Depois do uso do trim</p>
<p>&#8220;Olá Mundo&#8221;
</p></blockquote>
<p>Mas, sempre tem um mas&#8230;. Em Javascript não tem, pelo menos não nativa. Você deve criar uma.</p>
<p>Há algum tempo atrás eu encontrei uma na internet que usa expressões regulares para retirar esses espaços. Não sei quem a criou, mas se souberem me avisem para que eu possa colocar os créditos por ela.</p>
<p>Vamos à função. Bem simples.</p>
<pre class="brush: jscript; title: ; notranslate">function Trim(str){return str.replace(/^\s+|\s+$/g,&quot;&quot;);}</pre>
<p>Depois é só usar.</p>
<pre class="brush: jscript; title: ; notranslate">
//Exemplo
var string = &quot;   Tem espaço antes e Depois     &quot;;

alert(Trim(string));
</pre>
<p>Testem. Usem. Usufruam.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.leandrogarcia.com/blog/funcao-trim-em-javascript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Contagem regressiva em Javascript</title>
		<link>http://www.leandrogarcia.com/blog/contagem-regressiva-em-javascript/</link>
		<comments>http://www.leandrogarcia.com/blog/contagem-regressiva-em-javascript/#comments</comments>
		<pubDate>Tue, 14 Jul 2009 21:06:01 +0000</pubDate>
		<dc:creator>leandro garcia</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[contador]]></category>

		<guid isPermaLink="false">http://www.leandrogarcia.com/blog/?p=83</guid>
		<description><![CDATA[Tempos atrás, no decorrer do desenvolvimento de um sistema web, o cliente solicitou que houvesse um contador regressivo de quanto tempo faltava para que o sistema efetuasse determinada ação.
Depois de quebrar a cabeça cheguei até o script abaixo
Agora para chamar na sua página, pode-se chamar de duas maneiras:
OU
Eu prefiro utiliza a maneira acima utilizando o [...]]]></description>
			<content:encoded><![CDATA[<p>Tempos atrás, no decorrer do desenvolvimento de um sistema web, o cliente solicitou que houvesse um contador regressivo de quanto tempo faltava para que o sistema efetuasse determinada ação.</p>
<p>Depois de quebrar a cabeça cheguei até o script abaixo</p>
<pre class="brush: jscript; title: ; notranslate">
function atualizaContador(YY,MM,DD,HH,MI,saida) {
var SS = 00; //Segundos
var hoje = new Date(); //Dia
var futuro = new Date(YY,MM-1,DD,HH,MI,SS); //Data limite do contador

var ss = parseInt((futuro - hoje) / 1000); //Determina a quantidade total de segundos que faltam
var mm = parseInt(ss / 60); //Determina a quantidade total de minutos que faltam
var hh = parseInt(mm / 60); //Determina a quantidade total de horas que faltam
var dd = parseInt(hh / 24); //Determina a quantidade total de dias que faltam

ss = ss - (mm * 60); //Determina a quantidade de segundos
mm = mm - (hh * 60); //Determina a quantidade de minutos
hh = hh - (dd * 24); //Determina a quantidade de horas

//O bloco abaixo descreve monta o que vai ser escrito na tela
var faltam = '';
faltam += (dd &amp;&amp; dd &gt; 1) ? dd+' dias, ' : (dd==1 ? '1 dia, ' : '');
faltam += (toString(hh).length) ? hh+':' : '';
faltam += (toString(mm).length) ? mm+':' : '';
faltam += ss;

if (dd+hh+mm+ss &gt; 0) {
document.getElementById(saida).innerHTML = faltam;//INsere o conteudo da variável faltam na página.
setTimeout(function(){atualizaContador(YY,MM,DD,HH,MI,saida)},1000);//Reinicia a função a cada um segundo
} else {
document.getElementById(saida).innerHTML = '';
setTimeout(function(){atualizaContador(YY,MM,DD,HH,MI,saida)},1000);
}
}
</pre>
<p>Agora para chamar na sua página, pode-se chamar de duas maneiras:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;body onload=&quot;atualizaContador('2009','07','14','23','00','00','elementodedestino')&quot;&gt;
</pre>
<p>OU</p>
<pre class="brush: xml; title: ; notranslate">
&lt;script type=&quot;text/javascript&quot;&gt;window.onload=function(){
atualizaContador('2009','07','14','23','00','00','elementodedestino');
}&lt;/script&gt;
</pre>
<p>Eu prefiro utiliza a maneira acima utilizando o window.onload, pois acredito que torna a página mais arrumada e, ainda, podemos colocar no final da página, melhorando o carregamento da página.</p>
<p>Espero que seja util para vocês.</p>
<p><a href="http://tutoriais.leandrogarcia.com/contagemregressiva/contagemregressiva.html">link</a></p>
<p><a href="http://tutoriais.leandrogarcia.com/contagemregressiva/contagemregressiva.zip">Download</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.leandrogarcia.com/blog/contagem-regressiva-em-javascript/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
		</item>
		<item>
		<title>Offset, descobrindo o posicionamento absoluto de um elemento</title>
		<link>http://www.leandrogarcia.com/blog/offset-descobrindo-o-posicionamento-absoluto-de-um-elemento/</link>
		<comments>http://www.leandrogarcia.com/blog/offset-descobrindo-o-posicionamento-absoluto-de-um-elemento/#comments</comments>
		<pubDate>Tue, 03 Mar 2009 17:23:38 +0000</pubDate>
		<dc:creator>leandro garcia</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Absolute]]></category>
		<category><![CDATA[Absoluto]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[Java Script]]></category>
		<category><![CDATA[Offset]]></category>
		<category><![CDATA[Posicionamento]]></category>

		<guid isPermaLink="false">http://www.leandrogarcia.com/blog/?p=77</guid>
		<description><![CDATA[Anteriormente escrevi sobre maneiras de otimizar o carregamento das páginas.
Umas destas maneiras, é colocar todas as chamadas de scripts na parte de baixo da página, mas aí tem um problema. Aqui na empresa as publicidades são dinamicas e exibidas através de script, logo, para eu exibir um superbanner na posição correta, eu deveria chamar o [...]]]></description>
			<content:encoded><![CDATA[<p>Anteriormente escrevi sobre maneiras de otimizar o carregamento das páginas.</p>
<p>Umas destas maneiras, é colocar todas as chamadas de scripts na parte de baixo da página, mas aí tem um problema. Aqui na empresa as publicidades são dinamicas e exibidas através de script, logo, para eu exibir um superbanner na posição correta, eu deveria chamar o JS externo no head da página, mas é oposto ao que devemos práticar aqui.</p>
<p>Alguns de você dirão, basta que você coloque um posicionamento reletivo(relative) na div container e coloque a publicidade na parte do código e posicione a div com a publicidade em absoluto(absolute).</p>
<p>Isso funciona, desde que a publicidade seja sempre no mesmo local, mas se a publicidade é um island, por exemplo que é no meio do conteúdo, o que fazer?</p>
<p>É aí que surge o Offset da página.</p>
<p>Com o Offse, Você consegue descobrir onde exatamente, em Pixels, está o elemebto que você quer encontrar.</p>
<p>Por exemplo. Eu tenho um campo de busca e quero ao clicar nele, abrir um suggest, é com o Offset.</p>
<p>Ou no caso do Banner, como eu fiz:</p>
<p>Criei uma div com o <strong>id bannerposicao </strong>nessa div eu joguei o tamanho do banner (height:240px;width:120px). Com isso eu criei um espaço vazio que eu posso preencher porexemplo com o endereço da central de relacionamentos (bom para efeito de SEO).</p>
<p>No final do código eu criei uma outra div com o <strong>id banner </strong>e joguei (via CSS) o tamanho da publicidade (height:240px;width:120px) e a posicionei como absoluto (position:absolute).</p>
<p>Depois disso, eu usei a função abaixo para posicionar a publicidade no lugar dela.</p>
<p><strong>HTML</strong></p>
<pre class="brush: xml; title: ; notranslate">
&lt;div id=&quot;bannerposicao&quot;&gt; &lt;a href=&quot;http://www.leandrogarcia.com/blog&quot;&gt; Blog do Garcia &lt;/a&gt; &lt;/div&gt;
&lt;br class=&quot;clear&quot; /&gt;
&lt;div id=&quot;corpo&quot;&gt;Corpo&lt;/div&gt;
Aqui abaixo esta o banner
&lt;div id=&quot;banner&quot;&gt; &lt;img src=&quot;http://www.leandrogarcia.com/blog/wp-content/uploads/2009/03/puboffset.gif&quot; alt=&quot;publicidade&quot; /&gt; &lt;/div&gt;
&lt;br class=&quot;clear&quot; /&gt;
&lt;button onclick=&quot;alert(document.getElementById('bannerposicao').offsetHeight);&quot;&gt; offsetHeight &lt;/button&gt;
&lt;button onclick=&quot;alert(document.getElementById('bannerposicao').offsetWidth);&quot;&gt; offsetWidth &lt;/button&gt;
&lt;button onclick=&quot;alert(document.getElementById('bannerposicao').offsetLeft);&quot;&gt; offsetLeft &lt;/button&gt;
&lt;button onclick=&quot;alert(document.getElementById('bannerposicao').offsetTop);&quot;&gt; offsetTop &lt;/button&gt;
</pre>
<p><strong>CSS</strong></p>
<pre class="brush: css; title: ; notranslate">
#bannerposicao{float:left; width:120px; height:240px; background:#ccc}
#banner{display:block; position:absolute; width:120px; height:240px; background:#ccc}
#corpo{clear:both; height:400px}
</pre>
<p><strong>JS</strong></p>
<pre class="brush: jscript; title: ; notranslate">
function exibepublicidade(){
var $arg = document.getElementById('bannerposicao'); //Essa linha pega os dados da div
var $curTop=0,$curLeft=0,$curWidth=0; // Essa, cria as variáveis de largura, left e top
if($arg.offsetParent) {
do {
$curLeft += $arg.offsetLeft;
$curTop += $arg.offsetTop;
}while($arg = $arg.offsetParent)
} //O if acima, pega a posição da Div em relação à janela
var $posicao = document.getElementById('banner');
$posicao.style.top = $curTop + &quot;px&quot;;
$posicao.style.left = $curLeft + &quot;px&quot;;
}
exibepublicidade();
</pre>
<p>Com o Offset conseguimos pegar a Altura, a Largua a Posição Left e Top do elemento.</p>
<p>Altura (offsetHeight), Largura (offsetWidth), Left (offsetLeft) e Top(offsetTop);</p>
<p><a title="Offset" href="http://tutoriais.leandrogarcia.com/offset/offset.html" target="_blank">Veja o exemplo</a></p>
<p><a href="http://tutoriais.leandrogarcia.com/offset/offset.zip" target="_blank">Download</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.leandrogarcia.com/blog/offset-descobrindo-o-posicionamento-absoluto-de-um-elemento/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Yslow (Porque está devagar) &#8211; Como medir performance de carregamento das páginas&#8230;</title>
		<link>http://www.leandrogarcia.com/blog/yslow-porque-esta-devagar-como-medir-performance-de-carregamento-das-paginas/</link>
		<comments>http://www.leandrogarcia.com/blog/yslow-porque-esta-devagar-como-medir-performance-de-carregamento-das-paginas/#comments</comments>
		<pubDate>Thu, 29 Jan 2009 19:43:36 +0000</pubDate>
		<dc:creator>leandro garcia</dc:creator>
				<category><![CDATA[Complementos do Firefox]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Praticas]]></category>
		<category><![CDATA[css sprites]]></category>
		<category><![CDATA[redução de peso]]></category>
		<category><![CDATA[redução do tamanho]]></category>

		<guid isPermaLink="false">http://www.leandrogarcia.com/blog/?p=75</guid>
		<description><![CDATA[Volto eu aqui para escrever sobre performance de websites.
No mundo atual, as pessoas tem cada vez menos tempo e paciência para esperar por alguma coisa, muito menos se o que devem esperar é uma página ser carregada. Motivo este pelo qual nós, desenvolvedores para internet, devemos pensar na praticidade e velocidade que a página é [...]]]></description>
			<content:encoded><![CDATA[<p>Volto eu aqui para escrever sobre performance de websites.</p>
<p>No mundo atual, as pessoas tem cada vez menos tempo e paciência para esperar por alguma coisa, muito menos se o que devem esperar é uma página ser carregada. Motivo este pelo qual nós, desenvolvedores para internet, devemos pensar na praticidade e velocidade que a página é carregada pelo usuário.</p>
<p>Existem algumas práticas que podem fazer com que seu código mais rapidamente carregado:</p>
<p><strong>Diminua a quantidade de requisições http.</strong></p>
<p>Em cada requisição que um site faz ao servidor, seja qual for (CSS, JS, Imaem, etc), há um trafego de informações, ou seja, sua página envia uma requisição e depois recebe a resposta do servidor, quanto menos requisições você fizer, menor será esse trafego, logo, mais rápido seu site carregará;</p>
<p>Você pode diminuir a rquisição de imagens background através de CSS sprites, já expliquei como fazê-los <a title="CSS Sprites" href="http://www.leandrogarcia.com/blog/css-sprites-a-arte-de-posicionar-imagens/" target="_blank">neste post</a>.</p>
<p>Utilizar o menor número possível de arquivos CSSs, O ideal é usar apenas um, eventualmente um segundo, mas evitar o terceiro, o quarto a todo custo.</p>
<p>Se possível utilizar apenas um arquivo JS.</p>
<p><strong>Cachear a página ou Header Expires</strong></p>
<p>A inconveniência deste é que ele é server-side, ou seja, é feita através do servidor, mas serve para guardar na memória do usuário os arquivos das páginas que ele visitou, ou seja, um re-acesso ao site seria bem mais rápido.</p>
<p><strong>Compressão de componentes (Gzip Components)</strong></p>
<p>Esta é uma outra técnica de redução server-side. Com ela, o servidor entende que deve comprimir (ou &#8220;zipar&#8221;) os código, os CSSs os JSs e, inclusive o HTML.</p>
<p><strong>Colocar as folhas de estilo no Header</strong></p>
<p>Uma outra maneira eficaz de ganhar tempo no carregamento das páginas é, além de usar uma única folha de estilos, chamá-la de um arquivo externo e através da tag link posicionada dentro do header</p>
<p><strong>Colocar os Scripts na parte inferior<br />
</strong></p>
<p>O ideal é colocar os scripts logo antes da tag &lt;/body&gt;, pois desta a página é carregada mais rapidamente. Quando o script está no header, a página primeiro carrega o script depois as demais informações, agora quando esle está posicionado abaixo, a página tem toda a informação carregado e só após isso os scripts são carregados.</p>
<p><strong>Evite expressões em CSSs</strong></p>
<p>Embora existam, as expressões em CSS não são a maneira mais eficaz de criar o seu layout, pois exigem demasiado tempo para serem entendidas pelos navegadores.</p>
<pre><em>ex. background-color: expression( (new Date()).getHours()%2 ? "#B8D4FF" : "#F08A00" );</em></pre>
<p><strong>Folhas de Estilo (CSS) e Scripts (JS) externo</strong></p>
<p>Evite colocar estilos e scripts em qualquer lugar no HTML, prefira sempre chama-los através de um arquivo externo. CSSs e JSs, são geralmente caheados pelo browser, o que significa que em uma próxima vista o usuário já terá esses arquivos preveamente carregados.</p>
<p><strong>Otimize seus CSSs e JSs.</strong></p>
<p>Quanto menor for seus códigos, menor tamanho eles terão, logo, mais rápido serão carregado.</p>
<p><a title="Redução do peso nas páginas" href="http://www.leandrogarcia.com/blog/a-importancia-da-reducao-do-peso-das-paginas-e-afins/" target="_blank">Neste link</a>, eu escrevi como se pode otimizar os códigos CSSs</p>
<p><strong>Evite redirecionamentos</strong></p>
<p>Evite ao máximo que suas páginas redirecionem para uma outra, pois desta maneira seu usuário terá que carregar duas ou mais páginas ao invés de uma.</p>
<p><strong>Remova scripts duplicados</strong></p>
<p>Remova todos os scripts duplicados, afinal, não há a necessidade de se carregar duas vezes a mesma coisa.</p>
<p><strong>Reduza o número de DOMs</strong></p>
<p>Reduza ao máximo as &#8220;firulas&#8221; via DOM do seu código.</p>
<p><strong>Iframes</strong></p>
<p>Se necesário for utilizá-los, utilize o menos possível, pois um ifram,e é uma outra página a ser carregada.</p>
<p><strong>Escolha &lt;link&gt; ao invés de @import</strong></p>
<p>Há duas maneiras de se carregar uma folha de estilo externa, através das tags &lt;link&gt; e @import. Prefira sempre a &lt;link&gt;, pois o @import se comporta da mesma maneira como se você colocasse o &lt;link&gt; lá embaixo.</p>
<p>E tem várias outras maneiras.</p>
<p>O Yahoo, disponibiliza um link onde eles explicam maneiras de se melhorar a performance. Além dessas que eu listei acima, há algumas outras. O line é <a href="http://developer.yahoo.com/performance/rules.html" target="_blank">este</a>.</p>
<p><strong>Como verificar como está  o carregamento de meu site?</strong></p>
<p>Não sei dizer quantas maneiras há para se fazer isso, a única que eu conheço, e acredito que a mais eficaz, é o <strong>YSLOW</strong> (Uái islou)  (Porque está devagar).</p>
<p>O YSLOW, é um complemento para o Firefox que pode ser encontrado <a title="YSLOW" href="https://addons.mozilla.org/pt-BR/firefox/addon/5369" target="_blank">neste link</a>.</p>
<p>No Próximo Post eu vou explicar como funciona o Yslow.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.leandrogarcia.com/blog/yslow-porque-esta-devagar-como-medir-performance-de-carregamento-das-paginas/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

