<?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>Mundo Geek &#187; web</title>
	<atom:link href="http://mundogeek.net/etiqueta/web/feed/" rel="self" type="application/rss+xml" />
	<link>http://mundogeek.net</link>
	<description>Mundo geek, bitácora sobre todo lo geek: software, gadgets, tecnología, internet, ...</description>
	<lastBuildDate>Fri, 25 May 2012 14:51:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Cómo desactivar la inspección de elementos nativa de Firefox</title>
		<link>http://mundogeek.net/archivos/2012/03/26/como-desactivar-la-inspeccion-de-elementos-nativa-de-firefox/</link>
		<comments>http://mundogeek.net/archivos/2012/03/26/como-desactivar-la-inspeccion-de-elementos-nativa-de-firefox/#comments</comments>
		<pubDate>Mon, 26 Mar 2012 15:32:13 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[firebug]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://mundogeek.net/?p=7761</guid>
		<description><![CDATA[Desde hace ya un tiempo Firefox viene incorporando una serie de herramientas destinadas a ayudar a los desarrolladores web que, aunque no son terriblemente malas, si son sensiblemente inferiores a otras alternativas como Firebug. Al menos por ahora. Es particularmente desesperante el intentar inspeccionar un elemento de una página web utilizando Firebug (menú contextual &#8220;Inspeccionar [...]]]></description>
			<content:encoded><![CDATA[<p>Desde hace ya un tiempo Firefox viene incorporando una serie de herramientas destinadas a ayudar a los desarrolladores web que, aunque no son terriblemente malas, si son sensiblemente inferiores a otras alternativas como <a href="https://addons.mozilla.org/es-es/firefox/addon/firebug/" title="Firebug para Firefox">Firebug</a>. Al menos por ahora.</p>
<p>Es particularmente desesperante el intentar inspeccionar un elemento de una página web utilizando Firebug (menú contextual &#8220;Inspeccionar elemento con Firebug&#8221;) y acabar seleccionando por error la herramienta nativa del navegador (menú contextual &#8220;Inspeccionar elemento&#8221;). Si a ti también te ha ocurrido, porque es posible que, simplemente, yo sea demasiado caprichoso y peculiar, puedes configurar el que este menú no se vuelva a mostrar escribiendo en la barra de direcciones about:config, buscando la preferencia devtools.inspector.enabled y cambiando su valor a false.</p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2012/03/26/como-desactivar-la-inspeccion-de-elementos-nativa-de-firefox/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>¿Qué escribe la gente en la barra de direcciones?</title>
		<link>http://mundogeek.net/archivos/2011/07/25/que-escribe-la-gente-en-la-barra-de-direcciones/</link>
		<comments>http://mundogeek.net/archivos/2011/07/25/que-escribe-la-gente-en-la-barra-de-direcciones/#comments</comments>
		<pubDate>Mon, 25 Jul 2011 15:48:01 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[direcciones]]></category>
		<category><![CDATA[firefox]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[navegadores]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://mundogeek.net/?p=7118</guid>
		<description><![CDATA[Christopher Finke es el autor de URL Fixer, una popular extensión para Firefox que ayuda a los que somos torpes escribiendo corrigiendo los errores tipográficos en las URL. Basándose en los datos recopilados por su extensión, nos trae un top 10 de los dominios que más suele escribir la gente en la barra de direcciones, [...]]]></description>
			<content:encoded><![CDATA[<p>Christopher Finke es el autor de <a href="https://addons.mozilla.org/en-US/firefox/addon/url-fixer/">URL Fixer</a>, una popular extensión para Firefox que ayuda a los que somos torpes escribiendo corrigiendo los errores tipográficos en las URL. Basándose en los datos recopilados por su extensión, nos trae un top 10 de los <a href="http://www.chrisfinke.com/2011/07/25/what-do-people-type-in-the-address-bar/">dominios que más suele escribir la gente</a> en la barra de direcciones, dominios que suponen un 20% de las direcciones introducidas.</p>
<p>¿Cuántas eres capaz de adivinar?<span id="more-7118"></span></p>
<ol>
<li>facebook.com (9%)</li>
<li>google.com (3,3%)</li>
<li>youtube.com (3,3%)</li>
<li>gmail.com (1,1%)</li>
<li>twitter.com (1,1%)</li>
<li>mail.google.com (0,6%)</li>
<li>yahoo.com (0,6%)</li>
<li>hotmail.com (0,6%)</li>
<li>amazon.com (0,5%)</li>
<li>reddit.com (0,5%)</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2011/07/25/que-escribe-la-gente-en-la-barra-de-direcciones/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Doom en tu navegador</title>
		<link>http://mundogeek.net/archivos/2011/06/02/doom-en-tu-navegador/</link>
		<comments>http://mundogeek.net/archivos/2011/06/02/doom-en-tu-navegador/#comments</comments>
		<pubDate>Thu, 02 Jun 2011 15:27:32 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[doom]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Juegos]]></category>
		<category><![CDATA[navegadores]]></category>
		<category><![CDATA[quake]]></category>
		<category><![CDATA[red]]></category>
		<category><![CDATA[videojuegos]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://mundogeek.net/?p=6859</guid>
		<description><![CDATA[Atrás quedaron los tiempos en los que JavaScript se consideraba un lenguaje de programación de juguete y lo más excitante que podía ofrecernos HTML era la perversa etiqueta blink. Lo demostró Google el año pasado con su implementación de Quake II usando WebGL, por ejemplo, y lo vuelve a hacer hoy Mozilla compilando el código [...]]]></description>
			<content:encoded><![CDATA[<p>Atrás quedaron los tiempos en los que <a href="http://mundogeek.net/tutorial_de_javascript/" title="Tutorial de JavaScript">JavaScript</a> se consideraba un lenguaje de programación de juguete y lo más excitante que podía ofrecernos <a href="http://mundogeek.net/archivos/2010/02/26/tutorial-rapido-de-html-xhtml/" title="Tutorial de HTML">HTML</a> era la perversa etiqueta <code>blink</code>.</p>
<p>Lo demostró Google el año pasado con su implementación de <a href="http://code.google.com/p/quake2-gwt-port/" title="Quake II para navegadores">Quake II usando WebGL</a>, por ejemplo, y lo vuelve a hacer hoy Mozilla compilando el código original de Doom a JavaScript para que podamos <a href="https://developer.mozilla.org/es/demos/detail/doom-on-the-web/launch" title="Doom en el navegador">jugar en nuestro navegador</a>. <span id="more-6859"></span></p>
<div style="text-align:center"><img src="http://mundogeek.net/wp-content/doom-navegador.jpg" alt="Doom corriendo en Firefox"/></div>
<p>Merece la pena echar una partida y rememorar viejos tiempos mientras sopesamos qué sorpresas nos deparará el futuro de la web.</p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2011/06/02/doom-en-tu-navegador/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>jQuery 1.5</title>
		<link>http://mundogeek.net/archivos/2011/02/01/jquery-1-5/</link>
		<comments>http://mundogeek.net/archivos/2011/02/01/jquery-1-5/#comments</comments>
		<pubDate>Tue, 01 Feb 2011 17:21:51 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[Linklog]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[programacion]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://mundogeek.net/?p=6349</guid>
		<description><![CDATA[jQuery 1.5 ya está disponible. ¿Necesitas ayuda para empezar con esta fantástica librería? Echa un vistazo a mi tutorial rápido de jQuery.]]></description>
			<content:encoded><![CDATA[<p>jQuery 1.5 <a href="http://blog.jquery.com/2011/01/31/jquery-15-released/">ya está disponible</a>. ¿Necesitas ayuda para empezar con esta fantástica librería? Echa un vistazo a mi <a href="http://mundogeek.net/archivos/2010/04/21/tutorial-rapido-de-jquery/" title="Tutorial de jQuery">tutorial rápido de jQuery</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2011/02/01/jquery-1-5/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Grafikart: un tema oscuro para NetBeans</title>
		<link>http://mundogeek.net/archivos/2010/12/11/grafikart-un-tema-oscuro-para-netbeans/</link>
		<comments>http://mundogeek.net/archivos/2010/12/11/grafikart-un-tema-oscuro-para-netbeans/#comments</comments>
		<pubDate>Sat, 11 Dec 2010 11:40:10 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[colores]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[ide]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[netbeans]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programacion]]></category>
		<category><![CDATA[resaltado]]></category>
		<category><![CDATA[sintaxis]]></category>
		<category><![CDATA[tema]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://mundogeek.net/?p=6209</guid>
		<description><![CDATA[Contestando a algunos lectores que me preguntaron por el tema utilizado en Code folding personalizado en NetBeans os dejo el enlace desde donde podréis descargar Grafikart, un tema oscuro para NetBeans especialmente pensado para PHP, XHTML, JavaScript, CSS y SQL (requiere registro, y está en francés): Ressource Netbeans, Thème Grafikart]]></description>
			<content:encoded><![CDATA[<p>Contestando a algunos lectores que me preguntaron por el tema utilizado en <a href="http://mundogeek.net/archivos/2010/12/02/code-folding-personalizado-en-netbeans/">Code folding personalizado en NetBeans</a> os dejo el enlace desde donde podréis descargar Grafikart, un tema oscuro para NetBeans especialmente pensado para PHP, XHTML, JavaScript, CSS y SQL (requiere registro, y está en francés): <a href="http://www.grafikart.fr/ressources/theme-netbeans-10">Ressource Netbeans, Thème Grafikart</a></p>
<div style="text-align:center"><img src="http://mundogeek.net/wp-content/tema-netbeans-grafikart.png" alt="Tema para NetBeans Grafikart"/></div>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2010/12/11/grafikart-un-tema-oscuro-para-netbeans/feed/</wfw:commentRss>
		<slash:comments>17</slash:comments>
		</item>
		<item>
		<title>Frameworks PHP</title>
		<link>http://mundogeek.net/archivos/2010/10/30/frameworks-php/</link>
		<comments>http://mundogeek.net/archivos/2010/10/30/frameworks-php/#comments</comments>
		<pubDate>Sat, 30 Oct 2010 10:12:12 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[cakephp]]></category>
		<category><![CDATA[codeigniter]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[frameworks]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[programacion]]></category>
		<category><![CDATA[symfony]]></category>
		<category><![CDATA[web]]></category>
		<category><![CDATA[zend]]></category>

		<guid isPermaLink="false">http://mundogeek.net/?p=6066</guid>
		<description><![CDATA[Respondiendo a una pregunta formulada por nuestro lector &#8220;Programador Java&#8221;, os dejo unas cuantas líneas con MI opinión sobre algunos de los frameworks para desarollo de aplicaciones web con PHP más populares de la actualidad. Y para ti, ¿cuál es el mejor framework PHP? Zend Framework Probablemente, el framework más conocido, y el más utilizado [...]]]></description>
			<content:encoded><![CDATA[<p>Respondiendo a una pregunta <a href="http://mundogeek.net/contacto/" title="Puedes enviarme sugerencias, comentarios o preguntas utilizando el formulario de contacto">formulada</a> por nuestro lector &#8220;Programador Java&#8221;, os dejo unas cuantas líneas con MI opinión sobre algunos de los frameworks para desarollo de aplicaciones web con PHP más populares de la actualidad. Y para ti, ¿cuál es el mejor <strong>framework PHP</strong>?<span id="more-6066"></span></p>
<h2><a href="http://framework.zend.com/" title="Framework PHP Zend Framework">Zend Framework</a></h2>
<div style="text-align:center"><img src="http://mundogeek.net/wp-content/zend-framework.png" alt="Logo del framework PHP Zend Framework"/></div>
<ul>
<li>Probablemente, el framework más conocido, y el más utilizado profesionalmente.</li>
<li>Es muy desacoplado, por lo que mucha gente lo considera una librería de componentes más que un framework. Por otra parte, gracias a esto, podemos utilizarlo en conjunto con otros frameworks.</li>
<li>Tiene detrás a Zend, una de las empresas más importantes de la comunidad PHP, y gran contribuidora a su código desde sus primeras versiones.</li>
<li>Siempre ha habido quejas sobre su curva de aprendizaje y el tiempo necesario para comenzar un nuevo proyecto, aunque eso mejoró un poco con los componentes RAD (Rapid Application Development).</li>
<li>Recomendado para proyectos grandes.</li>
</ul>
<h2><a href="http://www.symfony-project.org/" title="Framework PHP Symfony">Symfony</a></h2>
<div style="text-align:center"><img src="http://mundogeek.net/wp-content/symfony.png" alt="Logo del framework PHP Symfony"/></div>
<ul>
<li>El framework que suele utilizar Yahoo, por ejemplo. Bastante popular hoy en día.</li>
<li>Más complejo y elegante que CakePHP y CodeIgniter, pero menos que Zend.</li>
<li>Muy completo.</li>
<li>El &#8220;azúcar sintáctico&#8221; y la generación de código ayuda a recortar el tiempo de desarrollo.</li>
<li>Recomendado para cualquier tipo de proyecto, en ocasiones combinado con algún componente de Zend.</li>
</ul>
<h2><a href="http://cakephp.org/" title="Framework PHP CakePHP">CakePHP</a></h2>
<div style="text-align:center"><img src="http://mundogeek.net/wp-content/cakephp.png" alt="Logo del framework PHP CakePHP"/></div>
<ul>
<li>Toma muchas de sus ideas de Ruby on Rails, por lo que gustará especialmente a los fans de la autoconfiguración y de lo &#8220;mágico&#8221;. Debido a esto, no es lo más adecuado para aquellos que quieran tener un mayor control.</li>
<li>En su tiempo tenía fama de tener muy mala documentación. Hoy en día eso ha cambiado.</li>
<li>Recomendado para proyectos no demasiado complejos, en ocasiones combinado con algún componente de Zend.</li>
</ul>
<h2><a href="http://codeigniter.com/" title="Framework PHP CodeIgniter">CodeIgniter</a></h2>
<div style="text-align:center"><img src="http://mundogeek.net/wp-content/codeigniter.png" alt="Logo del framework PHP CodeIgniter"/></div>
<ul>
<li>Probablemente, el menos popular de los cuatro.</li>
<li>Muy flexible y sencillo. A menudo demasiado, obligando al programador a desarrollar muchas funcionalidades que deberían incluirse por defecto.</li>
<li>Muy fácil de aprender, principalmente porque no hay mucho que aprender, al ser simple hasta el extremo.</li>
<li>También es el que menos recursos utiliza, al ser el más ligero.</li>
<li>Está escrito para mantener la compatibilidad con PHP 4, por lo que no aprovecha muchas de las características introducidas en PHP 5. Debido a esta y a otras razones muchos de sus desarrolladores se desvincularon del proyecto para crear un fork llamado <a href="http://www.kohanaphp.com/" title="Framework PHP Kohana">Kohana</a>.</li>
<li>Sólo recomendable como framework de iniciación, si el resto intimidan demasiado; o para aquellos a los que realmente no les gusten los frameworks.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2010/10/30/frameworks-php/feed/</wfw:commentRss>
		<slash:comments>77</slash:comments>
		</item>
		<item>
		<title>Invitaciones para BuyVip</title>
		<link>http://mundogeek.net/archivos/2010/10/01/invitaciones-para-buyvip/</link>
		<comments>http://mundogeek.net/archivos/2010/10/01/invitaciones-para-buyvip/#comments</comments>
		<pubDate>Fri, 01 Oct 2010 16:34:06 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[Linklog]]></category>
		<category><![CDATA[buyvip]]></category>
		<category><![CDATA[compras]]></category>
		<category><![CDATA[internet]]></category>
		<category><![CDATA[invitacion]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://mundogeek.net/?p=5987</guid>
		<description><![CDATA[Mientras se confirma la llegada de Amazon a España a través de BuyVip, puedes echar un vistazo a este club de compras privadas a través de esta invitación.]]></description>
			<content:encoded><![CDATA[<p>Mientras se confirma la <a href="http://mundogeek.net/archivos/2010/10/01/amazon-en-espana-de-la-mano-de-buyvip/" title="¿Amazon España?">llegada de Amazon a España</a> a través de BuyVip, puedes echar un vistazo a este club de compras privadas a través de <a href="http://es.buyvip.com/MemberInvitation.html?A02SGHZQ769814" title="Invitación a BuyVip">esta invitación</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2010/10/01/invitaciones-para-buyvip/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Los 10 mejores packs de iconos para tus aplicaciones web</title>
		<link>http://mundogeek.net/archivos/2010/06/30/los-10-mejores-packs-de-iconos-para-tus-aplicaciones-web/</link>
		<comments>http://mundogeek.net/archivos/2010/06/30/los-10-mejores-packs-de-iconos-para-tus-aplicaciones-web/#comments</comments>
		<pubDate>Wed, 30 Jun 2010 17:31:49 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[iconos]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://mundogeek.net/?p=5716</guid>
		<description><![CDATA[El diseño es uno de los puntos más importantes a tener en cuenta a la hora de desarrollar una aplicación: un aspecto descuidado o poco atractivo hará que muchos usuarios no lleguen a plantearse si quiera utilizar tu aplicación, pese a la ingente cantidad de horas que le habías dedicado, y a esas increíbles funciones [...]]]></description>
			<content:encoded><![CDATA[<p>El diseño es uno de los puntos más importantes a tener en cuenta a la hora de desarrollar una aplicación: un aspecto descuidado o poco atractivo hará que muchos usuarios no lleguen a plantearse si quiera utilizar tu aplicación, pese a la ingente cantidad de horas que le habías dedicado, y a esas increíbles funciones que habías implementado.</p>
<p>Ocurre, no obstante, que la mayoría de personas son / somos auténticos negados para todo lo que tenga que ver con el diseño. Pero no todo está perdido, porque en Internet hay decenas de almas caritativas que ofrecen su trabajo de manera gratuita. Veamos 10 de los mejores packs de iconos que pueden ayudarte a dar un mejor aspecto a tu aplicación. Y gratis.<span id="more-5716"></span></p>
<h2>Coquette</h2>
<p><a href="http://www.flickr.com/photos/mundogeek/4749589280/" title="Iconos Coquette"><img src="http://farm5.static.flickr.com/4074/4749589280_057047b732.jpg" width="500" height="289" alt="Iconos Coquette" /></a><br />
Descarga: <a href="http://dryicons.com/free-icons/preview/coquette-icons-set/">Coquette I</a>, <a href="http://dryicons.com/free-icons/preview/coquette-part-2-icons-set/">II</a>, <a href="http://dryicons.com/free-icons/preview/coquette-part-3-icons-set/">III</a>, <a href="http://dryicons.com/free-icons/preview/coquette-part-4-icons-set/">IV</a>, <a href="http://dryicons.com/free-icons/preview/coquette-part-5-icons-set/">V</a>, <a href="http://dryicons.com/free-icons/preview/coquette-part-6-icons-set/">VI</a>, <a href="http://dryicons.com/free-icons/preview/coquette-part-7-icons-set/">VII</a>, <a href="http://dryicons.com/free-icons/preview/coquette-part-8-icons-set/">VIII</a><br />
Número de iconos: 400 PNGs de 16&#215;16, 24&#215;24, 32&#215;32, 48&#215;48, 64&#215;64, 128&#215;128.<br />
Licencia: Gratuito con enlace a la web del autor.</p>
<h2>Colorful Stickers</h2>
<p><a href="http://www.flickr.com/photos/mundogeek/4749589508/" title="Iconos Colorful Stickers"><img src="http://farm5.static.flickr.com/4082/4749589508_a54d367a67.jpg" width="500" height="291" alt="Iconos Colorful Stickers" /></a><br />
Descarga: <a href="http://dryicons.com/free-icons/preview/colorful-stickers-icons-set/">Colorful Stickers</a>, <a href="http://dryicons.com/free-icons/preview/colorful-stickers-part-2-icons-set/">II</a>, <a href="http://dryicons.com/free-icons/preview/colorful-stickers-part-3-icons-set/">III</a>, <a href="http://dryicons.com/free-icons/preview/colorful-stickers-part-4-icons-set/">IV</a>, <a href="http://dryicons.com/free-icons/preview/colorful-stickers-part-5-icons-set/">V</a>, <a href="http://dryicons.com/free-icons/preview/colorful-stickers-part-6-icons-set/">VI</a><br />
Número de iconos: 120 PNGs de 16&#215;16, 24&#215;24, 32&#215;32, 48&#215;48, 64&#215;64, 128&#215;128, 256&#215;256.<br />
Licencia: Gratuito con enlace a la web del autor.</p>
<h2>Basic set</h2>
<p><a href="http://www.flickr.com/photos/mundogeek/4749589682/" title="Iconos Basic set"><img src="http://farm5.static.flickr.com/4100/4749589682_f623772ec0.jpg" width="500" height="285" alt="Iconos Basic set" /></a><br />
Descarga: <a href="http://pixel-mixer.com/basic_set/">Basic set</a>, <a href="http://pixel-mixer.com/basic-set-2/">II</a><br />
Número de iconos: 84 PNGs de 16&#215;16, 32&#215;32, 48&#215;48, 64&#215;64.<br />
Licencia: Gratuito con enlace a la web del autor</p>
<h2>Farm-Fresh</h2>
<p><a href="http://www.flickr.com/photos/mundogeek/4749589772/" title="Iconos Farm-Fresh"><img src="http://farm5.static.flickr.com/4135/4749589772_b4c22e55c8.jpg" width="500" height="125" alt="Iconos Farm-Fresh" /></a><br />
Descarga: <a href="http://www.fatcow.com/free-icons/">Farm-Fresh</a><br />
Número de iconos: 1400 PNGs de 16&#215;16, 32&#215;32.<br />
Licencia: Creative Commons Attribution 3.0</p>
<h2>Silk</h2>
<p><a href="http://www.flickr.com/photos/mundogeek/4749589828/" title="Iconos Silk"><img src="http://farm5.static.flickr.com/4102/4749589828_28d55fac89.jpg" width="470" height="102" alt="Iconos Silk" /></a><br />
Descarga: <a href="http://www.famfamfam.com/lab/icons/silk/">Silk</a>. Existe un pack de estilo similar llamado <a href="http://damieng.com/creative/icons/silk-companion-1-icons">Silk companion</a><br />
Número de iconos: 700 PNGs de 16&#215;16.<br />
Licencia: Creative Commons Attribution 2.5</p>
<h2>Tango</h2>
<p><a href="http://www.flickr.com/photos/mundogeek/4749589920/" title="Iconos Tango"><img src="http://farm5.static.flickr.com/4075/4749589920_bb1fb568fb.jpg" width="486" height="182" alt="Iconos Tango" /></a><br />
Descarga: <a href="http://tango.freedesktop.org/Tango_Icon_Library">Tango</a>. Muy populares, por lo que es sencillo encontrar iconos de estilo similar<br />
Número de iconos: 215 PNGs de 16&#215;16, 22&#215;22 y 32&#215;32. 215 SVGs.<br />
Licencia: Dominio público.</p>
<h2>WooFunction</h2>
<p><a href="http://www.flickr.com/photos/mundogeek/4748947163/" title="Iconos WooFunction"><img src="http://farm5.static.flickr.com/4102/4748947163_fa8b1186e7.jpg" width="484" height="197" alt="Iconos WooFunction" /></a><br />
Descarga: <a href="http://www.woothemes.com/2009/09/woofunction-178-amazing-web-design-icons/">WooFunction</a><br />
Número de iconos: 159 PNG de 32&#215;32, 19 PNG de 16&#215;16.<br />
Licencia: GPL.</p>
<h2>Fugue</h2>
<p><a href="http://www.flickr.com/photos/mundogeek/4748947211/" title="Iconos Fugue"><img src="http://farm5.static.flickr.com/4138/4748947211_6168ca6822.jpg" width="477" height="158" alt="Iconos Fugue" /></a><br />
Descarga: <a href="http://p.yusukekamiyamane.com/">Fugue</a><br />
Número de iconos: 2941 PNGs de 16&#215;16, 210 PNG de 24&#215;24, 46 PNG de 32&#215;32.<br />
Licencia: Creative Commons Attribution 3.0</p>
<h2>NIXUS</h2>
<p><a href="http://www.flickr.com/photos/mundogeek/4748947329/" title="Iconos NIXUS"><img src="http://farm5.static.flickr.com/4139/4748947329_8482579840.jpg" width="500" height="284" alt="Iconos NIXUS" /></a><br />
Descarga: <a href="http://www.tutorial9.net/resources/nixus-icon-pack-60-beautiful-premium-icons-free/">NIXUS</a><br />
Número de iconos: 60 PNG de 32&#215;32, 48&#215;48, 64&#215;64.<br />
Licencia: No requiere atribución.</p>
<h2>ISLOO</h2>
<p><a href="http://www.flickr.com/photos/mundogeek/4748947601/" title="Iconos ISLOO"><img src="http://farm5.static.flickr.com/4119/4748947601_0344b75435.jpg" width="499" height="291" alt="Iconos ISLOO" /></a><br />
Descarga: <a href="http://www.iconfinder.com/blog/anniversary/">ISLOO</a><br />
Número de iconos: 50<br />
Licencia: No requiere atribución.</p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2010/06/30/los-10-mejores-packs-de-iconos-para-tus-aplicaciones-web/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
		<item>
		<title>Internet Explorer 6: con fecha de caducidad</title>
		<link>http://mundogeek.net/archivos/2010/05/30/internet-explorer-6-con-fecha-de-caducidad/</link>
		<comments>http://mundogeek.net/archivos/2010/05/30/internet-explorer-6-con-fecha-de-caducidad/#comments</comments>
		<pubDate>Sun, 30 May 2010 12:44:29 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[internet-explorer]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://mundogeek.net/?p=5616</guid>
		<description><![CDATA[¿Te beberías un cartón de leche de hace 9 años? Seguramente no, a menos que quieras enfermar. Pero entonces, ¿por qué utilizar un navegador de hace 9 años? Este es el convincente argumento que lanzan desde la propia Microsoft para animar a sus usuarios a dar el salto de Internet Explorer 6 a Internet Explorer [...]]]></description>
			<content:encoded><![CDATA[<p>¿Te beberías un cartón de leche de hace 9 años? Seguramente no, a menos que quieras enfermar. Pero entonces, ¿por qué utilizar un navegador de hace 9 años?</p>
<div style="text-align:center"><a href="http://www.flickr.com/photos/mundogeek/4652113141/sizes/l/" title="Internet Explorer 6"><img src="http://farm5.static.flickr.com/4029/4652113141_4728300f2e.jpg" width="500" height="344" alt="Internet Explorer 6" /></a></div>
<p>Este es el convincente argumento que lanzan <a href="http://www.microsoft.com/australia/technet/ie8milk/Default.aspx">desde la propia Microsoft</a> para animar a sus usuarios a dar el salto de Internet Explorer 6 a Internet Explorer 8. Una buena noticia, aunque es una lástima que no se animen a utilizar medidas más drásticas, como cabezas de caballo en las camas.</p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2010/05/30/internet-explorer-6-con-fecha-de-caducidad/feed/</wfw:commentRss>
		<slash:comments>30</slash:comments>
		</item>
		<item>
		<title>Tutorial rápido de jQuery</title>
		<link>http://mundogeek.net/archivos/2010/04/21/tutorial-rapido-de-jquery/</link>
		<comments>http://mundogeek.net/archivos/2010/04/21/tutorial-rapido-de-jquery/#comments</comments>
		<pubDate>Wed, 21 Apr 2010 15:26:36 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[desarrollo]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[programacion]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://mundogeek.net/?p=5390</guid>
		<description><![CDATA[El mejor resumen de lo que es jQuery lo podemos encontrar en el lema de su propia página web: &#8220;La librería JavaScript para escribir menos y hacer más&#8221;. Ampliando algo más esta definición, dejémoslo en que es una forma de convertir el desarrollo de la parte de cliente de una aplicación web en algo mucho [...]]]></description>
			<content:encoded><![CDATA[<p>El mejor resumen de lo que es <a href="http://jquery.com/" title="jQuery">jQuery</a> lo podemos encontrar en el lema de su propia página web: &#8220;La librería JavaScript para escribir menos y hacer más&#8221;. Ampliando algo más esta definición, dejémoslo en que es una forma de convertir el desarrollo de la parte de cliente de una aplicación web en algo mucho más divertido, rápido y sencillo, facilitando la interacción con los elementos del árbol de documento, el manejo de eventos, el uso de animaciones, etc.</p>
<p>Con algo más de 4 años de vida, jQuery se ha convertido en la librería JavaScript más utilizada actualmente, y es que, además, es gratuita, de código abierto (bajo licencia MIT y GPL v2) e increíblemente ligera. Entre sus usuarios podemos encontrar a Google, Microsoft, IBM, Amazon, Twitter, WordPress, Mozilla o Drupal.<span id="more-5390"></span></p>
<p>Para poder utilizar esta librería lo primero que tendremos que hacer será incluir su código en nuestro proyecto. Podemos descargar el script desde su página web, subirlo a nuestro servidor, y ejecutarlo con la etiqueta script:</p>
<pre name="code" class="html">&lt;script type="text/javascript" src="jquery.js"&gt;&lt;/script&gt;</pre>
<p>También podemos cargarla directamente desde el CDN que mantiene Google:</p>
<pre name="code" class="html">&lt;script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"&gt;&lt;/script&gt;</pre>
<p>el de Microsoft:</p>
<pre name="code" class="html">&lt;script type="text/javascript" src="http://ajax.microsoft.com/ajax/jquery/jquery-1.4.2.min.js"&gt;&lt;/script&gt;</pre>
<p>o el del propio jQuery</p>
<pre name="code" class="html">&lt;script type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.min.js"&gt;&lt;/script&gt;</pre>
<p>Independientemente de la opción elegida, ya estaremos listos para comenzar a trabajar con la librería. Sin embargo, y aunque no es estrictamente necesario, os aconsejaría tener unos conocimientos básicos de JavaScript primero, conocimientos que podéis obtener con nuestro <a href="http://mundogeek.net/tutorial_de_javascript/" title="Tutorial de JavaScript">tutorial de JavaScript</a>. Y ahora, manos a la obra.</p>
<p>El corazón de jQuery es la función sobrecargada del mismo nombre, <code>jQuery</code>, que ofrece distinta funcionalidad dependiendo de los parámetros utilizados. Además, como JavaScript también toma conceptos del paradigma funcional, y las funciones no son más que otro tipo de objeto, la función <code>jQuery</code> cuenta a su vez con distintas propiedades y métodos. La intención de esta decisión de diseño es la de evitar llenar el espacio de nombres global con montones de nombres inútiles esperando a colisionar.</p>
<p>Si queremos escribir menos y que nuestros archivos sean más pequeños, y si no utilizamos ninguna otra librería que pueda causar algún conflicto con este símbolo, también podemos utilizar el alias <code>$</code> en sustitución de <code>jQuery</code>.</p>
<h2>Selectores jQuery</h2>
<p>El primer paso a la hora de trabajar con jQuery es seleccionar los elementos del árbol de documento sobre los que queremos trabajar. Para ello se utiliza la función <code>jQuery</code>, pasando como argumento a la función una cadena con un selector, la mayoría de los cuales utilizan una sintaxis similar a la de CSS 3 (ver <a href="http://mundogeek.net/archivos/2010/03/02/tutorial-rapido-de-css/" title="Tutorial rápido de CSS">Tutorial rápido de CSS</a>). El engine que utiliza jQuery para seleccionar elementos se llama <a href="http://sizzlejs.com/" title="Una librería de selección de elementos HTML en JavaScript">Sizzle</a>, y puede descargarse y utilizarse de forma aislada.</p>
<p>Los distintos selectores que podemos utilizar son los siguientes:</p>
<h3>Selectores básicos</h3>
<p>Selector universal: selecciona todos los elementos de la página (CSS 2)</p>
<pre name="code" class="javascript">jquery("*")</pre>
<p>Selector de tipo o etiqueta: selecciona todos los elementos con el tipo de etiqueta indicado (CSS 1)</p>
<pre name="code" class="javascript">jQuery("div")</pre>
<p>Selector de clase: selecciona todos los elementos con la clase indicada (atributo class) (CSS 1)</p>
<pre name="code" class="javascript">jQuery("div.entrada")</pre>
<p>Selector de identificador: selecciona el elemento con el identificador (atributo id) indicado (CSS 1)</p>
<pre name="code" class="javascript">jQuery("div#cabecera")</pre>
<p>Grupos de selectores: se puede combinar el resultado de varios selectores distintos separándolos con comas (CSS 1)</p>
<pre name="code" class="javascript">jquery("p,div,a")</pre>
<h3>Selectores de atributos</h3>
<p>Selector de atributo: selecciona elementos que tengan un cierto atributo (CSS 2)</p>
<pre name="code" class="javascript">jquery("a[rel]")</pre>
<p>También se puede seleccionar aquellos que tengan un cierto valor para un atributo (CSS 2)</p>
<pre name="code" class="javascript">jquery("a[rel='nofollow']")</pre>
<p>O que tengan un valor distinto del indicado (jQuery)</p>
<pre name="code" class="javascript">jQuery("a[rel!='nofollow']")</pre>
<p>Aquellos cuyo valor empieza por una cierta cadena (CSS 3)</p>
<pre name="code" class="javascript">jquery("a[href^='http://mundogeek.net/']")</pre>
<p>Los que terminan con una cierta cadena (CSS 3)</p>
<pre name="code" class="javascript">jquery("a[href$='.com']")</pre>
<p>Y los que contienen una cierta cadena (CSS 3)</p>
<pre name="code" class="javascript">jquery("a[href*='geek']")</pre>
<p>Por último, podemos hacer combinaciones de todo lo anterior (CSS 2)</p>
<pre name="code" class="javascript">jquery("a[rel='nofollow'][href]")</pre>
<h3>Selectores de widgets</h3>
<p>Pseudo clase botón: selecciona todos los botones (jQuery)</p>
<pre name="code" class="javascript">jquery(":button")</pre>
<p>Pseudo clase checkbox: selecciona todos los checkboxes (jQuery)</p>
<pre name="code" class="javascript">jquery(":checkbox")</pre>
<p>Pseudo clase archivo: selecciona todos los widgets de tipo archivo (jQuery)</p>
<pre name="code" class="javascript">jquery(":file")</pre>
<p>Pseudo clase cabeceras: selecciona todas las cabeceras (jQuery)</p>
<pre name="code" class="javascript">jquery(":header")</pre>
<p>Pseudo clase imagen: selecciona todas las imágenes (jQuery)</p>
<pre name="code" class="javascript">jquery(":image")</pre>
<p>Pseudo clase input: selecciona todos los widgets de tipo input (jQuery)</p>
<pre name="code" class="javascript">jquery(":input")</pre>
<p>Pseudo clase contraseña: selecciona todos los elementos password (jQuery)</p>
<pre name="code" class="javascript">jquery(":password")</pre>
<p>Pseudo clase radiobutton: selecciona todos los elementos radiobutton (jQuery)</p>
<pre name="code" class="javascript">jquery(":radio")</pre>
<p>Pseudo clase reset: selecciona todos los elementos reset (jQuery)</p>
<pre name="code" class="javascript">jquery(":reset")</pre>
<p>Pseudo clase seleccionado: selecciona las opciones seleccionadas en un select (jQuery)</p>
<pre name="code" class="javascript">jquery(":select")</pre>
<p>Pseudo clase submit: selecciona todos los elementos submit (jQuery)</p>
<pre name="code" class="javascript">jquery(":submit")</pre>
<p>Pseudo clase texto: selecciona todos las cajas de texto (jQuery)</p>
<pre name="code" class="javascript">jquery(":text")</pre>
<p>Pseudo clase marcado: selecciona todos los radiobuttons y checkboxes marcados (CSS 3)</p>
<pre name="code" class="javascript">jquery(":checked")</pre>
<p>Pseudo clase activo: selecciona todos los elementos que estén activos (CSS 3)</p>
<pre name="code" class="javascript">jquery("input:enabled")</pre>
<p>Pseudo clase inactivo: selecciona todos los elementos que no estén activos (CSS 3)</p>
<pre name="code" class="javascript">jquery("input:disabled")</pre>
<p>Pseudo clase ocultos: selecciona todos los elementos ocultos (jQuery)</p>
<pre name="code" class="javascript">jquery(":hidden")</pre>
<p>Pseudo clase visible: selecciona todos los elementos visibles (jQuery)</p>
<pre name="code" class="javascript">jquery(":visible")</pre>
<h3>Selectores de jerarquía</h3>
<p>Selector de descendientes: selecciona elementos que desciendan de otro elemento (CSS 1)</p>
<pre name="code" class="javascript">jquery("div.entrada h2")</pre>
<p>Selector de hijos: selecciona elementos que sean hijos directos de otro elemento (CSS 2)</p>
<pre name="code" class="javascript">jquery("div.entrada &gt; h2")</pre>
<p>Pseudo clase hijo: selecciona el enésimo hijo de un elemento (CSS 3)</p>
<pre name="code" class="javascript">jquery("tr:nth-child(1)")</pre>
<p>Pseudo clase primer hijo: selecciona el primero hijo de un elemento (CSS 2)</p>
<pre name="code" class="javascript">jquery("tr:first-child")</pre>
<p>Pseudo clase último hijo: selecciona el último hijo de un elemento (CSS 3)</p>
<pre name="code" class="javascript">jquery("tr:last-child")</pre>
<p>Pseudo clase hijo único: selecciona los elementos que sean hijos únicos de otros elementos (CSS 3)</p>
<pre name="code" class="javascript">jquery("div:only-child")</pre>
<p>Pseudo clase índice: selecciona el elemento con el índice indicado de un grupo de elementos (jQuery)</p>
<pre name="code" class="javascript">jquery("td:eq(0)")</pre>
<p>Pseudo clase primero: selecciona el primer elemento de un grupo de elementos. Equivale a <code>eq(0)</code> (jQuery)</p>
<pre name="code" class="javascript">jquery("td:first)")</pre>
<p>Pseudo clase último: selecciona el último elemento de un grupo de elementos (jQuery)</p>
<pre name="code" class="javascript">jquery("td:last)")</pre>
<p>Pseudo clase mayor que: selecciona todos los elementos con un índice mayor que el indicado en un grupo de elementos (jQuery)</p>
<pre name="code" class="javascript">jquery("td:gt(0)")</pre>
<p>Pseudo clase menor que: selecciona todos los elementos con un índice menor que el indicado en un grupo de elementos (jQuery)</p>
<pre name="code" class="javascript">jquery("td:lt(3)")</pre>
<p>Pseudo clase par: selecciona los elementos pares de un grupo de elementos (jQuery)</p>
<pre name="code" class="javascript">jquery("td:even")</pre>
<p>Pseudo clase impar: selecciona los elementos impares de un grupo de elementos (jQuery)</p>
<pre name="code" class="javascript">jquery("td:odd")</pre>
<p>Selector de hermanos: selecciona todos los hermanos que se encuentren precedidos de otro elemento (CSS 3)</p>
<pre name="code" class="javascript">jquery("div.entrada ~ p")</pre>
<p>Selector de próximo adyacente: similar al anterior, pero sólo selecciona el adyacente directo (CSS 2)</p>
<pre name="code" class="javascript">jquery("div.entrada + p")</pre>
<p>Pseudo clase padre: selecciona los padres de otros elementos (jQuery)</p>
<pre name="code" class="javascript">jquery("h2:parent")</pre>
<p>Pseudo clase vacío: selecciona los elementos que no tengan ningún hijo, incluyendo texto plano (CSS 3)</p>
<pre name="code" class="javascript">jquery(":empty")</pre>
<h3>Otros selectores</h3>
<p>Pseudo clase animado: selecciona todos los elementos que están en proceso de animación en este momento (jQuery)</p>
<pre name="code" class="javascript">jquery(":animated")</pre>
<p>Pseudo clase contiene: selecciona todos los elementos que contengan el texto indicado, directamente o en uno de los hijos (jQuery)</p>
<pre name="code" class="javascript">jquery("div:contains('Mundo geek')")</pre>
<p>Pseudo clase tiene: selecciona todos los elementos que contengan al menos un elemento que responda al selector indicado (jQuery)</p>
<pre name="code" class="javascript">jquery("div:has(h2)")</pre>
<p>Pseudo clase negación: selecciona todos los elementos que no cumplan con el selector dado (CSS 3)</p>
<pre name="code" class="javascript">jquery("div:not(.entrada)")</pre>
<h2>Gestionando una colección jQuery</h2>
<p>Al llamar a la función <code>jQuery</code> con un selector como argumento, el valor devuelto será otro objeto <code>jQuery</code> representando la colección de elementos DOM seleccionados. Tanto es así, que podremos obtener uno de los elementos utilizando el operador <code>[]</code>, como si de un array normal se tratara</p>
<pre name="code" class="javascript">jQuery("div.entrada")[0]</pre>
<p>y también tenemos acceso a una propiedad <code>length</code> con el número de elementos que contiene la colección</p>
<pre name="code" class="javascript">jQuery("div.entrada").length</pre>
<p>Otras cosas que podemos hacer con este objeto son añadir elementos a la colección</p>
<pre name="code" class="javascript">jQuery("div.entrada").add("div.comentario")</pre>
<p>eliminar elementos</p>
<pre name="code" class="javascript">jQuery("div.entrada").not("div.destacada")</pre>
<p>filtrar elementos con un selector o basándonos en el valor devuelto por una función</p>
<pre name="code" class="javascript">jQuery("div.entrada").filter(":has(h2)")</pre>
<p>quedarnos con los elementos que contengan otro cierto elemento</p>
<pre name="code" class="javascript">jQuery("div.entrada").has("h2")</pre>
<p>obtener un sólo elemento, por su índice</p>
<pre name="code" class="javascript">jQuery("div.entrada").eq(3)</pre>
<p>obtener el primer elemento de la colección</p>
<pre name="code" class="javascript">jQuery("div.entrada").first()</pre>
<p>obtener el último elemento de la colección</p>
<pre name="code" class="javascript">jQuery("div.entrada").last()</pre>
<p>crear una sub colección a partir de la original</p>
<pre name="code" class="javascript">jQuery("div.entrada").slice(0,5);
jQuery("div.entrada").slice(3);</pre>
<p>obtener los descendientes directos</p>
<pre name="code" class="javascript">jQuery("div.entrada").children()
jQuery("div.entrada").children("p")</pre>
<p>obtener los descendientes directos, incluyendo el texto plano</p>
<pre name="code" class="javascript">jQuery("div.entrada").contents()</pre>
<p>obtener los hijos que cumplan con un determinado selector</p>
<pre name="code" class="javascript">jQuery("div.entrada").find("p")</pre>
<p>obtener el hermano siguiente</p>
<pre name="code" class="javascript">jQuery("div.entrada").next()</pre>
<p>obtener los hermanos siguientes</p>
<pre name="code" class="javascript">jQuery("div.entrada").nextAll()</pre>
<p>obtener el hermano anterior</p>
<pre name="code" class="javascript">jQuery("div.entrada").prev()</pre>
<p>obtener los hermanos anteriores</p>
<pre name="code" class="javascript">jQuery("div.entrada").prevAll()</pre>
<p>obtener todos los hermanos</p>
<pre name="code" class="javascript">jQuery("div.entrada").siblings()</pre>
<p>obtener el padre de cada elemento</p>
<pre name="code" class="javascript">jQuery("div.entrada").parent()</pre>
<p>obtener todos los ancestros de cada elemento</p>
<pre name="code" class="javascript">jQuery("div.entrada").parents()</pre>
<p>crear una copia de la colección</p>
<pre name="code" class="javascript">jQuery("div.entrada").clone()</pre>
<p>o buscar la posición que ocupa un elemento en la colección (si existe)</p>
<pre name="code" class="javascript">jQuery("*").index("div.entrada")</pre>
<h2>Modificar la página con jQuery</h2>
<p>Veamos ahora cómo utilizar jQuery para modificar nuestra página web. Podemos, por ejemplo, modificar el valor de un atributo</p>
<pre name="code" class="javascript">jQuery("a#principal").attr("href", "http://mundogeek.net/")</pre>
<p>añadir una nueva clase a uno o varios elementos</p>
<pre name="code" class="javascript">jQuery("div.entrada:first").addClass("primera")</pre>
<p>añadir una propiedad CSS a uno o varios elementos</p>
<pre name="code" class="javascript">jQuery("div.entrada").css("border", "1px solid red")</pre>
<p>añadir contenido a un elemento</p>
<pre name="code" class="javascript">jQuery("div.entrada:first").before("&lt;strong&gt;Destacada&lt;/strong&gt;")
jQuery("div.entrada:first").prepend("&lt;strong&gt;Destacada&lt;/strong&gt;")
jQuery("div.entrada:first").after("&lt;strong&gt;Destacada&lt;/strong&gt;")
jQuery("div.entrada:first").append("&lt;strong&gt;Destacada&lt;/strong&gt;")</pre>
<p>modificar el contenido de un elemento</p>
<pre name="code" class="javascript">jQuery("p").html("&lt;strong&gt;Sustituido&lt;/strong&gt;")</pre>
<p>eliminar un elemento de la página</p>
<pre name="code" class="javascript">jQuery("div.entrada:first").remove()</pre>
<p>ocultar un elemento</p>
<pre name="code" class="javascript">jQuery("p").hide()</pre>
<p>o volver a mostrar un elemento</p>
<pre name="code" class="javascript">jQuery("p").show()</pre>
<h2>Eventos en jQuery</h2>
<p>Existen distintas funciones para asignar una función que maneje un evento lanzado por un widget. Para el evento click, al hacer clic sobre un elemento:</p>
<pre name="code" class="javascript">jQuery(":button#pulsame").click(function () {
  alert("Has hecho clic");
});</pre>
<p>evento submit, cuando se pulsa sobre el botón de enviar de un formulario:</p>
<pre name="code" class="javascript">jQuery("#formulario").submit(function() {
  alert("Enviando");
});</pre>
<p>evento dblclick, al hacer doble clic sobre un elemento:</p>
<pre name="code" class="javascript">jQuery("p:first").dblclick(function () {
  alert("Has hecho doble clic");
});</pre>
<p>evento hover, cuando al pasar el ratón por encima de un elemento. Podemos utilizar <code>jQuery(this)</code> para referirnos a este elemento:</p>
<pre name="code" class="javascript">jQuery("p:first").hover(function () {
  jQuery(this).css("border", "1px solid red");
});</pre>
<p>evento mouseenter, cuando el cursor entra en un elemento</p>
<pre name="code" class="javascript">jQuery("p:first").mouseenter(function () {
  jQuery(this).css("border", "1px solid red");
});</pre>
<p>evento mouseout, cuando el cursor sale de un elemento</p>
<pre name="code" class="javascript">jQuery("p:first").mouseenter(function () {
  jQuery(this).css("border", "1px solid red");
});

jQuery("p:first").mouseout(function () {
  jQuery(this).css("border", "0");
});</pre>
<p>evento change, cuando se modifica un elemento:</p>
<pre name="code" class="javascript">jQuery(":text#nombre").change(function () {
  alert("Cambiado");
});</pre>
<p>evento load, cuando se termina de cargar el elemento:</p>
<pre name="code" class="javascript">jQuery(window).load(function () {
  alert("Página cargada");
});</pre>
<p>evento ready, cuando se termina de cargar el DOM, para no tener que esperar a cargar las imágenes, por ejemplo, de forma que el usuario pueda utilizar nuestra funcionalidad JavaScript cuanto antes:</p>
<pre name="code" class="javascript">jQuery(document).ready(function () {
  alert("DOM cargado");
});</pre>
<p>esto último, al ser esto algo muy común, se puede resumir pasando una función a la función <code>jQuery</code>, directamente:</p>
<pre name="code" class="javascript">jQuery(function () {
  alert("DOM cargado");
});</pre>
<h2>Animaciones con jQuery</h2>
<p>jQuery viene con unas pocas animaciones útiles y vistosas por defecto, aunque para sacarle todo el partido probablemente tendremos que recurrir a plugins.</p>
<p>Para hacer un fundido a opaco:</p>
<pre name="code" class="javascript">jQuery(function () {
  jQuery("p").hide();
  jQuery("p").delay(200).fadeIn();
});</pre>
<p>En el ejemplo anterior se utiliza <code>delay</code> para hacer pasar un par de segundos y que se vea más claramente el efecto. A esta función se le puede pasar un valor numérico con el número de milisegundos a esperar, o una cadena, como <code>"slow"</code> (lento) o <code>"fast"</code> (rápido).</p>
<p>para hacer un fundido a transparente:</p>
<pre name="code" class="javascript">jQuery(":button").click(function () {
  jQuery("p").fadeOut();
});</pre>
<p>También podemos cambiar la opacidad de un elemento a cualquier valor intermedio</p>
<pre name="code" class="javascript">jQuery(":button").click(function () {
  jQuery("p").fadeTo("slow", 0.5);
});</pre>
<p>mostrar los elementos con una animación de deslizamiento de arriba a abajo:</p>
<pre name="code" class="javascript">jQuery(function () {
  jQuery("p").hide().delay(200).slideDown();
});</pre>
<p>ocultarlos deslizándolos hacia arriba:</p>
<pre name="code" class="javascript">jQuery(function () {
  jQuery("p").delay(200).slideUp();
});</pre>
<p>mostrarlos u ocultarlos, dependiendo de si se estaban mostrando o no:</p>
<pre name="code" class="javascript">jQuery(":button").click(function () {
  jQuery("p").delay(200).slideToggle();
});</pre>
<p>Por último, para cualquier otro tipo de animación con propiedades CSS cuyos valores sean numéricos, utilizaríamos:</p>
<pre name="code" class="javascript">jQuery(":button").click(function () {
  jQuery("p").animate({opacity:0.50,width:100}, 'slow');
});</pre>
<h2>jQuery y AJAX</h2>
<p>La forma más sencilla de enviar una petición HTTP de forma asíncrona y mostrar el resultado en la página actual es utilizar la función <code>load</code>. Esta se ejecuta sobre el elemento al que se va a añadir la respuesta, y se le pasa como argumento una cadena con el archivo a cargar. Esta cadena puede contener también un selector con el que seleccionar qué elementos queremos mostrar de la respuesta.</p>
<pre name="code" class="javascript">jQuery(":button").click(function () {
  $("#citas").load("citas.html li");
});</pre>
<p>también se pueden enviar parámetros al documento (se utiliza GET a menos que los datos se manden en forma de objeto):</p>
<pre name="code" class="javascript">jQuery(":button#login").click(function () {
  $("#mensaje").load("login.php", {nombre: "zootropo", pass: "contraseña"});
});</pre>
<p>e indicar una función a ejecutar cuando se termine de llevar a cabo la petición</p>
<pre name="code" class="javascript">jQuery(":button#login").click(function () {
  jQuery("#mensaje").load("login.php", {nombre: "zootropo", pass: "contraseña"}, function(responseText, textStatus, XMLHttpRequest) {
    alert("cargado");
    });
});</pre>
<p>También se pueden utilizar los métodos <code>get</code> y <code>post</code> del objeto <code>jQuery</code>, en cuyo caso se nos devolverá unos ciertos datos con los que nosotros mismos tendremos que trabajar para generar la respuesta y mostrarla en nuestro documento actual:</p>
<pre name="code" class="javascript">jQuery.get("login.php", {nombre: "zootropo", pass:"contraseña"},
  function(data, textStatus, XMLHttpRequest){
    jQuery("#mensaje").html("Han devuelto: " + data);
  });

jQuery.post("login.php", {nombre: "zootropo", pass:"contraseña"},
  function(data, textStatus, XMLHttpRequest){
    jQuery("#mensaje").html("Han devuelto: " + data);
  });</pre>
<p>Si la respuesta del servidor va a estar en formato JSON (JavaScript Object Notation), muy utilizado actualmente, podemos utilizar el método <code>jQuery.getJSON()</code>, al que se le pasa la URL de la petición y, opcionalmente, cualquier parámetro que se necesite, además de una función de callback que ejecutar cuando se termine con la petición. Este método se encargará de parsear la estructura del objeto JSON devuelta utilizando <code>jQuery.parseJSON()</code>, objeto que estará disponible como primer parámetro de la función de callback.</p>
<pre name="code" class="javascript">$.getJSON('tareas.php', function(data, textStatus){
          $.each(data, function(i, tarea){
            $("&lt;li&gt;&lt;/li&gt;").html(tarea.nombre + " - " + tarea.hora).appendTo("ul#tareas");
          });
        });</pre>
<p>El código de este tareas.php podría tener este aspecto:</p>
<pre name="code" class="php">&lt;?php
header('Content-type: text/javascript');

$bbdd = new mysqli('servidor.com', 'usuario', 'pass', 'tareas');

$query = 'SELECT * FROM tareas';
$tareas = array();
if($resultado = $bbdd-&gt;query($query))
  while($tarea = $resultado-&gt;fetch_object())
    $tareas[] = $tarea;

$bbdd-&gt;close();

echo json_encode($tareas);
?&gt;</pre>
<p>Como veis, se utiliza la función <code>json_encode</code> para convertir el array u objeto PHP a formato JSON. Esta función, junto con su complemento, <code>json_encode</code>, se introdujo en PHP en la versión 5.2.0.</p>
<link type="text/css" rel="stylesheet" href="http://mundogeek.net/sh/css/SyntaxHighlighter.css"></link>
<script language="javascript" src="http://mundogeek.net/sh/js/shCore.js"></script><br />
<script language="javascript" src="http://mundogeek.net/sh/js/shBrushXml.js"></script><br />
<script language="javascript" src="http://mundogeek.net/sh/js/shBrushJScript.js"></script><br />
<script language="javascript" src="http://mundogeek.net/sh/js/shBrushPhp.js"></script><br />
<script language="javascript">dp.SyntaxHighlighter.ClipboardSwf = 'http://mundogeek.net/sh//flash/clipboard.swf';
dp.SyntaxHighlighter.HighlightAll('code');</script></p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2010/04/21/tutorial-rapido-de-jquery/feed/</wfw:commentRss>
		<slash:comments>107</slash:comments>
		</item>
	</channel>
</rss>

