<?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>emenia.es &#187; Cursos</title>
	<atom:link href="http://www.emenia.es/category/cursos/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.emenia.es</link>
	<description>Creación y diseño web</description>
	<lastBuildDate>Mon, 31 May 2010 14:34:56 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Curso de jQuery (4): Selectores, Tercera Parte</title>
		<link>http://www.emenia.es/curso-de-jquery-4-selectores-tercera-parte/</link>
		<comments>http://www.emenia.es/curso-de-jquery-4-selectores-tercera-parte/#comments</comments>
		<pubDate>Fri, 13 Nov 2009 13:05:40 +0000</pubDate>
		<dc:creator>Juan Diaz-Bustamante</dc:creator>
				<category><![CDATA[Cursos]]></category>
		<category><![CDATA[JQuery]]></category>

		<guid isPermaLink="false">http://emenia.es/?p=219</guid>
		<description><![CDATA[
			
				
			
		
Selectores utilizados para encontrar un elemento
Estos selectores encuentran otros elementos que guardan relación con los elementos previamente seleccionados (como los que encuentran descendientes, antecesores o hermanos de una selección anterior, por ejemplo)
.next(), .nextAll(), .prev(), .prevAll()
Estos métodos son bastante sencillos. Por ejemplo, si quisiéramos seleccionar sólo el elemento único siguiente hermano de cada elemento previamente seleccionado, [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.emenia.es%2Fcurso-de-jquery-4-selectores-tercera-parte%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.emenia.es%2Fcurso-de-jquery-4-selectores-tercera-parte%2F&amp;source=JuanDBB_Emenia&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<h3>Selectores utilizados para encontrar un elemento</h3>
<p>Estos selectores encuentran otros elementos que guardan relación con los elementos previamente seleccionados (como los que encuentran descendientes, antecesores o hermanos de una selección anterior, por ejemplo)</p>
<p><strong><em>.next(), .nextAll(), .prev(), .prevAll()</em></strong><br />
Estos métodos son bastante sencillos. Por ejemplo, si quisiéramos seleccionar sólo el elemento único siguiente hermano de cada elemento previamente seleccionado, utilizaríamos <em>.next()</em>. </p>
<p>Vamos a ver un ejemplo (tomado de <a href="http://docs.jquery.com/Traversing/next#expr">la web oficial de jQuery</a>):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">  $<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;button[disabled]&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">next</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">text</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;Este botón está desactivado&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span>
  <span style="color: #339933;">&lt;</span>style<span style="color: #339933;">&gt;</span>
  span <span style="color: #009900;">&#123;</span> color<span style="color: #339933;">:</span>blue<span style="color: #339933;">;</span> font<span style="color: #339933;">-</span>weight<span style="color: #339933;">:</span>bold<span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
  button <span style="color: #009900;">&#123;</span> width<span style="color: #339933;">:</span>100px<span style="color: #339933;">;</span> <span style="color: #009900;">&#125;</span>
  <span style="color: #339933;">&lt;/</span>style<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>head<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;</span>body<span style="color: #339933;">&gt;</span>
  <span style="color: #339933;">&lt;</span>div<span style="color: #339933;">&gt;&lt;</span>button disabled<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;disabled&quot;</span><span style="color: #339933;">&gt;</span>Primero<span style="color: #339933;">&lt;/</span>button<span style="color: #339933;">&gt;</span> <span style="color: #339933;">-</span> <span style="color: #339933;">&lt;</span>span<span style="color: #339933;">&gt;&lt;/</span>span<span style="color: #339933;">&gt;&lt;/</span>div<span style="color: #339933;">&gt;</span>
  <span style="color: #339933;">&lt;</span>div<span style="color: #339933;">&gt;&lt;</span>button<span style="color: #339933;">&gt;</span>Segundo<span style="color: #339933;">&lt;/</span>button<span style="color: #339933;">&gt;</span> <span style="color: #339933;">-</span> <span style="color: #339933;">&lt;</span>span<span style="color: #339933;">&gt;&lt;/</span>span<span style="color: #339933;">&gt;&lt;/</span>div<span style="color: #339933;">&gt;</span>
  <span style="color: #339933;">&lt;</span>div<span style="color: #339933;">&gt;&lt;</span>button disabled<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;disabled&quot;</span><span style="color: #339933;">&gt;</span>Tercero<span style="color: #339933;">&lt;/</span>button<span style="color: #339933;">&gt;</span> <span style="color: #339933;">-</span> <span style="color: #339933;">&lt;</span>span<span style="color: #339933;">&gt;&lt;/</span>span<span style="color: #339933;">&gt;&lt;/</span>div<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>body<span style="color: #339933;">&gt;</span>
<span style="color: #339933;">&lt;/</span>html<span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<p>Lo que hace es encontrar el hermano inmediatamente posterior de cada <em>button</em> con atributo <em>disabled</em> (el <em>span</em>) y cambiar su texto por &#8220;Este botón está desactivado&#8221;:</p>
<p><img src="http://emenia.es/wp-content/uploads/2009/11/next.png" alt="next" title="next" width="350" height="85" class="aligncenter size-full wp-image-210" /></p>
<p><img src="http://emenia.es/wp-content/uploads/2009/11/next1.png" alt="next" title="next" width="424" height="248" class="aligncenter size-full wp-image-270" /></p>
<p>Si quisiéramos seleccionar todos los hermanos que siguen al elemento seleccionado utilizaríamos <em>.nextAll()</em>. Por ejemplo, localizar todos los divs que siguen al primero y aplicarles una clase que llamaremos &#8220;rojo&#8221; y que implica un borde rojo alrededor del DIV (fuente: <a href="http://docs.jquery.com/Traversing/nextAll#expr">web oficial de jQuery</a>):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.01 Transitional//EN&quot; 
&quot;http://www.w3.org/TR/html4/loose.dtd&quot;&gt;
&lt;html&gt;
&lt;head&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://code.jquery.com/jquery-latest.js&quot;&gt;&lt;/script&gt;
  &lt;style&gt;
  div { width: 80px; height: 80px; background: #abc; 
        border: 2px solid black; margin: 10px; float: left; }
  div.rojo { border-color: red; }
  &lt;/style&gt; 
&lt;script&gt;
  $(document).ready(function(){
    $(&quot;div:first&quot;).nextAll().addClass(&quot;rojo&quot;);
  });
  &lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;div&gt;Primer DIV&lt;/div&gt;
  &lt;div&gt;DIV hermano&lt;div&gt;DIV hijo&lt;/div&gt;&lt;/div&gt;
  &lt;div&gt;DIV hermano&lt;/div&gt;
  &lt;div&gt;DIV hermano&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre></td></tr></table></div>

<p>El resultado es:</p>
<p><img src="http://emenia.es/wp-content/uploads/2009/11/selectores_nextall.png" alt="selectores_nextall" title="selectores_nextall" width="424" height="341" class="aligncenter size-full wp-image-245" /></p>
<p>Como vemos, en esta ocasión se ha cargado jQuery desde su web oficial. Esto nos permite (como vimos en la primera parte del curso) cargar siempre la última versión disponible. ¿Es esto recomendable? Depende, ya que hay veces que algún plugin o código que tengamos de jQuery en nuestra web no soporte la última versión de jQuery.</p>
<p>Sus contrarios son <em>.prev()</em> y <em>.prevAll()</em>, que nos sirven para seleccionar a los anteriores en vez de a los siguientes.</p>
<p><strong><em>.parent(), .parents(), .children(), .siblings()</em></strong><br />
<em>.parent()</em> obtiene el padre directo de un elemento. Si la selección es de un grupo de elementos, obtiene un grupo de sus padres directos únicos.</p>
<p>Por ejemplo, supongamos el ejemplo anterior cuando veíamos los botones dentro de un Div.  En este caso, seleccionaríamos el Div padre de cada botón y le aplicamos la clase rojo (que tendríamos definida en nuestra hoja de estilos como borde rojo) :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;button&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">parent</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;rojo&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p><img src="http://emenia.es/wp-content/uploads/2009/11/parent1.png" alt="parent" title="parent" width="424" height="341" class="aligncenter size-full wp-image-277" /></p>
<p><em>.parents()</em> obtiene un grupo de elementos que contienen los antecedentes únicos de el grupo de elementos previamente seleccionados (excepto el elemento raíz).</p>
<p><em>.children()</em> Obtiene un grupo de elementos que contienen todos los hijos inmediatos únicos de cada grupo de elementos reviamente seleccionados. Mientras .parents() devuelve todos los antecesores, .children() sólo considera los elementos hijo inmediatos.</p>
<p><em>.siblings()</em> obtiene un grupo de elementos que contienen todos los hermanos únicos del grupo de elementos seleccionados previamente.<br />
Por ejemplo, supongamos que queremos aplicar un fondo blanco a todos los elementos hermanos de <em>&#8220;p&#8221;</em> que tengan la clase <em>&#8220;nombredeclase&#8221;</em>:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;p&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">siblings</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;.nombredeclase&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;background&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;white&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p><strong><em>.contents()</em></strong><br />
Encuentra todos los nodos hijos de los elementos previamente seleccionados (incluyendo textos), o el contenido del documento si el elemento es un iframe.<br />
 Por ejemplo, si queremos seleccionar el <em>texto</em> que se encuentra en el interior de los elementos <em>&#8220;p&#8221;</em> (por ejemplo, para añadirle posteriormente más texto, etc..):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;p&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">contents</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p><strong><em>.add()</em></strong><br />
Añade más elementos -que cumplan con la selección que se encuentre dentro de los paréntesis de .add()- a la selección de elementos previamente seleccionados.</p>
<p>Por ejemplo, si habíamos seleccionado ya todos los elementos &#8220;p&#8221; de un documento y queremos añadir también los elementos &#8220;span&#8221;:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;p&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">add</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;span&quot;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p><strong><em>.closest()</em></strong><br />
Este selector se ha introducido por primera vez con jQuery 1.3 Obtiene un grupo de elementos que contenga el elemento padre más cercano que cumpla con el selector especificado, incluyendo al elemento inicial. Comienza comprobando primero si el elemento actual cumple con la selección especificada. Si es así devuelve ese elemento. En caso contrario continúa buscando en el elemento, padre a padre, hasta que encuentra un elemento que cumpla la condición dada.  Si no lo encuentra, no devuelve nada. Podéis ver un ejemplo muy interesante en <a href="http://docs.jquery.com/Traversing/closest#expr">la web oficial de jQuery</a>.</p>
<p><strong><em>.find()</em></strong><br />
Devuelve una nueva selección que contiene aquellos elementos descendientes de la selección previa que cumplen la condición dada dentro de los paréntesis de <em>find()</em>. Por ejemplo, si queremos seleccionar todos los <em>span</em> descendientes de elementos <em>p</em> haríamos:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'p'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'span'</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<h3>Encadenamientos</h3>
<p><strong><em>.not()</em></strong><br />
Es posible con jQuery seleccionar múltiples grupos de elementos y hacer múltiples cosas con ellos, todo en una única línea de código. Hemos visto que podemos partir de una selección inicial e ir reduciéndola o ampliándola. La nueva selección será la que estará activa para realizar sobre ella cualquier acción. Pero ¿qué pasa con la selección inicial? Podemos volver a ella en cualquier momento gracias al selector <em><strong>.end()</strong></em>   Vamos a ver un ejemplo. Supongamos que tenemos:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'div'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">add</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'a'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'background'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'black'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Hemos seleccionado todos los <em>div</em> del documento. Luego hemos creado un nuevo grupo que también contiene los elementos <em>a</em>. Cuando apliquemos el método css() lo haremos sobre el nuevo grupo creado. Pero ¿qué pasa si hacemos esto?:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'div'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">add</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'a'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'background'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'black'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">end</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'color'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'red'</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Después de aplicar el primer método <em>.css()</em> que crea un fondo negro hemos aplicado el método <em>.end()</em> devolviéndonos a la primera selección de los <em>div</em> sobre los que se aplicará el segundo método <em>.css()</em> que pone el color en rojo.</p>
<p><strong><em>.andSelf()</em></strong><br />
Otro método útil para afectar las cadenas de jQuery es el método <em>.andSelf()</em>, que crea un nuevo grupo de elementos a partir de los dos últimos grupos de elementos seleccionados. Por ejemplo:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'div'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'background,'</span>black<span style="color: #3366CC;">').children('</span>img<span style="color: #3366CC;">').css('</span>border<span style="color: #3366CC;">', '</span>5px solid red<span style="color: #3366CC;">').andSelf().css('</span>padding<span style="color: #3366CC;">','</span>10px<span style="color: #3366CC;">');</span></pre></td></tr></table></div>

<p>Hemos seleccionado todos los elementos <em>div</em> y les hemos dado un fondo negro. Después hemos seleccionado todos los elementos <em>img</em> hijos de los <em>div</em> anteriores y a estos les hemos aplicado un borde rojo de 5 píxeles. Y a continuación hemos unido las dos selecciones gracias a <em>.andSelf()</em> y les hemos aplicado a ambas un<em> padding </em>de 10px.</p>
<h3>Accediendo directamente a los elementos del DOM: el método get()</h3>
<p>Hay ocasiones en las que necesitamos acceder directamente a un elemento del DOM.  Para estas ocasiones jQuery ofrece el método <em>.get()</em></p>
<p>Por ejemplo, para seleccionar todos los elementos <em>div</em>:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'div'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">get</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>O para obtener el primer div( empezamos a contar desde cero):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'div'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">get</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">0</span><span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>Hasta aquí hemos visto los selectores de jQuery. Ahora la pregunta es: Vale, ya tengo unos elementos de mi web seleccionados. Ahora ¿Qué puedo hacer con ellos? Hemos visto pequeños avances en métodos como <em>.css()</em> para aplicar estilos CSS de manera directa o <em>.addClass()</em> para añadir el nombre de una clase, pero queda mucho por ver.<br />
¡Es en lo que entraremos en futuras entregas!</p>
<p>Mientras tanto, os recomiendo que utilicéis <a href="http://codylindley.com/jqueryselectors/" title="Ir a la página de selectores">está página</a> para practicar con selectores y ver los resultados que lo que escribimos en tiempo real.</p>
<h3>Otros capítulos del curso</h3>
<p><a href="http://emenia.es/curso-de-jquery-introduccion-1/" title="Ir al artículo">Curso de jQuery (1): Introducción</a><br />
<a href="http://emenia.es/curso-de-jquery-2-selectores-primera-parte/" title="Ir al artículo">Curso de jQuery (2): Selectores, Primera Parte</a><br />
<a href="http://emenia.es/curso-de-jquery-3-selectores-segunda-parte/" title="Ir al artículo">Curso de jQuery (3): Selectores, Segunda Parte</a></p>
<h3>Otras lecturas de interés</h3>
<p>Web oficial de <a href="http://jquery.com/" title="Ir a la web oficial de jQuery">jQuery</a><br />
designersmantra.com: <a href="http://designersmantra.com/?p=786" title="Ir al artículo">jQuery for Absolute Beginners: The Complete Series</a><br />
Woorkup: <a href="http://woorkup.com/2009/10/05/jquery-lesson-series-introduction-to-selectors/" title="Ir al artículo">jQuery Lesson Series: Introduction to Selectors</a><br />
Woorkup: <a href="http://woork.blogspot.com/2009/09/jquery-visual-cheat-sheet.html" title="Ir al artículo">jQuery Visual Cheat Sheet </a><br />
Cherrysave.com: <a href="http://www.cherrysave.com/programming/jquery-for-beginners-selectors-hierarchies-and-attributes-oh-my/" title="Ir al artículo">jQuery for Beginners: Selectors, Hierarchies and Attributes, Oh My!</a><br />
Mariuzzo.com: <a href="http://mariuzzo.com/cursos/introduccion-a-jquery/capitulo-2-selectores-en-jquery/">Capítulo 2, Selectores en jQuery</a><br />
VTOnline Enseñanza libre (video en Castellano), <a href="http://illasaron.com/upload/video/dbb8a24bed0497b/01-Curso-de-jQuery">01.- Curso de jQuery</a><br />
VTOnline Enseñanza libre (video en Castellano), <a href="http://illasaron.com/upload/video/b6413926ffad501/02-Curso-de-jQuery">02-Curso-de-jQuery</a><br />
VTOnline Enseñanza libre (video en Castellano), <a href="http://illasaron.com/upload/video/02ce6bd93fd420b/03-Curso-de-jQuery">03-Curso-de-jQuery</a></p>
<div id="crp_related"><h3>Artículos relacionados:</h3><ul><li><a href="http://www.emenia.es/curso-de-jquery-2-selectores-primera-parte/" rel="bookmark" class="crp_title">Curso de jQuery (2): Selectores, Primera Parte</a></li><li><a href="http://www.emenia.es/curso-de-jquery-3-selectores-segunda-parte/" rel="bookmark" class="crp_title">Curso de jQuery (3): Selectores, Segunda Parte</a></li><li><a href="http://www.emenia.es/curso-de-jquery-introduccion-1/" rel="bookmark" class="crp_title">Curso de jQuery (1): Introducción</a></li><li><a href="http://www.emenia.es/creando-un-menu-vertical-desplegable-con-jquery/" rel="bookmark" class="crp_title">Creando un menú vertical desplegable con jQuery</a></li><li><a href="http://www.emenia.es/efecto-de-movimiento-lateral-de-un-elemento-con-hover-en-jquery/" rel="bookmark" class="crp_title">Efecto de movimiento lateral de un enlace con JQuery</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.emenia.es/curso-de-jquery-4-selectores-tercera-parte/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Curso de jQuery (3): Selectores, Segunda Parte</title>
		<link>http://www.emenia.es/curso-de-jquery-3-selectores-segunda-parte/</link>
		<comments>http://www.emenia.es/curso-de-jquery-3-selectores-segunda-parte/#comments</comments>
		<pubDate>Wed, 04 Nov 2009 11:43:37 +0000</pubDate>
		<dc:creator>Juan Diaz-Bustamante</dc:creator>
				<category><![CDATA[Cursos]]></category>
		<category><![CDATA[JQuery]]></category>

		<guid isPermaLink="false">http://emenia.es/?p=191</guid>
		<description><![CDATA[Curso de jQuery, segunda entrega sobre selectores de jQuery: los Filtros.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.emenia.es%2Fcurso-de-jquery-3-selectores-segunda-parte%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.emenia.es%2Fcurso-de-jquery-3-selectores-segunda-parte%2F&amp;source=JuanDBB_Emenia&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>Vamos a seguir viendo selectores de jQuery. La mayor parte de los selectores que hemos visto hasta ahora nos permitían ir a través y hacia abajo del DOM (Document Object Model) o árbol de nuestro HTML (por ser más gráficos). Hay ocasiones en las que necesitamos acceder de manera más directa a un elemento. En este caso tenemos a nuestra disposición los <strong>métodos transversales</strong>, que nos permiten ir hacia arriba, hacia abajo y por todo el DOM sin problemas. En este artículo vamos a ver uno de ellos, los <em><strong>filtros</strong></em>:</p>
<h3>Filtros</h3>
<p>Son aquellos que concretan una selección de elementos ya realizada aplicando una selección adicional que limita la selección anterior (por ejemplo, hemos seleccionado previamente todos los elementos <em>div</em> y ahora queremos sólo el cuarto <em>div</em> de esa selección). Los filtros se distinguen así de los selectores que encuentran otros elementos que guardan relación con los elementos ya seleccionados (como los que encuentran descendientes, antecesores o hermanos de una selección anterior, por ejemplo, y que veremos en el artículo siguiente). <strong>Vamos a ver los filtros más importantes</strong>:</p>
<p><strong><em>El filtro .not()</em></strong><br />
<em><strong>.not()</strong></em> lo utilizaremos siempre que queramos seleccionar aquellos elementos que <em><strong>no</strong></em> cumplen con un determinado filtro situado dentro de los paréntesis del .not(). Por ejemplo, si queremos añadir un borde a aquellos divs que no tengan un fondo verde o azul (este ejemplo y los siguientes los he tomado de la <a href="http://docs.jquery.com/Traversing/not#expr">web oficial de jQuery</a>):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">not</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;.verde, #azul&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;border-color&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;red&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Primero selecciona todos los div del documento y luego selecciona aquellos que no tengan la clase &#8216;verde&#8217; ni el div &#8216;azul&#8217; y les aplica el estilo correspondiente de CSS.</p>
<p><img src="http://emenia.es/wp-content/uploads/2009/11/not.gif" alt="not" title="not" width="508" height="81" class="aligncenter size-full wp-image-225" /></p>
<p><strong><em>El filtro .filter()</em></strong><br />
Otra manera de filtrar una selección de elementos es reducirla a aquellos que <em><strong>sí</strong></em> cumplen con un filtro adicional, y lo hacemos a través de <em>.filter()</em></p>
<p>Por ejemplo, si queremos cambiar el color de fondo de todos los divs y después poner un borde alrededor de sólo los que tienen la clase <em>&#8216;centro&#8217;</em></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;background&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;#c8ebcc&quot;</span><span style="color: #009900;">&#41;</span>
            .<span style="color: #660066;">filter</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;.centro&quot;</span><span style="color: #009900;">&#41;</span>
            .<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;border-color&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;red&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p><img src="http://emenia.es/wp-content/uploads/2009/11/filter1.gif" alt="filter" title="filter" width="453" height="82" class="aligncenter size-full wp-image-229" /></p>
<p>Y viendo un ejemplo algo más complejo, vamos a aplicar la clase &#8216;imagen&#8217; a todas las imágenes de un documento, luego vamos a filtrar sólo las que tienen un <em>alt</em> que contenga la palabra &#8216;importante&#8217; y sólo a esas les vamos a aplicar la clase &#8216;borde&#8217; (para poder luego aplicarlas un borde a través de CSS o de jQuery, por ejemplo):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'img'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'imagen'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">filter</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'[alt*=importante]'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'borde'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Pero lo que hace a filter() realmente potente es que podemos incluir una función como parámetro del mismo, por ejemplo (obtenido de <a href="http://docs.jquery.com/Traversing/filter#fn">la web oficial de jQuery</a>):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;background&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;#b4b0da&quot;</span><span style="color: #009900;">&#41;</span>
            .<span style="color: #660066;">filter</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span> <span style="color: #009900;">&#40;</span>index<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                  <span style="color: #000066; font-weight: bold;">return</span> index <span style="color: #339933;">==</span> <span style="color: #CC0000;">1</span> <span style="color: #339933;">||</span> $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;id&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #3366CC;">&quot;cuatro&quot;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span>
            .<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;border&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;3px double red&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>lo que hace es aplicar un color de fondo a todos los div del documento y luego filtra con una función (si ponemos como parámetro de la función <em>index</em> tendremos un índice que nos valdrá como contador y que empieza a contar desde cero) el segundo div (el que tiene índice 1) y el div con el id &#8220;cuatro&#8221; para aplicarles luego un borde rojo de 3px. A través de la función iremos div a div en un bucle devolviendo los que cumplen la condición:</p>
<p><img src="http://emenia.es/wp-content/uploads/2009/11/filter.gif" alt="filter" title="filter" width="465" height="82" class="aligncenter size-full wp-image-207" /></p>
<p>No os preocupéis si no entendéis mucho de lo que se hace, lo importante es ver cómo funciona el selector. Sí destacar que dentro de la función aparece un término nuevo, <strong>$(this)</strong>. Veremos en próximos artículos del curso que <em>$(this)</em> se usa dentro de las funciones y hace referencia al elemento exacto al que afecta la función en ese momento, en este caso el div con id=&#8221;cuatro&#8221; (en vez de escribir<em> $(div).atrr(&#8216;id&#8217;)</em>). </p>
<p><strong><em>El filtro .slice(comienzo, final)</em></strong><br />
Hay ocasiones en las que queremos obtener una porción de una determinada selección de elementos basada en la <em>posición</em> de estos elementos dentro de la selección realizada. Entonces utilizamos .slice(), que creará una nueva selección. Admite dos parámetros, un número que indica el inicio (empezando por cero) donde vamos a realizar el corte y otro que indica el final <strong>no incluído</strong>. Este último valor es opcional. Vamos a ver un ejemplo:</p>
<p>Si seleccionamos todos los elementos<em> p</em> del documento y luego sólo queremos el tercer elemento haríamos:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'p'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">slice</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">2</span><span style="color: #339933;">,</span><span style="color: #CC0000;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>El primer número (donde se empieza a cortar la selección inicial) es un dos porque se empieza a contar desde cero: 0, 1, 2 es decir, empezamos a contar por el tercer elemento.  Para el final no incluído pone 3, es decir el cuarto elemento (0,1,2,3) por lo que de todos los <em>p</em> del documento solo se selecciona el tercero.</p>
<p><strong><em>El filtro .eq()</em></strong><br />
Reduce el grupo de elementos seleccionados a un elemento único. Su argumento (lo que va entre los paréntesis) es la posición del elemento dentro del grupo de elementos previamente seleccionados (que puede ser un número entre 0 y la longitud completa del número de elementos menos uno, al haber empezado en cero).</p>
<p>Por ejemplo (tomado de la <a href="http://docs.jquery.com/Traversing/eq#index">web oficial de jQuery</a>), vamos a cambiar el color de fondo del div con índice 2 (es decir, el tercer div) añadiendo la clase apropiada:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;div&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">eq</span><span style="color: #009900;">&#40;</span><span style="color: #CC0000;">2</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;azul&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p><img src="http://emenia.es/wp-content/uploads/2009/11/eq.gif" alt="eq" title="eq" width="502" height="81" class="aligncenter size-full wp-image-233" /></p>
<p><strong>Y esto es todo</strong>. Tenéis algún filtro más en <a href="http://docs.jquery.com/Traversing">la web oficial de jQuery</a>. El próximo artículo será el último con selectores antes de pasar a la acción con <em>Eventos</em>.</p>
<h3>Otros capítulos del curso</h3>
<p><a href="http://emenia.es/curso-de-jquery-introduccion-1/" title="Ir al artículo">Curso de jQuery (1): Introducción</a><br />
<a href="http://emenia.es/curso-de-jquery-2-selectores-primera-parte/" title="Ir al artículo">Curso de jQuery (2): Selectores, Primera Parte</a><br />
<a href="http://emenia.es/curso-de-jquery-4-selectores-tercera-parte/" title="Ir al artículo">Curso de jQuery (4): Selectores, Tercera Parte</a></p>
<div id="crp_related"><h3>Artículos relacionados:</h3><ul><li><a href="http://www.emenia.es/curso-de-jquery-2-selectores-primera-parte/" rel="bookmark" class="crp_title">Curso de jQuery (2): Selectores, Primera Parte</a></li><li><a href="http://www.emenia.es/curso-de-jquery-introduccion-1/" rel="bookmark" class="crp_title">Curso de jQuery (1): Introducción</a></li><li><a href="http://www.emenia.es/curso-de-jquery-4-selectores-tercera-parte/" rel="bookmark" class="crp_title">Curso de jQuery (4): Selectores, Tercera Parte</a></li><li><a href="http://www.emenia.es/creando-un-menu-vertical-desplegable-con-jquery/" rel="bookmark" class="crp_title">Creando un menú vertical desplegable con jQuery</a></li><li><a href="http://www.emenia.es/efecto-de-movimiento-lateral-de-un-elemento-con-hover-en-jquery/" rel="bookmark" class="crp_title">Efecto de movimiento lateral de un enlace con JQuery</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.emenia.es/curso-de-jquery-3-selectores-segunda-parte/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Curso de jQuery (2): Selectores, Primera Parte</title>
		<link>http://www.emenia.es/curso-de-jquery-2-selectores-primera-parte/</link>
		<comments>http://www.emenia.es/curso-de-jquery-2-selectores-primera-parte/#comments</comments>
		<pubDate>Wed, 28 Oct 2009 07:23:02 +0000</pubDate>
		<dc:creator>Juan Diaz-Bustamante</dc:creator>
				<category><![CDATA[Cursos]]></category>
		<category><![CDATA[JQuery]]></category>

		<guid isPermaLink="false">http://emenia.es/?p=173</guid>
		<description><![CDATA[Primera parte de la siguiente entrega del curso de jQuery: Los Selectores]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.emenia.es%2Fcurso-de-jquery-2-selectores-primera-parte%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.emenia.es%2Fcurso-de-jquery-2-selectores-primera-parte%2F&amp;source=JuanDBB_Emenia&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p><strong>Por un<em> selector </em>entendemos en jQuery lo mismo que en CSS</strong>: una forma de permitirnos elegir un elemento (o varios) entre todos los que tenemos en nuestro documento HTML.<strong> ¿Para qué?</strong> Para luego poder aplicar sobre los elementos seleccionados diversas funciones.</p>
<p>Es decir, <strong>jQuery</strong> utiliza el poder de los <strong>selectores</strong> para acceder de una manera rápida y sencilla a un elemento o grupo de elementos del DOM (Document Object Model)<strong> y luego poder aplicar sobre los mismos cualquier tipo de instrucción, evento, animación, etc&#8230;</strong>. Por ejemplo, para aplicar la clase &#8220;enlace&#8221; a todos los elementos &#8220;a&#8221; que se encuentren dentro de un elemento &#8220;p&#8221;. Haríamos:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'p a'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">addClass</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'enlace'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Pero vamos a empezar desde el principio. En este artículo vamos a ver cómo crear los selectores más importantes de jQuery.</p>
<p>Antes de nada es importante saber que el DOM (Document Object Model, el esqueleto de nuestra página web) utiliza una estructura de árbol para definir las relaciones entre sus elementos, en la que tenemos padres, hijos, etc&#8230; Por ejemplo:</p>
<p><img src="http://emenia.es/wp-content/uploads/2009/10/dom.png" alt="dom" title="dom" width="500" height="265" class="aligncenter size-full wp-image-174" /></p>
<h3>$(&#8217;selector&#8217;)</h3>
<p>No importa qué tipo de selector usemos en jQuery: siempre comenzaremos con <strong><em>$()</em></strong>. Prácticamente todo lo que se pueda usar en CSS se puede también incluir entre esos paréntesis de esta forma <strong><em>$(&#8217;selectores&#8217;)</em></strong>. De tal manera que por ejemplo podríamos hacer:</p>
<p><img src="http://emenia.es/wp-content/uploads/2009/10/selectores.png" alt="selectores" title="selectores" width="500" height="212" class="aligncenter size-full wp-image-175" /></p>
<h3>Selectores CSS</h3>
<p>jQuery soporta prácticamente todos los <strong>selectores de CSS</strong>, con la ventaja de que podemos utilizar selectores de CSS3 que funcionen con Internet Explorer 6 gracias a jQuery. Lo vemos mejor con estos ejemplos:</p>
<p><img src="http://emenia.es/wp-content/uploads/2009/10/selectores_css.png" alt="selectores_css" title="selectores_css" width="500" height="631" class="aligncenter size-full wp-image-176" /></p>
<h3>Selectores propios de jQuery</h3>
<p>A la amplia variedad de selectores propios de CSS jQuery añade sus propios selectores. Como característica que les distingue decir que siempre comienzan por dos puntos (:)</p>
<p>Vamos a distinguir entre ellos:</p>
<p><strong><em>Selectores Posicionales</em></strong><br />
Estos selectores están basados en las relaciones posicionales entre elementos (como veíamos antes en ejemplo de la estructura del DOM). Como antes, los vamos a ver a través de ejemplos:</p>
<p><img src="http://emenia.es/wp-content/uploads/2009/10/selectores_positional1.png" alt="selectores_positional" title="selectores_positional" width="500" height="631" class="aligncenter size-full wp-image-193" /></p>
<p><strong><em>Selectores de Formularios</em></strong><br />
Cuando trabajemos con formularios jQuery nos ofrece una serie de selectores propios que nos permiten seleccionar de manera sencilla el elemento preciso. Vamos a verlos con ejemplos:</p>
<p><img src="http://emenia.es/wp-content/uploads/2009/10/selectores_formulario.png" alt="selectores_formulario" title="selectores_formulario" width="500" height="631" class="aligncenter size-full wp-image-178" /></p>
<p><strong>En el próximo artículo veremos selectores más avanzados así como combinaciones en cadena de selectores.</strong></p>
<h3>Otros capítulos del curso</h3>
<p><a href="http://emenia.es/curso-de-jquery-introduccion-1/" title="Ir al artículo">Curso de jQuery (1): Introducción</a><br />
<a href="http://emenia.es/curso-de-jquery-3-selectores-segunda-parte/" title="Ir al artículo">Curso de jQuery (3): Selectores, Segunda Parte</a><br />
<a href="http://emenia.es/curso-de-jquery-4-selectores-tercera-parte/" title="Ir al artículo">Curso de jQuery (4): Selectores, Tercera Parte</a></p>
<h3>Lecturas Recomendadas:</h3>
<p>Blog de Andrés Nieto, <a href="http://www.anieto2k.com/2006/09/06/selectores-css-que-deberias-conocer/" title="Ir al blog de Andrés Nieto">Selectores CSS que deberías conocer</a>.<br />
Nosolocodigo: <a href="http://www.nosolocodigo.com/tutorial-de-iniciacion-a-jquery-los-selectores" title="Ir a Nosolocodigo">Tutorial de iniciación a jQuery : los selectores</a>.<br />
WoorkUp: <a href="http://woorkup.com/2009/10/05/jquery-lesson-series-introduction-to-selectors/" title="Ir a WoorkUp">jQuery Lesson Series: Introduction to Selectors</a></p>
<div id="crp_related"><h3>Artículos relacionados:</h3><ul><li><a href="http://www.emenia.es/curso-de-jquery-3-selectores-segunda-parte/" rel="bookmark" class="crp_title">Curso de jQuery (3): Selectores, Segunda Parte</a></li><li><a href="http://www.emenia.es/curso-de-jquery-introduccion-1/" rel="bookmark" class="crp_title">Curso de jQuery (1): Introducción</a></li><li><a href="http://www.emenia.es/curso-de-jquery-4-selectores-tercera-parte/" rel="bookmark" class="crp_title">Curso de jQuery (4): Selectores, Tercera Parte</a></li><li><a href="http://www.emenia.es/creando-un-menu-vertical-desplegable-con-jquery/" rel="bookmark" class="crp_title">Creando un menú vertical desplegable con jQuery</a></li><li><a href="http://www.emenia.es/efecto-de-movimiento-lateral-de-un-elemento-con-hover-en-jquery/" rel="bookmark" class="crp_title">Efecto de movimiento lateral de un enlace con JQuery</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.emenia.es/curso-de-jquery-2-selectores-primera-parte/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Curso de jQuery (1): Introducción</title>
		<link>http://www.emenia.es/curso-de-jquery-introduccion-1/</link>
		<comments>http://www.emenia.es/curso-de-jquery-introduccion-1/#comments</comments>
		<pubDate>Wed, 21 Oct 2009 06:22:32 +0000</pubDate>
		<dc:creator>Juan Diaz-Bustamante</dc:creator>
				<category><![CDATA[Cursos]]></category>
		<category><![CDATA[JQuery]]></category>

		<guid isPermaLink="false">http://emenia.es/?p=154</guid>
		<description><![CDATA[Empezamos un curso básico sobre jQuery, la librería de Javascript probablemente más utilizada en la actualidad. Publicaré un artículo todos los Miércoles.]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.emenia.es%2Fcurso-de-jquery-introduccion-1%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.emenia.es%2Fcurso-de-jquery-introduccion-1%2F&amp;source=JuanDBB_Emenia&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>Voy a comenzar con este artículo un curso básico sobre jQuery, la librería de Javascript probablemente más utilizada en la actualidad.</p>
<p><a href="http://jquery.com/">jQuery</a> fue creada inicialmente por <a href="http://ejohn.org/">John Resig</a> y nos permite de una manera sencilla y eficiente:<br />
- Acceder a elementos en un documento.<br />
- Modificar la apariencia de una web.<br />
- Alterar el contenido de un documento.<br />
- Responder a una interacción del usuario.<br />
- Animar cambios en un documento.<br />
- Recoger información del servidor sin refrescar la página.<br />
- Tareas diversas de Javascript.</p>
<p>Además nos permite hacerlo sin tener que preocuparnos más por las diferencias entre navegadores, como pasa en muchas ocasiones si utilizamos directamente Javascript.</p>
<p><strong>¿Cómo se añade jQuery a nuestra web?</strong></p>
<p>En primer lugar tenemos que bajarnos la versión más actual de jQuery. Esto lo podemos hacer desde la propia <a href="http://jquery.com/">web de jQuery</a> haciendo click sobre el botón <em>Download (jQuery)</em>. La versión en el momento de escribir este artículo es la 1.3.2</p>
<p>Una vez tengamos el archivo lo podemos poner en la carpeta donde guardemos los archivos de Javascript del proyecto (por ejemplo<em> js</em>). Luego en la cabecera del código de nuestra web añadimos jQuery como lo haríamos con cualquier archivo de Javascript:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;
   &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; lang=&quot;es&quot; xml:lang=&quot;es&quot;&gt;
&lt;head&gt;
	&lt;title&gt;TITULO DE LA WEB&lt;/title&gt;
	&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=iso-8859-1&quot; /&gt;
	&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;css/default.css&quot; /&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery-1.3.2.min.js &quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
 // Contenido de la Web
&lt;/body&gt;
&lt;/html&gt;</pre></td></tr></table></div>

<p>Otra forma alternativa de incluir jQuery, preferida por muchos autores, es descargarla directamente de Google. Se haría así:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">&lt;/html&gt;&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;
   &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; lang=&quot;es&quot; xml:lang=&quot;es&quot;&gt;
&lt;head&gt;
	&lt;title&gt;TITULO DE LA WEB&lt;/title&gt;
	&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=iso-8859-1&quot; /&gt;
	&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;css/default.css&quot; /&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&nbsp;
  // Contenido de la Web
&nbsp;
&lt;/body&gt;
&lt;/html&gt;</pre></td></tr></table></div>

<p>Si estáis usando Wordpress y queréis que no se utilice la versión que incorpora de jQuery y preferís que la cargue desde Google lo único que hay que hacer es añadir estas líneas al archivo <strong>functions.php</strong> de vuestro tema:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span>is_admin<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
   wp_deregister_script<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'jquery'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
   wp_register_script<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'jquery'</span><span style="color: #339933;">,</span> <span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'1.3.2'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
   wp_enqueue_script<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'jquery'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Y una tercera manera de cargar jQuery, siempre la última versión disponible, es descargarlo de su web oficial:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span> src<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;http://code.jquery.com/jquery-latest.js&quot;</span><span style="color: #339933;">&gt;&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<p>Bueno, ya tenemos la librería jQuery en nuestra web. Pero esto por sí solo no hace nada. Pero ya podemos incluir cualquier código o funciones de jQuery con vistas a realizar cualquiera de las tareas que antes veíamos que se pueden hacer gracias a jQuery.</p>
<p><strong>¿Cómo se añade código de jQuery?</strong></p>
<p>Para explicar cómo se introduce código de jQuery vamos a comenzar con un ejemplo básico. Vamos a añadir la clase &#8220;fondo-destacado&#8221; a un Div que tiene un id llamado &#8220;contenido&#8221;.</p>
<p>Tenemos:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;
   &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; lang=&quot;es&quot; xml:lang=&quot;es&quot;&gt;
&lt;head&gt;
	&lt;title&gt;TITULO DE LA WEB&lt;/title&gt;
	&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=iso-8859-1&quot; /&gt;
	&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;css/default.css&quot; /&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery-1.3.2.min.js &quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h3&gt;Esta es una prueba de jQuery&lt;/h3&gt;
&lt;div id=&quot;contenido&quot;&gt;
&lt;p&gt;Esta es una prueba de jQuery en la que vamos a añadir la clase &quot;fondo-destacado&quot; al Div con el id=&quot;contenido&quot;&lt;/p&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre></td></tr></table></div>

<p>Supongamos también que nuestra hoja de estilo default.css tiene la siguiente clase definida:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="css" style="font-family:monospace;"><span style="color: #6666ff;">.fondo-destacado</span> <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">background-color</span><span style="color: #00AA00;">:</span> <span style="color: #993333;">red</span><span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span></pre></td></tr></table></div>

<p>Para añadir un código de jQuery que se ejecute en cuanto se cargue el documento de nuestra web (y por lo tanto está ya disponible el div con el id &#8220;contenido&#8221; de nuestro ejemplo) añadimos las siguientes líneas:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">&lt;script type=&quot;text/javascript&quot;&gt;
$(document).ready(function() {
&nbsp;
// líneas de código de jQuery
&nbsp;
});
&lt;/script&gt;</pre></td></tr></table></div>

<p>Es decir, cuando el documento<em> (document)</em> esté listo <em>(ready)</em> ejecutar la función que sigue a continuación. </p>
<p><strong>Este comienzo es típico de JQuery </strong>y lo que dice es que cuando el documento<em> (document)</em> esté listo <em>(ready)</em> se ejecute la función que sigue a continuación. El documento es el DOM (Document Object Model). Merece la pena distinguir esto de la manera tradicional utilizada en Javascript:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span><span style="color: #339933;">&gt;</span>
    window.<span style="color: #000066;">onload</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span></pre></td></tr></table></div>

<p>Con window.onload lo que hacíamos es que la función no se iba a ejecutar hasta que no se cargara la web completa (no sólo el DOM), es decir, todas las imágenes y recursos externos. Esto implicaba que si había alguna imagen de carga muy lenta cualquier evento gestionado con Javascript no iba a funcionar hasta que no se cargara esa imagen. Este impedimento lo evitamos con el $(document).ready de JQuery.</p>
<p>En nuestro caso las líneas de código necesarias serán estas:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">&lt;!DOCTYPE html PUBLIC &quot;-//W3C//DTD XHTML 1.0 Transitional//EN&quot;
   &quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&quot;&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; lang=&quot;es&quot; xml:lang=&quot;es&quot;&gt;
&lt;head&gt;
	&lt;title&gt;TITULO DE LA WEB&lt;/title&gt;
	&lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=iso-8859-1&quot; /&gt;
	&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;css/default.css&quot; /&gt;
	&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery-1.3.2.min.js &quot;&gt;&lt;/script&gt;
        &lt;script type=&quot;text/javascript&quot;&gt;
           $(document).ready(function() {
              $('#contenido').addClass('fondo-destacado');
          });
       &lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h3&gt;Esta es una prueba de jQuery&lt;/h3&gt;
&lt;div id=&quot;contenido&quot;&gt;
&lt;p&gt;Esta es una prueba de jQuery en la que vamos a añadir la clase &quot;fondo-destacado&quot; al Div con el id=&quot;contenido&quot;&lt;/p&gt;
&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;</pre></td></tr></table></div>

<p>La operación fundamental en jQuery es seleccionar la parte del documento sobre la que se va a actuar. Esto se hace con el constructor<em>$()</em>. Normalmente su parámetro, lo que incluimos entre los paréntesis, es una línea de texto que puede incluir cualquier selector de CSS. En este caso queremos encontrar en el documento un <em>Div</em>  con un <em>id</em> llamado <em>&#8220;contenido&#8221;</em>, es decir:  <em>$(&#8216;#contenido&#8217;)</em>.  Esto es lo que se llama un <em><strong>selector</strong></em>. </p>
<p>A continuación gracias al <em><strong>método</strong></em> de jQuery  <em>.addClass()</em> añadimos una clase de CSS a la parte de la página que hemos seleccionado anteriormente, es decir al Div con id=&#8221;contenido&#8221;. Su único parámetro es el nombre de la clase, escrito entre comillas: <em>.addClass(&#8216;fondo-destacado&#8217;); </em></p>
<p>Este simple ejemplo muestra cómo funciona jQuery. No es un ejemplo muy útil para situaciones reales, pero nos sirve para introducirnos en el lenguaje. En el siguiente artículo veremos cómo incluir selectores más complejos que el que hemos creado en ejemplo.</p>
<h3>Otros capítulos del curso</h3>
<p><a href="http://emenia.es/curso-de-jquery-2-selectores-primera-parte/" title="Ir al artículo">Curso de jQuery (2): Selectores, Primera Parte</a><br />
<a href="http://emenia.es/curso-de-jquery-3-selectores-segunda-parte/" title="Ir al artículo">Curso de jQuery (3): Selectores, Segunda Parte</a><br />
<a href="http://emenia.es/curso-de-jquery-4-selectores-tercera-parte/" title="Ir al artículo">Curso de jQuery (4): Selectores, Tercera Parte</a></p>
<h3>Lecturas recomendadas</h3>
<p>netnuts+:<a href="http://net.tutsplus.com/articles/web-roundups/jquery-for-absolute-beginners-video-series/"> jQuery for Absolute Beginners: The Complete Series</a><br />
CSSTricks: <a href="http://css-tricks.com/video-screencasts/35-intro-to-jquery-2/">Intro to jQuery 2</a><br />
SohTanaka: <a href="http://www.sohtanaka.com/web-design/jquery-easy-tips-tricks-tutorial/">New to jQuery? Don’t be Scurred…</a><br />
jQuery.com: <a href="http://jquery.com/">Página oficial de jQuery</a></p>
<div id="crp_related"><h3>Artículos relacionados:</h3><ul><li><a href="http://www.emenia.es/curso-de-jquery-2-selectores-primera-parte/" rel="bookmark" class="crp_title">Curso de jQuery (2): Selectores, Primera Parte</a></li><li><a href="http://www.emenia.es/curso-de-jquery-3-selectores-segunda-parte/" rel="bookmark" class="crp_title">Curso de jQuery (3): Selectores, Segunda Parte</a></li><li><a href="http://www.emenia.es/curso-de-jquery-4-selectores-tercera-parte/" rel="bookmark" class="crp_title">Curso de jQuery (4): Selectores, Tercera Parte</a></li><li><a href="http://www.emenia.es/creando-un-menu-vertical-desplegable-con-jquery/" rel="bookmark" class="crp_title">Creando un menú vertical desplegable con jQuery</a></li><li><a href="http://www.emenia.es/lista-desplegable-y-plegable-con-jquery/" rel="bookmark" class="crp_title">Lista desplegable y plegable con jQuery</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.emenia.es/curso-de-jquery-introduccion-1/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
