<?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>elBlëg - Interactividad, usabilidad y web &#187; jQuery</title>
	<atom:link href="http://www.elbleg.com/category/web-dev/javascript/jquery/feed" rel="self" type="application/rss+xml" />
	<link>http://www.elbleg.com</link>
	<description>Interactividad, usabilidad y web</description>
	<lastBuildDate>Thu, 19 Aug 2010 16:41:54 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>10 formas de escribir un mejor código en jQuery</title>
		<link>http://www.elbleg.com/web-dev/javascript/10-formas-de-escribir-un-mejor-codigo-en-jquery.html</link>
		<comments>http://www.elbleg.com/web-dev/javascript/10-formas-de-escribir-un-mejor-codigo-en-jquery.html#comments</comments>
		<pubDate>Sun, 23 Aug 2009 07:14:00 +0000</pubDate>
		<dc:creator>Yëco</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Web Dev]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[chaining]]></category>
		<category><![CDATA[encadenado]]></category>
		<category><![CDATA[jquery data]]></category>
		<category><![CDATA[jquery document ready]]></category>
		<category><![CDATA[optimización]]></category>
		<category><![CDATA[toggleClass]]></category>

		<guid isPermaLink="false">http://www.elbleg.com/?p=227</guid>
		<description><![CDATA[Sin duda alguna, jQuery se ha vuelto la biblioteca de javascript por excelencia, y no lo digo solamente porque me agrade, la gran cantidad de recursos, plugins, tutoriales y documentación, hacen que a muchos les entre la curiosidad y se inicien en javascript aún cuando nunca les atrajo el lenguaje. 
Y bien, ya que la [...]]]></description>
			<content:encoded><![CDATA[<p>Sin duda alguna, jQuery se ha vuelto la biblioteca de javascript por excelencia, y no lo digo solamente porque me agrade, la gran cantidad de recursos, plugins, tutoriales y documentación, hacen que a muchos les entre la curiosidad y se inicien en javascript aún cuando nunca les atrajo el lenguaje. </p>
<p>Y bien, ya que la usamos seguido, o pensamos aprenderla, no nos queda de más conocer unos cuantos tips que nos sirvan para que funcione de un modo más adecuado.<br />
<span id="more-227"></span><br />
Andando por ahí me encontré un post de <a rel="external" href="http://www.myinkblog.com/2009/08/04/10-tips-for-writing-better-jquery-code/">Giulio Bai</a> que aborda este tema en específico y nos dá unas buenas sugerencias al respecto:</p>
<h2>1. $(document).ready (); Siempre</h2>
<p>Todo lo que contenga será ejecutado tan pronto el DOM sea cargado y antes de que los contenidos sean llenados. Te permite agregar eventos a cualquier elemento en la página sin interferir directamente con el markup; todos esos metiches de <code>onload</code>, <code>onclick</code> y <code>onLoQueSea</code> ya no son necesarios, solo escribílos encapsulados ahí.</p>
<p>Un pequeño ejemplo podría ser:</p>
<pre name="code" class="js">$(document).ready(function()
 {
    $(&quot;.dummy&quot;).click(function()
    {
        $(this).css(&#039;color&#039;, &#039;#000000&#039;);
    });
});</pre>
<h2>2. Usá $(window).load ()</h2>
<p>Aunque la vasta mayoría de ejemplos vienen usando el método descrito anteriormente, a veces es mejor evitar poner todo ahí.</p>
<p><code>$(document).ready ()</code> es increíblemente útil, pero ocurre durante el rendering de la página, cuando los objetos aún se están descargando. Por eso las funcionalidades supérfluas como scrollings, arrastrar y soltar, podrían ponerse dentro de una función <code>$(window).load ()</code> ya que esta ejecuta después de que todos los hayan sido descargados y evita que algo se rompa mientras carga la página.</p>
<p>La sintáxis es casi la misma que la de <code>$(document).ready ()</code>:</p>
<pre name="code" class="js">$(window).load (function () {
// métodos de scrolling
});</pre>
<h2>3. Carga sólo lo que realmente necesitas</h2>
<p>Todos han sido tentados a escribir JavaScript que va a ser usado en una sola página de un sitio y luego cargarlo por todas partes, aunque no se use. jQuery se toma el tiempo de revisar todos y cada uno de los elementos que se le dan, y eso pone las cosas un poco lentas.</p>
<p>Hay dos formas que se sugieren para evitar este problema. El más sencillo sería simplemente agregar una clase en el <code>body</code> del html que sea identificador para correr ahí solamente el código necesario.</p>
<pre name="code" class="js">$(document).ready(function()
 {
    if (&#039;body&#039;).hasClass(&#039;home&#039;)
    {
        // home page code
        }
    else if (&#039;body&#039;).hasClass(&#039;blog&#039;)
    {
        // blog code
        }
    // Y as&iacute; sucesivamente
});
</pre>
<p>El otro método, un poco más enredado, sería construir una biblioteca para llamar el código que se necesite desde cada página:</p>
<pre name="code" class="js">var jslib =
{
    home:
    {
        init: function() {
            // home page code
            }
    },

    blog:
    {
        init: function() {
            // blog code
            }
    }

    // Y as&iacute; sucesivamente
}</pre>
<h2>4. Aprende qué es el método &#8216;Data&#8217; y usálo</h2>
<p>Esto es algo muy común, la gente no piensa en ello y siempre escriben cosas como:</p>
<pre name="code" class="js">$('.selector').attr ('alt', 'naranja');</pre>
<p>para guardar y asociar datos misceláneos en el DOM. Esto, es técnicamente incorrecto, además de que es fácil confundirse, sobre todo para las personas que entren al proyecto después.</p>
<p>jQuery ya tiene un método que sirve para guardar datos en el DOM llamado &#8216;data&#8217;. El ejemplo de arriba vendría siendo algo como esto:</p>
<pre name="code" class="js">$('.selector').data ('miColor', 'azul');
// que puede ser pedido con
$('.selector').data ('miColor');</pre>
<p>Este método te permite asociar y guardar datos en cualquier elemento de la página y tener un nombre de referencia.</p>
<h2>5. Usá los selectores personalizados</h2>
<p>Estar familiarizado con los selectores de CSS es util cuando se trata de jQuery. Pero conocer los selectores que trae la biblioteca es de verdad un empujón increíble. Date una vuelta por <a href="http://docs.jquery.com/Selectors">http://docs.jquery.com/Selectors</a> para conocer más de ellos.</p>
<p>Por ejemplo, podrías usar:</p>
<pre name="code" class="js">$("div:contains('hola')").css ('background-color', '#cc0000');</pre>
<p>para pintar de rojo todos los div que contengan la palabra &#8220;hola&#8221; ó</p>
<pre name="code" class="js">$('input:password')</pre>
<p> para obtener todos los campos que sean para password.</p>
<h2>6. Indicadores con clases</h2>
<p>Podés usar indicadores ó flags para monitorear lo que el usuario está haciendo o bien revisar si algo en particular se efectuó o no. El método <code>addClass</code> es bastante útil en este caso ya que provee una forma fácil de agregar una nueva clase css a un elemento. Así que podés chequear la existencia de la clase con la función <code>hasClass</code>.</p>
<p>Un uso muy común de los indicadores se da cuando a aplicación tiene uno o más modos de trabajo; al entrar en el segundo modo, el indicador se fija a un elemento predeterminado y, cuando se necesite, el método <code>hasClass</code> es usado para revisar el modo de trabajo actual. Sencillo no?</p>
<pre name="code" class="js">function editModeOn ()
{
// Inicializa el modo de edición y fija un indicador
$(&#039;#flags&#039;).addClass (&quot;editModeOn&quot;);
// hacer otras cosas
}

function saveData ()
{
// guarda los datos pero primero sale del modo de edición (si está ahí)
if ($(&#039;#flags&#039;).hasClass (&#039;editModeOn&#039;)) {
exitEditMode ();
$(&#039;#flags&#039;).removeClass (&#039;editModeOn&#039;);
}

save ();
}</pre>
<h2>7. No llamés el mismo selector cientos de veces</h2>
<p>De verdad, no lo hagas. Perfectamente en lugar de hacer algo como:</p>
<pre name="code" class="js">$(&#039;p.hola&#039;).css (&#039;color&#039;, &#039;#000000&#039;);
$(&#039;p.hola&#039;).text (&#039;hoola&#039;);
$(&#039;p.hola&#039;).addClass (&#039;parrafo&#039;);
$(&#039;p.hola&#039;).fadeTo (1000, 1);
</pre>
<p>Podés hacer algo como:</p>
<pre name="code" class="js">var $p = $(&#039;p.hola&#039;);
$p.css (&#039;color&#039;, &#039;#000000&#039;);
$p.text (&#039;hola&#039;);
$p.addClass (&#039;parrafo&#039;);
$p.fadeTo (1000, 1);
</pre>
<p>Eso va a mantener la información del selector lista para ser reutilizada.</p>
<h2>8. Encadenando (Casi) todo</h2>
<p>El encadenado, o chaining de jQuery es muy útil.<br />
El código anterior podría ser reescrito como:</p>
<pre name="code" class="js">
$(&#039;p.hola&#039;).css (&#039;color&#039;, &#039;#000000&#039;).text (&#039;hola&#039;).addClass (&#039;parrafo&#039;).fadeTo (1000, 1);</pre>
<p>Eso sí, sin exagerar, es sabido que este patrón puede ser un poco lento.</p>
<h2>9. La utilidad toggleClass</h2>
<p>Podés encender y apagar la clase de un elemento para variar su comportamiento sin mucho esfuerzo. Digamos que tenés una clase <code>.hidden</code> que esconde los elementos que la usen. Fácilmente podrías mostrar los elementos de nuevo usando:</p>
<pre name="code" class="js">
$(&#039;p.hidden&#039;).toggleClass ();
</pre>
<p>Otro punto de <code>toggleClass</code> es que, con el nuevo release de jQuery 1.3.3, el método .toggleClass() va a tener nuevas formas de operar. Va a ser capaz de cambiar multiples clases, además de que podrá quitar y poner todas las clases.</p>
<p>Estás son las formas en que vas a poder usar <code>toggleClass</code>:</p>
<pre name="code" class="js">// Con un elemento dado

	// Cambiar todas las Clases
	$(&#039;div&#039;).toggleClass(); //
	&lt;div&gt;
	$(&#039;div&#039;).toggleClass(); //
	&lt;div class=&quot;a b c&quot;&gt;
	$(&#039;div&#039;).toggleClass( false ); //
	&lt;div&gt;
	$(&#039;div&#039;).toggleClass( true ); //
	&lt;div class=&quot;a b c&quot;&gt;

	// Cambiar m&uacute;ltiples clases
	$(&#039;div&#039;).toggleClass( &quot;a b&quot; ); //
	&lt;div class=&quot;c&quot;&gt;
	$(&#039;div&#039;).toggleClass( &quot;a c&quot; ); //
	&lt;div class=&quot;a&quot;&gt;
	$(&#039;div&#039;).toggleClass( &quot;a b c&quot;, false ); //
	&lt;div&gt;
	$(&#039;div&#039;).toggleClass( &quot;a b c&quot;, true ); //&lt;/div&gt;
	&lt;/div&gt;
	&lt;/div&gt;
	&lt;/div&gt;
	&lt;/div&gt;
	&lt;/div&gt;
	&lt;/div&gt;</pre>
<h2>10. Guardá los resultados de jQuery</h2>
<p>Cuando se trata de funciones, podrías querer tener algunos resultados disponibles en otros lugares. Acá hay dos posibilidades.</p>
<p>Una posible solución sería guardar los resultados dentro de objetos dentro de una variable global, así se pueden usar después:</p>
<pre name="code" class="js">// usamos el objeto Window
	window.$resultados = {
	uno : 0,
	dos : 0
	};

	// esta es la funci&oacute;n que podria corre m&aacute;s de una vez
	function getResults (first, second)
	{
	$resultados.uno = first;
	$resultados.dos = second;
	}

	// corre la funcion
	getResults ($(&#039;li.azul&#039;), $(&#039;a.rojo));
	$resultados.uno.hasClass (&#039;azul&#039;); // true
	$resultados.dos.hasClass (&#039;azul&#039;); // false

	// corre de nuevo
	getResults ($(&#039;li.rojo&#039;), $(&#039;a.azul));
	$resultados.uno.hasClass (&#039;azul&#039;); // false
	$resultados.dos.hasClass (&#039;azul&#039;); // true
</pre>
<p>La otra, y a mi parecer la mejor, como se recomienda en el punto 4 es usar el método Data en lugar de crear una variable global.</p>
<pre name="code" class="js">$.data(window, &quot;resultados&quot;, { uno: false, dos: true });

//Para accesar los valores:

$.data(window, &quot;resultados&quot;).uno; // false
$.data(window, &quot;resultados&quot;).dos; // true

// Y para cambiarlos:

$.data(window, &quot;resultados&quot;).uno = true;
$.data(window, &quot;resultados&quot;).dos = false;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.elbleg.com/web-dev/javascript/10-formas-de-escribir-un-mejor-codigo-en-jquery.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Snippet: Arreglar el Z-Index en IE7 con jQuery o MooTools</title>
		<link>http://www.elbleg.com/web-dev/javascript/jquery/snippet-arreglar-el-z-index-en-ie7-con-jquery-o-mootools.html</link>
		<comments>http://www.elbleg.com/web-dev/javascript/jquery/snippet-arreglar-el-z-index-en-ie7-con-jquery-o-mootools.html#comments</comments>
		<pubDate>Mon, 13 Jul 2009 07:01:53 +0000</pubDate>
		<dc:creator>Yëco</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[snippet]]></category>
		<category><![CDATA[z-index]]></category>
		<category><![CDATA[Zindex]]></category>

		<guid isPermaLink="false">http://www.elbleg.com/?p=208</guid>
		<description><![CDATA[Por alguna razón malvada, Internet Explorer 7 hace algunas cosas raras  (además de tener una larga lista bugs conocidos en su motor) que siempre se las ingenian para volver a los web developers locos. Mientras algunos errores ocurren de forma oscura y dificil de notar, hay algunos que causan que pasemos horas tratando de [...]]]></description>
			<content:encoded><![CDATA[<p>Por alguna razón malvada, Internet Explorer 7 hace algunas cosas raras  (además de tener una larga lista <a href="http://www.quirksmode.org/bugreports/archives/explorer_7/index.html">bugs conocidos</a> en su motor) que siempre se las ingenian para volver a los web developers locos. Mientras algunos errores ocurren de forma oscura y dificil de notar, hay algunos que causan que pasemos horas tratando de arreglarlos. La forma en que IE7 renderiza el orden del z-index es una de ellas. </p>
<p>Una de las formas de arreglarlo es cambiando dinámicamente el orden por default de los elementos de la página. Esto asegura que los elementos en el código HTML tengan el índice adecuado, resolviendo la mayoría de los problemas que causa IE7. </p>
<p>El modo de hacerlo usando jQuery sería algo como:</p>
<pre name="code" class="js">$(function() {
	var zIndexNumber = 1000;
	$(&apos;div&apos;).each(function() {
		$(this).css(&apos;zIndex&apos;, zIndexNumber);
		zIndexNumber -= 10;
	});
});</pre>
<p>Con esto básicamente lo que hacemos es comenzar con un z-index de 1000 y decrementar el indice de cada div de la página en tractos de 10, es decir, el primer elemento tendrá un z-index de 1000, el segundo 990 el tercero 980 y así sucesivamente. Notá que el selector de jQuery encuentra todos los divs con el codigo “<code>$(’div’)</code>”, usando la misma syntaxis que los selectores de CSS, nada dificil.</p>
<p>Ah&#8230; y así se hace lo mismo pero con MooTools, por si estás usando esa biblioteca:</p>
<pre name="code" class="js">if(Browser.Engine.trident){
	var zIndexNumber = 1000;
	$$(&apos;div&apos;).each(function(el,i){
		el.setStyle(&apos;z-index&apos;,zIndexNumber);
		zIndexNumber -= 10;
	});
};</pre>
<p>Saluuú.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.elbleg.com/web-dev/javascript/jquery/snippet-arreglar-el-z-index-en-ie7-con-jquery-o-mootools.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Cómo solucionar el error de window.onload</title>
		<link>http://www.elbleg.com/web-dev/javascript/como-solucionar-el-error-de-windowonload.html</link>
		<comments>http://www.elbleg.com/web-dev/javascript/como-solucionar-el-error-de-windowonload.html#comments</comments>
		<pubDate>Mon, 29 Jun 2009 04:58:05 +0000</pubDate>
		<dc:creator>Yëco</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[bug]]></category>
		<category><![CDATA[ie]]></category>
		<category><![CDATA[internet explorer]]></category>
		<category><![CDATA[onload]]></category>
		<category><![CDATA[SwfObject]]></category>

		<guid isPermaLink="false">http://www.elbleg.com/?p=168</guid>
		<description><![CDATA[Esta tarde, revisando los blogs de mis amigos me topé con un post de Oscar Godson, en el cual aporta una solución al ya famoso &#8220;Internet Explorer no puede abrir el sitio. Operación anulada&#8221; que tan malos momentos me hizo pasar alguna vez.

La solución de Oscar, consiste en usar jQuery para solucionar el bug con [...]]]></description>
			<content:encoded><![CDATA[<p>Esta tarde, revisando los blogs de mis amigos me topé con <a rel="friend" href="http://kneedeepincode.com/topics/ie-cannot-open-the-internet-site/">un post</a> de Oscar Godson, en el cual aporta una solución al ya famoso <cite>&#8220;Internet Explorer no puede abrir el sitio. Operación anulada&#8221;</cite> que tan malos momentos me hizo pasar alguna vez.<br />
<span id="more-168"></span><br />
La solución de Oscar, consiste en usar jQuery para solucionar el bug con una sencilla función:</p>
<pre name="code" class="xml">
$(window).load(function(){
//Acá tu código
});
</pre>
<p>De verdad sencilla y conveniente si ya estás usando jQuery en el proyecto, pero qué pasa si no? Ahí es donde cobra sentido este post. No nos conviene cargar 30k de código extra para poder resolver este problema solamente, sería matar una mosca con un cañón.</p>
<p>Hace poco más de un año dí con una solución, eficiente, agnóstica y que responde bien en todos los browsers&#8230; Para <abbr title="Internet Explorer">ie</abbr> a veces basta con agregar <code>defer</code> cómo atributo.</p>
<pre name="code" class="js">
&lt;script defer src=&quot;ie_load.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
</pre>
<p>Y el contenido del <code>ie_load.js</code> sería el script que <abbr title="Internet Explorer">ie</abbr> debe cargar cuando esté listo. Suena bien, pero es una solución que no funciona adecuadamente con los otros browsers que simplemente ignorarían el <code>defer</code>, Mozilla y Safari quedarían rezagados.</p>
<p>Afortunadamente Mozilla responde a su propio <code>DOMContentLoaded</code> entonces solo queda escuchar el evento y ejecutar lo que queramos con él:</p>
<pre name="code" class="js">
document.addEventListener(&quot;DOMContentLoaded&quot;, init, false);
</pre>
<p>Y John Resig, el creador de jQuery, dió con la solución para safari hace un tiempo:</p>
<pre name="code" class="js">
if (/WebKit/i.test(navigator.userAgent)) { // sniff
		var _timer = setInterval(function() {
			if (/loaded|complete/.test(document.readyState)) {
				init(); // call the onload handler
			}
		}, 10);
	}
</pre>
<p>Para los demás browsers, solo nos queda hacer uso del <code>window.onload</code> común y corriente que todos conocemos:</p>
<pre name="code" class="js">
window.onload = init;
</pre>
<p>Ya teniendo todos estos ingredientes dispuestos, solo queda hacerlos funcionar en conjunto, haciendo uso del soporte para compilaciones condicionales que tiene <abbr title="Internet Explorer">ie</abbr> <del datetime="2009-06-29T04:27:13+00:00">(para que no se meta con lo demás)</del> y uno que otro tweak, ponemos todo en un solo script que se encargue del <code>onload<code> adecuado para cada browser. </p>
<pre name="code" class="js">
function init() {
 		if (arguments.callee.done) return;

 		arguments.callee.done = true;

 		if (_timer) {
			clearInterval(_timer);
			_timer = null;
		}

		// Ac&aacute; va lo que queramos ejecutar

	};

	/* Para Mozilla */
	if (document.addEventListener) {
		document.addEventListener(&quot;DOMContentLoaded&quot;, init, false);
	}

	/* Para Internet Explorer */
	/*@cc_on @*/
	/*@if (@_win32)
		document.write(&quot;&lt;script id=__ie_onload defer src=javascript:void(0)&gt;&lt;\/script&gt;&quot;);
		var script = document.getElementById(&quot;__ie_onload&quot;);
		script.onreadystatechange = function() {
			if (this.readyState == &quot;complete&quot;) {
				init(); // call the onload handler
			}
		};
	/*@end @*/

	/* Soluci&oacute;n de John Resig Para Safari */
	if (/WebKit/i.test(navigator.userAgent)) { // sniff
		var _timer = setInterval(function() {
			if (/loaded|complete/.test(document.readyState)) {
				init(); // call the onload handler
			}
		}, 10);
	}
	window.onload = init;
</pre>
<p>Recuerdo que esta solución me ayudó bastante, en especial con SwfObject, así que espero que a alguien más le sirva de algo.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.elbleg.com/web-dev/javascript/como-solucionar-el-error-de-windowonload.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tip: Obtener datos desde un XML con jQuery</title>
		<link>http://www.elbleg.com/web-dev/javascript/tip-obtener-datos-desde-un-xml-con-jquery.html</link>
		<comments>http://www.elbleg.com/web-dev/javascript/tip-obtener-datos-desde-un-xml-con-jquery.html#comments</comments>
		<pubDate>Sun, 31 Aug 2008 04:48:24 +0000</pubDate>
		<dc:creator>Yëco</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Web Dev]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[XML]]></category>

		<guid isPermaLink="false">http://eldomo.net/yeco_blog/archives/tip-obtener-datos-desde-un-xml-con-jquery</guid>
		<description><![CDATA[Cargar datos con jQuery es una tarea sencilla que pesa básicamente sobre la función $.get, aquí un pequeño ejemplo de como implementarlo con XML y unas pocas lineas de código.


Observa el Script

Primero que nada, échale un ojo al siguiente XML, básicamente contiene información de algunos libros, con su titulo, descripción y una imagen de portada. [...]]]></description>
			<content:encoded><![CDATA[<p>Cargar datos con jQuery es una tarea sencilla que pesa básicamente sobre la función $.get, aquí un pequeño ejemplo de como implementarlo con XML y unas pocas lineas de código.
</p>
<p><span id="more-73"></span></p>
<h3>Observa el Script</h3>
<p>
Primero que nada, échale un ojo al siguiente XML, básicamente contiene información de algunos libros, con su titulo, descripción y una imagen de portada. Podés copiarlo y guardarlo como data.xml.</p>
<pre name="code" class="xml">

<books>
<book title="CSS Mastery" imageurl="images/css.jpg">
<description>
info goes here.
</description>
</book></books>

<book title="Professional PHP" imageurl="images/php.jpg">
<description>
info goes here.
</description>
</book>

<book title="Learning jQuery" imageurl="images/lj.jpg">
<description>
info goes here.
</description>
</book>
</pre>
<p>Y ahora el script en jQuery que hace el trabajo:</p>
<pre name="code" class="javascript">

$(function() {
$.get('data.xml', function(d){
$('body').append('
<h1>Recommended Web Development Books</h1>
<dl></dl>

');

$(d).find('book').each(function(){
var book = $(this);

$('dl')
.append('
<dt>' + book.attr('title') + '</dt>
<dd>
</dd>

')
.find('dd')
.append('<img src="http://eldomo.net/yeco_blog/wp-admin/%27%20+%20book.attr%28%27imageurl%27%29%20+%20%27" class="bookImage" />')
.append('
<p class="title">' + book.attr('title') + '

')
.append('

' + book.find('description').text() + '

');
});
});
});
</pre>
<h3>Ahora, desciframos el script</h3>
<p>
Cuando el documento queda listo para ser manipulado, obtenemos el XML usando la función <em>$.get</em>. Luego, en el paréntesis pasamos la ubicación del archivo y luego ejecutamos un callback cuando termine de cargarlo. En este caso usamos la variable &#8220;d&#8221; para representar la información que fue traida desde el XML. Despues creamos un titulo y una lista de definiciones.
</p>
<p>
Luego, buscamos dentro del XML y encontramos la etiqueta titulada &#8220;book&#8221;. Volviendo al XML, hay tres libros, entonces necesitaremos usar el método &#8220;each&#8221; para correr la operacion en cada uno. Recordá que &#8220;<em>each</em>&#8221; es lo mismo que &#8220;<em>for</em>&#8220;&#8230; simplemente un bucle que nos permite revisar cada uno de los elementos de un grupo de datos como este.
</p>
<p>
En el siguiente bloque, llenamos la lista de definiciones con la información de cada uno de los items que obtuvimos como respuesta y Con el fin de obtener el &#8220;<em>title</em>&#8220;, la &#8220;<em>description</em>&#8221; y el &#8220;<em>imageurl</em>&#8221; desde el XML, usamos &#8220;<em>book.attr(valor)</em>&#8221; &#8211; donde &#8220;valor&#8221; es equivalente a la info contenida en la etiqueta.</p>
<h3>Eso es todo</h3>
<p>
Cabe señalar que al script le falta un poco más de trabajo para usarse en aplicaciones grandes pero como punto de partida es bueno.</p>
<p>Dudas&#8230; sugerencias.. lo que sea&#8230; aqui abajito está la caja de comentarios&#8230; usála.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.elbleg.com/web-dev/javascript/tip-obtener-datos-desde-un-xml-con-jquery.html/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>
