<?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; JQuery</title>
	<atom:link href="http://www.emenia.es/category/jquery/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>Creando un menú vertical desplegable con jQuery (2)</title>
		<link>http://www.emenia.es/creando-un-menu-vertical-desplegable-con-jquery-2/</link>
		<comments>http://www.emenia.es/creando-un-menu-vertical-desplegable-con-jquery-2/#comments</comments>
		<pubDate>Thu, 15 Apr 2010 06:10:07 +0000</pubDate>
		<dc:creator>Juan Diaz-Bustamante</dc:creator>
				<category><![CDATA[JQuery]]></category>

		<guid isPermaLink="false">http://www.emenia.es/?p=853</guid>
		<description><![CDATA[Tras una pregunta de Saúl sobre el artículo <a href="http://www.emenia.es/creando-un-menu-vertical-desplegable-con-jquery/">Creando un menú vertical desplegable con jQuery</a> en la que me preguntaba cómo lograr que al abrir una opción del menú se cerrara cualquier otra que estuviera abierta (podéis ver la pregunta en la zona de comentarios del artículo anterior) he actualizado (bueno, básicamente cambiado) el código para que pueda hacerse lo que pide Saúl. Aunque lo he puesto en los comentarios respondiéndole me he animado a crear una nueva entrada por si a alguien le fuera de interés.]]></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%2Fcreando-un-menu-vertical-desplegable-con-jquery-2%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.emenia.es%2Fcreando-un-menu-vertical-desplegable-con-jquery-2%2F&amp;source=JuanDBB_Emenia&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>Tras una pregunta de Saúl sobre el artículo <a href="http://www.emenia.es/creando-un-menu-vertical-desplegable-con-jquery/">Creando un menú vertical desplegable con jQuery</a> en la que me preguntaba cómo lograr que al abrir una opción del menú se cerrara cualquier otra que estuviera abierta (podéis ver la pregunta en la zona de comentarios del artículo anterior) he actualizado (bueno, básicamente cambiado) el código para que pueda hacerse lo que pide Saúl. Aunque lo he puesto en los comentarios respondiéndole me he animado a crear una nueva entrada por si a alguien le fuera de interés.</p>
<p>Lo que queremos conseguir es esto: <a href="http://www.emenia.es/demos-blog/menu-desplegable2/" rel="nofollow">Ejemplo de menú vertical desplegable con jQuery con efecto acordeón</a></p>
<p>Como veréis en el ejemplo, el código HTML completo del navegador es:</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;ul class=&quot;navegador&quot;&gt;
  &lt;li&gt;&lt;a href=&quot;#&quot; class=&quot;desplegable&quot; title=&quot;Venta&quot;&gt;Venta&lt;/a&gt;
    &lt;ul class=&quot;subnavegador&quot;&gt;
      &lt;li&gt;&lt;a href=&quot;#&quot; title=&quot;Viviendas&quot;&gt;Viviendas&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#&quot; title=&quot;Aparcamientos&quot;&gt;Aparcamientos&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a class=&quot;desplegable&quot; href=&quot;#&quot; title=&quot;Alquiler&quot;&gt;Alquiler&lt;/a&gt;
    &lt;ul class=&quot;subnavegador&quot;&gt;
       &lt;li&gt;&lt;a href=&quot;#&quot; title=&quot;Viviendas&quot;&gt;Viviendas&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#&quot; title=&quot;Oficinas&quot;&gt;Oficinas&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#&quot; title=&quot;Ofertas&quot;&gt;Ofertas&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#&quot; title=&quot;Oficina de Ventas&quot;&gt;Oficina de Ventas&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</pre></td></tr></table></div>

<p>Y el código jQuery que lo hace posible:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="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>
  $<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: #006600; font-style: italic;">// Script del Navegador</span>
    $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;ul.subnavegador&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">not</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.selected'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">hide</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;a.desplegable&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>e<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
      <span style="color: #003366; font-weight: bold;">var</span> desplegable <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;">parent</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;ul.subnavegador&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'.desplegable'</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;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;ul.subnavegador&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">not</span><span style="color: #009900;">&#40;</span>desplegable<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">slideUp</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'slow'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      desplegable.<span style="color: #660066;">slideToggle</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'slow'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      e.<span style="color: #660066;">preventDefault</span><span style="color: #009900;">&#40;</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: #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></pre></td></tr></table></div>

<p>Si tenéis alguna pregunta no dudéis en preguntar.</p>
<div id="crp_related"><h3>Artículos relacionados:</h3><ul><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><li><a href="http://www.emenia.es/como-pre-cargar-imagenes-con-jquery/" rel="bookmark" class="crp_title">Cómo pre-cargar imágenes con jQuery</a></li><li><a href="http://www.emenia.es/como-separar-los-articulos-por-categorias-en-wordpress/" rel="bookmark" class="crp_title">Cómo separar los artículos por categorías en Wordpress</a></li><li><a href="http://www.emenia.es/recopilacion-de-45-trucos-para-wordpress/" rel="bookmark" class="crp_title">Recopilación de 45 trucos para Wordpress</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.emenia.es/creando-un-menu-vertical-desplegable-con-jquery-2/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Elegir una fecha en un formulario con un calendario y jQuery</title>
		<link>http://www.emenia.es/calendario-formulario-jquery/</link>
		<comments>http://www.emenia.es/calendario-formulario-jquery/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 21:56:56 +0000</pubDate>
		<dc:creator>Juan Diaz-Bustamante</dc:creator>
				<category><![CDATA[JQuery]]></category>

		<guid isPermaLink="false">http://www.emenia.es/?p=615</guid>
		<description><![CDATA[Vamos a ver cómo crear un calendario que se abra de manera automática para introducir una fecha en un formulario. Lo haremos con jQuery y su plugin Query UI Datepicker]]></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%2Fcalendario-formulario-jquery%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.emenia.es%2Fcalendario-formulario-jquery%2F&amp;source=JuanDBB_Emenia&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>En ocasiones necesitamos crear un formulario donde alguno de los campos requieren la selección de una fecha por parte del usuario, por ejemplo para la reserva de la habitación de un hotel, la compra de un billete de tren, etc..</p>
<p>La mejor manera de solicitar una fecha al usuario es a través de un calendario que se despliegue a la hora de introducir la fecha. Es lo que vamos a hacer en este ejemplo.</p>
<p>Para ello vamos a utilizar el plugin <a href="http://docs.jquery.com/UI/Datepicker" title="Ir a la web de UI Datapicker">jQuery UI Datepicker</a>. </p>
<p>Lo que vamos a conseguir es esto:</p>
<p><a href="http://www.emenia.es/wp-content/uploads/2010/02/imagen_blog.jpg"><img src="http://www.emenia.es/wp-content/uploads/2010/02/imagen_blog.jpg" alt="" title="imagen_blog" width="417" height="230" class="aligncenter size-full wp-image-620" /></a></p>
<p>Para utilizarlo necesitamos:</p>
<p>1) <strong>jQuery</strong>, por supuesto:</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://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js&quot;</span><span style="color: #339933;">&gt;&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<p>2) <strong>jQuery UI</strong>:</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://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js&quot;</span><span style="color: #339933;">&gt;&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<p>3) En cuanto a estilos, utilizaremos el <a href="http://jqueryui.com/themeroller/?ctl=themeroller">jQuery UI CSS Framework</a> (esta línea debería ir antes de las dos anteriores en nuestro código):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;css/jquery-ui-1.7.2.custom.css&quot; /&gt;</pre></td></tr></table></div>

<p>Y sus iconos:<br />
<a href="http://www.emenia.es/wp-content/uploads/2010/02/ui-icons_222222_256x240.png"><img src="http://www.emenia.es/wp-content/uploads/2010/02/ui-icons_222222_256x240.png" alt="" title="ui-icons_222222_256x240" width="256" height="240" class="aligncenter size-full wp-image-617" /></a></p>
<p>Si seguimos las instrucciones del plugin, vemos que utilizar el calendario para seleccionar una fecha es realmente sencillo. Sólo hay que escribir, en su forma más básica:</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: #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>
$<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;#datepicker&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">datepicker</span><span style="color: #009900;">&#40;</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></pre></td></tr></table></div>

<p>Siendo en este caso &#8220;#datapicker&#8221; el id del input del formulario al que aplicamos el calendario:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">&lt;input type=&quot;text&quot; name=&quot;datepicker&quot; id=&quot;datepicker&quot; readonly=&quot;readonly&quot; size=&quot;12&quot; /&gt;</pre></td></tr></table></div>

<p>Como veréis le hemos añadido el atributo <em>readonly</em> para que no pueda ser modificado el contenido del input por el usuario, es decir, que se quede la fecha elegida sin poder alterarla manualmente. Aunque algunos autores lo incluyen, es probable que sea mejor no incluirlo, ya que si Javascript está desactivado no podríamos escribir nada en el input.</p>
<p>Si unís todo el código anterior veréis que el calendario sale en inglés. Para ponerlo en Castellano (también se puede poner en Catalán o en Euskera) tenemos los <a href="http://jquery-ui.googlecode.com/svn/trunk/ui/i18n/" title="Ver los archivos de localización">archivos de localización</a>.</p>
<p>En concreto, para que esté en Castellano:</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="javascript" style="font-family:monospace;">jQuery<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: #660066;">datepicker</span>.<span style="color: #660066;">regional</span><span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'es'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #009900;">&#123;</span>
		closeText<span style="color: #339933;">:</span> <span style="color: #3366CC;">'Cerrar'</span><span style="color: #339933;">,</span>
		prevText<span style="color: #339933;">:</span> <span style="color: #3366CC;">'&amp;#x3c;Ant'</span><span style="color: #339933;">,</span>
		nextText<span style="color: #339933;">:</span> <span style="color: #3366CC;">'Sig&amp;#x3e;'</span><span style="color: #339933;">,</span>
		currentText<span style="color: #339933;">:</span> <span style="color: #3366CC;">'Hoy'</span><span style="color: #339933;">,</span>
		monthNames<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'Enero'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Febrero'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Marzo'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Abril'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Mayo'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Junio'</span><span style="color: #339933;">,</span>
		<span style="color: #3366CC;">'Julio'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Agosto'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Septiembre'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Octubre'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Noviembre'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Diciembre'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
		monthNamesShort<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'Ene'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Feb'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Mar'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Abr'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'May'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Jun'</span><span style="color: #339933;">,</span>
		<span style="color: #3366CC;">'Jul'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Ago'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Sep'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Oct'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Nov'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Dic'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
		dayNames<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'Domingo'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Lunes'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Martes'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Mi&amp;eacute;rcoles'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Jueves'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Viernes'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'S&amp;aacute;bado'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
		dayNamesShort<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'Dom'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Lun'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Mar'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Mi&amp;eacute;'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Juv'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Vie'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'S&amp;aacute;b'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
		dayNamesMin<span style="color: #339933;">:</span> <span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'Do'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Lu'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Ma'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Mi'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Ju'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'Vi'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'S&amp;aacute;'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">,</span>
		weekHeader<span style="color: #339933;">:</span> <span style="color: #3366CC;">'Sm'</span><span style="color: #339933;">,</span>
		dateFormat<span style="color: #339933;">:</span> <span style="color: #3366CC;">'dd/mm/yy'</span><span style="color: #339933;">,</span>
		firstDay<span style="color: #339933;">:</span> <span style="color: #CC0000;">1</span><span style="color: #339933;">,</span>
		isRTL<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">,</span>
		showMonthAfterYear<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">false</span><span style="color: #339933;">,</span>
		yearSuffix<span style="color: #339933;">:</span> <span style="color: #3366CC;">''</span><span style="color: #009900;">&#125;</span><span style="color: #339933;">;</span>
	$.<span style="color: #660066;">datepicker</span>.<span style="color: #660066;">setDefaults</span><span style="color: #009900;">&#40;</span>$.<span style="color: #660066;">datepicker</span>.<span style="color: #660066;">regional</span><span style="color: #009900;">&#91;</span><span style="color: #3366CC;">'es'</span><span style="color: #009900;">&#93;</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></pre></td></tr></table></div>

<p>Vamos a unir ya todo el código antes de ver posibles modificaciones. Podéis ver este código funcionando en esta <a href="http://www.emenia.es/demos-blog/calendario/" title="Ir a demostración" rel="nofollow">demostración</a> y podéis bajar el código <a href="http://www.emenia.es/demos-blog/calendario/calendario.zip" rel="nofollow" title="Descargar código">aquí</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
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
</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;Emenia Demo - Uso de jQuery Data Picker&lt;/title&gt;
&lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;css/jquery-ui-1.7.2.custom.css&quot; /&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.2/jquery-ui.min.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
jQuery(function($){
	$.datepicker.regional['es'] = {
		closeText: 'Cerrar',
		prevText: '&amp;#x3c;Ant',
		nextText: 'Sig&amp;#x3e;',
		currentText: 'Hoy',
		monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio',
		'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'],
		monthNamesShort: ['Ene','Feb','Mar','Abr','May','Jun',
		'Jul','Ago','Sep','Oct','Nov','Dic'],
		dayNames: ['Domingo','Lunes','Martes','Mi&amp;eacute;rcoles','Jueves','Viernes','S&amp;aacute;bado'],
		dayNamesShort: ['Dom','Lun','Mar','Mi&amp;eacute;','Juv','Vie','S&amp;aacute;b'],
		dayNamesMin: ['Do','Lu','Ma','Mi','Ju','Vi','S&amp;aacute;'],
		weekHeader: 'Sm',
		dateFormat: 'dd/mm/yy',
		firstDay: 1,
		isRTL: false,
		showMonthAfterYear: false,
		yearSuffix: ''};
	$.datepicker.setDefaults($.datepicker.regional['es']);
});    
&nbsp;
$(document).ready(function() {
   $(&quot;#datepicker&quot;).datepicker();
 });
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;Uso de jQuery Data Picker&lt;/h1&gt;
&lt;form action=&quot;&quot;&gt;
  &lt;label&gt; Seleccionar Fecha:&lt;/label&gt;
  &lt;input type=&quot;text&quot; name=&quot;datepicker&quot; id=&quot;datepicker&quot; readonly=&quot;readonly&quot; size=&quot;12&quot; /&gt;
&lt;/form&gt;
&lt;/body&gt;
&lt;/html&gt;</pre></td></tr></table></div>

<p>Ahora vamos a ver algunas formas de personalizar el calendario. Muchas de las opciones las hemos utilizado ya en el código de localización. La lista completa está en <a href="http://docs.jquery.com/UI/Datepicker" title="Ir a la página del plugin">http://docs.jquery.com/UI/Datepicker</a></p>
<p>- <strong>altField y altFormat</strong> nos permiten guardar la fecha elegida en otro campo con un formato diferente, por ejemplo si lo queremos mostrar al usuario con un formato pero que nos llegue a nosotros con otro diferente.</p>
<p>- <strong>appendText</strong>, si queremos que se muestre un texto al lado del input, para una mejor comprensión para el usuario:</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>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;#datepicker&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">datepicker</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span> appendText<span style="color: #339933;">:</span> <span style="color: #3366CC;">' Haga click para introducir una fecha'</span> <span style="color: #009900;">&#125;</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></pre></td></tr></table></div>

<p><a href="http://www.emenia.es/demos-blog/calendario/index2.htm" title="Ir a demostración">Ver una demo con appendText</a> </p>
<p>-<strong>autoSize</strong>, si lo ponemos en true se ajustará el input para dar cabida a la fecha introducida.</p>
<p>- <strong>numberOfMonths</strong>, para elegir el número de meses que van a salir. Si ponemos numberOfMonths:2, por ejemplo, saldrán dos meses. Esto lo aconsejan algunos expertos en usabilidad ya que hay más opción donde elegir de un solo vistazo. <a href="http://www.emenia.es/demos-blog/calendario/index3.htm" title="Ir a demostración">Veamos un ejemplo de numberOfMonths</a> , donde se añade al anterior de appendText para ver cómo se unen dos opciones.</p>
<p>- Si queremos que el calendario se despliegue no al hacer click sobre el input sino sobre un botón adjunto (por ejemplo, una imagen de un calendario pequeño, como tienen muchas webs que habréis visto), utilizaremos las opciones <strong>buttonImage, buttonImageOnly y showOn</strong>:</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;#datepicker&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">datepicker</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span> 
   showOn<span style="color: #339933;">:</span> <span style="color: #3366CC;">'button'</span><span style="color: #339933;">,</span> 
   buttonImageOnly<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span><span style="color: #339933;">,</span> 
   buttonImage<span style="color: #339933;">:</span> <span style="color: #3366CC;">'images/datepicker.png'</span> 
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>donde datapicker.png es un icono de un calendario. Al hacer click sobre él, se despliega el calendario. <a href="http://www.emenia.es/demos-blog/calendario/index4.htm" title="Ir a demostración">Veamos un ejemplo</a>. </p>
<p>- <strong>dateformat</strong>, para cambiar el formato en el que se pega la fecha al input. En la demo está en dateformat: &#8216;dd/mm/yy&#8217;. Otra opción es por ejemplo &#8216;DD, MM, d, yy&#8217; . <a href="http://docs.jquery.com/UI/Datepicker/formatDate" title="Ver lista completa de formatos de fecha">Lista completa de formatos de fecha</a>.</p>
<p>- <strong>maxDate y minDate</strong>, para poner una fecha máxima y otra mínima (supongamos que queremos que sólo salgan los meses de Junio a Octubre):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</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;#datepicker&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">datepicker</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
       minDate<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span><span style="color: #CC0000;">2010</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">5</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
       maxDate<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">new</span> Date<span style="color: #009900;">&#40;</span><span style="color: #CC0000;">2010</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">9</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">30</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>
       dateFormat<span style="color: #339933;">:</span> <span style="color: #3366CC;">'dd/mm/yy'</span><span style="color: #339933;">,</span>
       constrainInput<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</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: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p><a href="http://www.emenia.es/demos-blog/calendario/index5.htm" title="Ir a demostración" rel="nofollow">Veamos un ejemplo de maxDate y minDate</a>.</p>
<p>- <strong>buttonText</strong>, Si queremos que se abra el calendario al hacer click sobre un botón al que le ponemos nosotros el texto:</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>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;#datepicker&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">datepicker</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span> 
       showOn<span style="color: #339933;">:</span> <span style="color: #3366CC;">'button'</span><span style="color: #339933;">,</span> 
       buttonText<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;Seleccionar&quot;</span> <span style="color: #009900;">&#125;</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></pre></td></tr></table></div>

<p><a href="http://www.emenia.es/demos-blog/calendario/index6.htm" rel="nofollow" title="Ir a demostración">Veamos una demo del uso de buttonText</a>.</p>
<p>- <strong>showAnim</strong>, si queremos cambiar el efecto con el que se muestra el calendario</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>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;#datepicker&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">datepicker</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
    showAnim<span style="color: #339933;">:</span> <span style="color: #3366CC;">'fadeIn'</span>
    <span style="color: #009900;">&#125;</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></pre></td></tr></table></div>

<p><a href="http://www.emenia.es/demos-blog/calendario/index7.htm" rel="nofollow" title="Ir a demostración">Veamos una demo del uso de showAnim</a>. Podemos usar como efecto &#8217;show&#8217; (por defecto), &#8217;slideDown&#8217;, &#8216;fadeIn&#8217;, o cualquiera de los <a href="http://docs.jquery.com/UI/Effects" title="Ver lista de efectos">efectos para mostrar/ocultar de jQuery UI</a>.</p>
<p>- <strong>changeMonth</strong> permite mostrar una lista desplegable de meses para poder ir con mayor rapidez al mes deseado:</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>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;#datepicker&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">datepicker</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
    changeMonth<span style="color: #339933;">:</span> <span style="color: #003366; font-weight: bold;">true</span> 
    <span style="color: #009900;">&#125;</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></pre></td></tr></table></div>

<p><a href="http://www.emenia.es/demos-blog/calendario/index8.htm" rel="nofollow" title="Ir a demostración">Veamos una demo del uso de changeMonth</a></p>
<p>Id probando todas las opciones de la página del plugin para ver las distintas opciones.</p>
<p>Por último, destacar una variación aportada por David Walsh en su artículo <a href="http://davidwalsh.name/jquery-datepicker-disable-days" title="Ir al artículo">jQuery UI DatePicker: Disable Specified Days</a>, para desactivar días concretos (por ejemplo, días que hayan sido ya reservados de un hotel y por lo tanto no puedan ser ya escogidos). También en su ejemplo se ve como desactivar los fines de semana y días de fiesta.</p>
<div id="crp_related"><h3>Artículos relacionados:</h3><ul><li><a href="http://www.emenia.es/formulario-filtrar-spam-akismet/" rel="bookmark" class="crp_title">Filtrar el spam de un formulario con Akismet</a></li><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/utilizando-css3-hoy-1-bordes-redondeados/" rel="bookmark" class="crp_title">Utilizando CSS3 hoy (1): Bordes Redondeados</a></li><li><a href="http://www.emenia.es/como-pre-cargar-imagenes-con-jquery/" rel="bookmark" class="crp_title">Cómo pre-cargar imágenes con jQuery</a></li><li><a href="http://www.emenia.es/automatiza-el-ano-del-copyright-en-tu-web/" rel="bookmark" class="crp_title">Automatiza el año del copyright en tu web</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.emenia.es/calendario-formulario-jquery/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Lista desplegable y plegable con jQuery</title>
		<link>http://www.emenia.es/lista-desplegable-y-plegable-con-jquery/</link>
		<comments>http://www.emenia.es/lista-desplegable-y-plegable-con-jquery/#comments</comments>
		<pubDate>Sat, 30 Jan 2010 10:40:16 +0000</pubDate>
		<dc:creator>Juan Diaz-Bustamante</dc:creator>
				<category><![CDATA[JQuery]]></category>

		<guid isPermaLink="false">http://www.emenia.es/?p=602</guid>
		<description><![CDATA[Si tenemos una lista con Títulos y Descripciones y queremos que sólo se vean los títulos, viéndose la descripción únicamente cuando hacemos click sobre el título correspondiente. Además, si hay alguna descripción ya abierta queremos que se cierre si hacemos click sobre otro título diferente o sobre el mismo título una segunda vez.. Vamos a ver cómo hacerlo con jQuery.]]></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%2Flista-desplegable-y-plegable-con-jquery%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.emenia.es%2Flista-desplegable-y-plegable-con-jquery%2F&amp;source=JuanDBB_Emenia&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>Supongamos que tenemos una lista de elementos, en el que cada elemento está compuesto por un titular y una descripción. Por ejemplo:</p>
<p>18 Wheels Extreme Trucker<br />
Ya está aquí el último simulación de camiones dentro de la conocida serie 18 Wheels.<br />
Simulación &#8211; PC CD-ROM</p>
<p>A Stroke of Fate: Operation Valkyrie<br />
Basada en hechos históricos reales. El último atentado contra Adolf Hitler.<br />
Aventura Gráfica &#8211; PC DVD-ROM</p>
<p>A Vampire Story<br />
Una aventura gráfica tradicional creada por Bill Tiller, famoso por aventuras como The Dig, The Curse of Monkey Island e Indiana Jones.<br />
Aventura Gráfica &#8211; PC DVD-ROM</p>
<p>Aion<br />
Descubre un espectacular mundo online lleno de historias y leyendas.<br />
On-Line 	- PC DVD-ROM</p>
<p>Airbus Fleet para FSX<br />
Airbus Fleet te ofrece la oportunidad de pilotar la mayoría de la flota de aviones de Airbus. Add-On de Microsoft Flight Simulator<br />
Add-on &#8211; PC CD-ROM</p>
<p>American Civil War<br />
Juego de gran estrategia histórica creado por Philippe Thibaut, autor de Europa Universalis. El juego se desarrolla mediante turnos simultáneos y sitúa a los jugadores al frente de los bandos combatientes de la Guerra Civil Americana (1861- 1865).<br />
Estrategia -PC CD-ROM</p>
<p>Around the World in 80 Flights<br />
Circunnavega el globo, en rumbo este, desde el histórico aeródromo de Farnborough, en el Reino Unido, en un épico viaje de 80 etapas alrededor del mundo en este add-on para Microsoft FSX y FS2004.<br />
Add-on &#8211; PC CD-ROM</p>
<p>Battle of Britain 2: Wings of Victory<br />
Battle of Britain 2 “Wings of Victory” es un simulador de vuelo que recrea las famosas batallas aéreas que tuvieron lugar en el sur de Inglaterra en 1.940<br />
Simulación &#8211; PC CD-ROM</p>
<p>Supongamos igualmente que sólo queremos que se vean los títulos y que la descripción se vea únicamente cuando hacemos click sobre el título correspondiente. Además, si hay alguna descripción ya abierta queremos que se cierre si hacemos click sobre otro título diferente o sobre el mismo título (un segundo click sobre el mismo).</p>
<p>¿Cómo lo hacemos? Con jQuery es muy sencillo.</p>
<p>Pero primero vamos a ver cómo escribimos el código de la lista. Lo más lógico es hacer una lista de definición o definition list:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">&lt;dl&gt;
&lt;dt&gt;18 Wheels Extreme Trucker&lt;/dt&gt;
&lt;dd&gt;Ya está aquí el último simulación de camiones dentro de la conocida serie 18 Wheels. Simulación - PC CD-ROM&lt;/dd&gt;
&nbsp;
&lt;dt&gt;A Stroke of Fate: Operation Valkyrie&lt;/dt&gt;
&lt;dd&gt;Basada en hechos históricos reales. El último atentado contra Adolf Hitler.
Aventura Gráfica - PC DVD-ROM&lt;/dd&gt;
&nbsp;
&lt;dt&gt;A Vampire Story&lt;/dt&gt;
&lt;dd&gt;Una aventura gráfica tradicional creada por Bill Tiller, famoso por aventuras como The Dig, The Curse of Monkey Island e Indiana Jones.
Aventura Gráfica - PC DVD-ROM&lt;/dd&gt;
&nbsp;
&lt;dt&gt;Aion&lt;/dt&gt;
&lt;dd&gt;Descubre un espectacular mundo online lleno de historias y leyendas.
On-Line 	- PC DVD-ROM&lt;/dd&gt;
&nbsp;
&lt;dt&gt;Airbus Fleet para FSX&lt;/dt&gt;
&lt;dd&gt;Airbus Fleet te ofrece la oportunidad de pilotar la mayoría de la flota de aviones de Airbus. Add-On de Microsoft Flight Simulator
Add-on - PC CD-ROM&lt;/dd&gt;
&nbsp;
&lt;dt&gt;American Civil War&lt;/dt&gt;
&lt;dd&gt;Juego de gran estrategia histórica creado por Philippe Thibaut, autor de Europa Universalis. El juego se desarrolla mediante turnos simultáneos y sitúa a los jugadores al frente de los bandos combatientes de la Guerra Civil Americana (1861- 1865).
Estrategia -PC CD-ROM&lt;/dd&gt;
&nbsp;
&lt;dt&gt;Around the World in 80 Flights&lt;/dt&gt;
&lt;dd&gt;Circunnavega el globo, en rumbo este, desde el histórico aeródromo de Farnborough, en el Reino Unido, en un épico viaje de 80 etapas alrededor del mundo en este add-on para Microsoft FSX y FS2004.
Add-on - PC CD-ROM&lt;/dd&gt;
&nbsp;
&lt;dt&gt;Battle of Britain 2: Wings of Victory&lt;/dt&gt;
&lt;dd&gt;Battle of Britain 2 “Wings of Victory” es un simulador de vuelo que recrea las famosas batallas aéreas que tuvieron lugar en el sur de Inglaterra en 1.940 
Simulación - PC CD-ROM&lt;/dd&gt;
&nbsp;
&lt;/dl&gt;</pre></td></tr></table></div>

<p>A continuación cargamos jQuery. Podéis ver como hacerlo en este artículo: <a href="http://www.emenia.es/curso-de-jquery-introduccion-1/" rel="nofollow">Curso de jQuery &#8211; Introducción</a>.</p>
<p>Y a continuación escribimos el siguiente código dentro del header:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="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>
    $<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;dd&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">hide</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;dt&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>event<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
             <span style="color: #003366; font-weight: bold;">var</span> desplegable <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;">next</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
             $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'dd'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">not</span><span style="color: #009900;">&#40;</span>desplegable<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">slideUp</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'fast'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
              desplegable.<span style="color: #660066;">slideToggle</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'fast'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
              event.<span style="color: #660066;">preventDefault</span><span style="color: #009900;">&#40;</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: #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></pre></td></tr></table></div>

<p>Como veis es muy sencillo. Primero ocultamos todos los elementos <strong>dd</strong> con</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;dd&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">hide</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Luego decimos que al hacer click sobre un elemento <strong>dt</strong> se ejecute una función:</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;dt&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>event<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span></pre></td></tr></table></div>

<p>Como vemos a esta función le pasamos el evento como parámetro. El objeto evento da información sobre el evento que se invoca sobre cada elemento en cuestión y nos ofrece métodos que afectan a la progresión del evento, como veremos al final de la función.</p>
<p>A continuación asignamos a una variable que hemos denominado &#8220;despleglable&#8221; el elemento &#8220;dd&#8221; que sigue al elemento &#8220;dt&#8221;  concreto sobre el que hemos hecho click:</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: #003366; font-weight: bold;">var</span> desplegable <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;">next</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Como vemos eso lo conseguimos con $(this) que es como decir &#8220;este&#8221;, de todos los &#8220;dt&#8221; sólo este, sobre el que hemos hecho click.</p>
<p>A continuación buscamos cualquier &#8220;dd&#8221; que esté desplegado pero que no sea el recogido en la variable &#8220;desplegable&#8221;, y lo plegamos:</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: #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>
 $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'dd'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">not</span><span style="color: #009900;">&#40;</span>desplegable<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">slideUp</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'fast'</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></pre></td></tr></table></div>

<p>Y a continuación desplegamos el &#8220;dd&#8221; concreto que almacenamos en la variable &#8220;desplegable&#8221; y lo plegamos si estaba desplegado:</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;">  desplegable.<span style="color: #660066;">slideToggle</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'fast'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Por último, cancelamos el evento si es cancelable para evitar que el efecto se propague:</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;"> event.<span style="color: #660066;">preventDefault</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>De esta manera se detiene el efecto cuando hacemos click sobre un titulo y acabamos de hacer click sobre otro juntándose a la vez varios efectos de pliegue y despliegue.</p>
<p>Podemos ver la Demo en <a href="http://www.emenia.es/demos-blog/lista-desplegable/" rel="nofollow" title="Ver Demo">http://www.emenia.es/demos-blog/lista-desplegable/</a></p>
<div id="crp_related"><h3>Artículos relacionados:</h3><ul><li><a href="http://www.emenia.es/creando-un-menu-vertical-desplegable-con-jquery-2/" rel="bookmark" class="crp_title">Creando un menú vertical desplegable con jQuery (2)</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/calendario-formulario-jquery/" rel="bookmark" class="crp_title">Elegir una fecha en un formulario con un calendario y jQuery</a></li><li><a href="http://www.emenia.es/como-pre-cargar-imagenes-con-jquery/" rel="bookmark" class="crp_title">Cómo pre-cargar imágenes con jQuery</a></li><li><a href="http://www.emenia.es/recopilacion-de-45-trucos-para-wordpress/" rel="bookmark" class="crp_title">Recopilación de 45 trucos para Wordpress</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.emenia.es/lista-desplegable-y-plegable-con-jquery/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Creando un menú vertical desplegable con jQuery</title>
		<link>http://www.emenia.es/creando-un-menu-vertical-desplegable-con-jquery/</link>
		<comments>http://www.emenia.es/creando-un-menu-vertical-desplegable-con-jquery/#comments</comments>
		<pubDate>Sun, 15 Nov 2009 10:37:31 +0000</pubDate>
		<dc:creator>Juan Diaz-Bustamante</dc:creator>
				<category><![CDATA[JQuery]]></category>

		<guid isPermaLink="false">http://emenia.es/?p=292</guid>
		<description><![CDATA[Vamos a crear un menú vertical en el que los submenús se muestran o se ocultan al hacer click sobre el enlace principal de cada submenú. Y lo vamos a hacer con jQuery.]]></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%2Fcreando-un-menu-vertical-desplegable-con-jquery%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.emenia.es%2Fcreando-un-menu-vertical-desplegable-con-jquery%2F&amp;source=JuanDBB_Emenia&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>Aprovechando el <a href="http://emenia.es/curso-de-jquery-4-selectores-tercera-parte/" title="Ir al artículo">final del tutorial sobre selectores de jQuery</a> vamos a ver cómo hacer un sencillo menú vertical desplegable con jQuery. Hay veces que un menú tiene varios submenús que por simplicidad visual no queremos que aparezcan hasta que no se pulse sobre la opción de cabecera del submenú. Gracias a jQuery podemos lograrlo con facilidad. Esta es la <a href="http://www.emenia.es/demos-blog/menu-desplegable/" title="Ir a la Demo" rel="nofollow">demo</a> de lo que vamos a hacer.</p>
<p>Empezaremos con una simple lista de enlaces:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">&lt;ul class=&quot;navegador&quot;&gt;
  &lt;li&gt;&lt;a href=&quot;#&quot; title=&quot;Opción 1&quot;&gt;Opción 1&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#&quot; title=&quot;Opción 2&quot;&gt;Opción 2&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#&quot; class=&quot;desplegable&quot; title=&quot;Opción 3&quot;&gt;Opción 3&lt;/a&gt;
       &lt;ul class=&quot;subnavegador&quot;&gt;
	  &lt;li&gt;&lt;a href=&quot;#&quot; title=&quot;Ir a Sub-Opción 3-1&quot;&gt;Sub-Opción 3-1&lt;/a&gt;&lt;/li&gt;
	  &lt;li&gt;&lt;a href=&quot;#&quot; title=&quot;Ir a Sub-Opción 3-2&quot;&gt;Sub-Opción 3-2&lt;/a&gt;&lt;/li&gt;			
	  &lt;li&gt;&lt;a href=&quot;#&quot; title=&quot;Ir a Sub-Opción 3-3&quot;&gt;Sub-Opción 3-3&lt;/a&gt;&lt;/li&gt;
	  &lt;li&gt;&lt;a href=&quot;#&quot; title=&quot;Ir a Sub-Opción 3-4&quot;&gt;Sub-Opción 3-4&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
  &lt;/li&gt;	
  &lt;li&gt;&lt;a href=&quot;#&quot; class=&quot;desplegable&quot; title=&quot;Opción 4&quot;&gt;Opción 4&lt;/a&gt;			
      &lt;ul class=&quot;subnavegador&quot;&gt;
	  &lt;li&gt;&lt;a href=&quot;#&quot; title=&quot;Ir a Sub-Opción 3-1&quot;&gt;Sub-Opción 3-1&lt;/a&gt;&lt;/li&gt;
	  &lt;li&gt;&lt;a href=&quot;#&quot; title=&quot;Ir a Sub-Opción 3-2&quot;&gt;Sub-Opción 3-2&lt;/a&gt;&lt;/li&gt;			
	  &lt;li&gt;&lt;a href=&quot;#&quot; title=&quot;Ir a Sub-Opción 3-3&quot;&gt;Sub-Opción 3-3&lt;/a&gt;&lt;/li&gt;
	  &lt;li&gt;&lt;a href=&quot;#&quot; title=&quot;Ir a Sub-Opción 3-4&quot;&gt;Sub-Opción 3-4&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
  &lt;/li&gt;
&lt;/ul&gt;</pre></td></tr></table></div>

<p>Como veis he añadido tres clases, una que he llamado <strong><em>navegador</em></strong> para el <strong><em>ul</em></strong> principal de la lista, otra que he llamado <strong><em>subnavegador</em></strong> para cada <strong><em>ul</em></strong> secundario y otra que he llamado <em><strong>desplegable</strong></em> para los enlaces principales de cada subnavegador.</p>
<p>Si ahora viéramos el menú nos saldrían todas las opciones a la vez, lo que sería un poco lío visual para el usuario. Lo que queremos es ocultar los submenús y no mostrarlos hasta que el usuario no quiera verlos. Para ello vamos a empezar por cargar jQuery. Dentro del <em><strong>head</strong></em> de nuestro código html escribiríamos:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">&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;
   <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>		
      $<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: #006600; font-style: italic;">// Aquí irá el código de jQuery.</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></pre></td></tr></table></div>

<p>En la primera línea hemos cargado jQuery desde la librería de Google. Tened en cuenta que si estáis usando Wordpress no hará falta esta línea ya que Wordpress incorpora jQuery por defecto. Aunque si queréis que Wordpress no utilice su versión 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>Bueno, seguimos. La línea tres lo que dice es que cuando el documento esté listo se ejecute la función que sigue a continuación, que es donde vamos a crear el código para desplegar los submenús. Para una mayor explicación de esta línea podéis ver la <a href="http://emenia.es/curso-de-jquery-introduccion-1/" title="Ir al artículo">Introducción al Curso de jQuery</a>.</p>
<p>Vamos a empezar con las líneas de código de jQuery. Lo primero que queremos hacer es ocultar todos los subnavegadores. Como los hemos identificado a todos ellos con la misma clase haremos:</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;ul.subnavegador&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">hide</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Es decir, primero hemos seleccionado todos los <strong><em>ul</em></strong> con la clase <strong><em>subnavegador</em></strong>. Y luego, a la selección resultante, le hemos aplicado el método de jQuery <strong><em>.hide()</em></strong> que símplemente oculta la selección tal y como si hubiéramos hecho <strong><em>display: none</em></strong> en CSS. </p>
<p>Como habréis visto en el ejemplo, los enlaces que se despliegan llevan una flecha roja que apunta hacia abajo con la finalidad de indicar que son desplegables. Mediante CSS aplico esta flecha roja a los enlaces con la clase <em>desplegable</em> (ver código fuente del ejemplo).</p>
<p><img src="http://emenia.es/wp-content/uploads/2009/11/li-desplegable.png" alt="li-desplegable" title="li-desplegable" width="336" height="200" class="aligncenter size-full wp-image-304" /></p>
<p>Seguimos con nuestras líneas de jQuery. Ahora lo siguiente que queremos es que cuando se pulse sobre el enlace desplegable se despliegue la lista de opciones del submenu correspondiente. Es decir, queremos que pase esto:</p>
<p><img src="http://emenia.es/wp-content/uploads/2009/11/li-desplegado.png" alt="li-desplegado" title="li-desplegado" width="364" height="241" class="aligncenter size-full wp-image-307" /></p>
<p>Para ello vamos a utilizar el método <em><strong>.toggle()</strong></em> de jQuery que captura los clicks que hacemos sobre el elemento seleccionado y con cada click ejecuta una acción. El método <em><strong>.toggle()</strong></em> toma dos o más argumentos, cada uno de los cuales es una función. El primer click sobre el elemento hace que se ejecute la primera función, el segundo click hace que se ejecute la segunda función, y así sucesivamente. Vamos a añadir el método a nuestro código, aplicando toggle() sobre cualquier enlace que tenga la clase &#8216;desplegable&#8217;:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;a.desplegable&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">toggle</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: #006600; font-style: italic;">// Primera función, que se ejecuta con el primer click </span>
	<span style="color: #009900;">&#125;</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> 
		<span style="color: #006600; font-style: italic;">// Segunda función, que se ejecuta con el segundo click  </span>
	<span style="color: #009900;">&#125;</span>				
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Ahora vamos a ver qué ponemos dentro de cada función. Vamos con la primera. ¿Qué queremos que ocurra con el primer click? Que se despliegue la lista de submenús, pero sólo la de la opción sobre la que se ha hecho click, es decir, sólo el submenú perteneciente al enlace con <em>class=&#8221;desplegable&#8221;</em> sobre el que se ha hecho click. </p>
<p>Para saber sobre qué elemento específico se ha hecho click utilizamos <strong><em>$this()</em></strong>, que es como decir <strong><em>este</em></strong>, el elemento único sobre el que se ha hecho click de entre los de la selección anterior. Pero no es este elemento el que nos interesa, sino todo el submenú que está oculto y que queremos mostrar, es decir, el <strong><em>ul class=&#8221;submenu&#8221;</em></strong> que corresponde al enlace cliqueado. ¿Cómo lo seleccionamos? Para ello he seleccionado al padre del elemento <strong><em>a</em></strong> cliqueado (es decir, el <strong><em>&#8220;li&#8221;</em></strong> padre del <strong><em>&#8220;a class=&#8221;desplegable&#8221;</em></strong> y una vez me he situado ahí he aplicado el método <strong><em>.find()</em></strong> para seleccionar el <strong><em>&#8220;ul.submenu&#8221;</em></strong> que se encuentra dentro del mismo. A la selección resultante le he aplicado el método de jQuery <strong><em>.slideDown()</em></strong> (es decir  deslizar hacia abajo) que hace que cualquier elemento seleccionado que esté oculto se muestre gradualmente incrementándose su tamaño vertical:</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: #000066; font-weight: bold;">this</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;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;ul.subnavegador&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">slideDown</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'fast'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>El método .slideDown puede tener como parámetro opcional la velocidad con la que se va a mostrar el elemento oculto. Puede ser <em>slow</em> (lento), <em>normal</em> o <em>fast</em> (rápido). Si no ponemos nada será <em>normal</em>.</p>
<p>Vamos ahora con la segunda función, la que se ejecutará la segunda vez que hagamos click s<em>obre el mismo elemento</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: #000066; font-weight: bold;">this</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;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;ul.subnavegador&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">slideUp</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'fast'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Al igual que antes con <strong><em>$this()</em></strong> seleccionamos el elemento único sobre el que se ha cliqueado (un elemento <em><strong>a class=&#8221;desplegable&#8221;</strong></em>). Luego seleccionamos a su padre (el <em>li</em> correspondiente) y luego encontramos dentro de este el <em>&#8220;ul class=&#8221;subnavegador&#8221;</em> que vamos a ocultar de manera gradual con el método <strong><em>.slideUp()</em></strong>, que es el contrario de <em>.SlideDown()</em>. El método <em>.slideUp()</em> hace que el elemento o elementos seleccionados no ocultos se oculten gradualmente disminuyendo su altura vertical. Soporta también los parámetros <em>slow</em>, <em>normal</em> y <em>fast</em>.</p>
<p>Con lo cual ya tenemos todo nuestro código de jQuery listo:</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
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">&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;
<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>		
  $<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: #006600; font-style: italic;">// Script del Navegador</span>
    $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;ul.subnavegador&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">hide</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>				
    $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;a.desplegable&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">toggle</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: #000066; font-weight: bold;">this</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;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;ul.subnavegador&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">slideDown</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'fast'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> 
      <span style="color: #009900;">&#125;</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> 
        $<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;">parent</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">find</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;ul.subnavegador&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">slideUp</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'fast'</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: #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></pre></td></tr></table></div>

<p>Vamos a verlo dentro de todo el código HTML de la página:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
</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;Emenia Demo - Menú vertical desplegable con jQuery&lt;/title&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;script type=&quot;text/javascript&quot;&gt;		
  $(document).ready(function(){ // Script del Navegador
    $(&quot;ul.subnavegador&quot;).hide();				
    $(&quot;a.desplegable&quot;).toggle(
      function() { 
        $(this).parent().find(&quot;ul.subnavegador&quot;).slideDown('fast'); 
      },
      function() { 
        $(this).parent().find(&quot;ul.subnavegador&quot;).slideUp('fast'); 
      }				
    );	
});
&lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;
  &lt;div id=&quot;contenido-demo&quot;&gt;	
   &lt;h2&gt;Menú vertical desplegable con jQuery&lt;/h2&gt;
&nbsp;
   &lt;ul class=&quot;navegador&quot;&gt;
    &lt;li&gt;&lt;a href=&quot;#&quot; title=&quot;Opción 1&quot;&gt;Opción 1&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#&quot; title=&quot;Opción 2&quot;&gt;Opción 2&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#&quot; class=&quot;desplegable&quot; title=&quot;Opción 3&quot;&gt;Opción 3&lt;/a&gt;
      &lt;ul class=&quot;subnavegador&quot;&gt;
        &lt;li&gt;&lt;a href=&quot;http://www.google.es&quot; title=&quot;Ir a Sub-Opción 3-1&quot;&gt;Sub-Opción 3-1&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&quot;#&quot; title=&quot;Ir a Sub-Opción 3-2&quot;&gt;Sub-Opción 3-2&lt;/a&gt;&lt;/li&gt;			
        &lt;li&gt;&lt;a href=&quot;#&quot; title=&quot;Ir a Sub-Opción 3-3&quot;&gt;Sub-Opción 3-3&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&quot;#&quot; title=&quot;Ir a Sub-Opción 3-4&quot;&gt;Sub-Opción 3-4&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;	
    &lt;li&gt;&lt;a href=&quot;#&quot; class=&quot;desplegable&quot; title=&quot;Opción 4&quot;&gt;Opción 4&lt;/a&gt;			
      &lt;ul class=&quot;subnavegador&quot;&gt;
        &lt;li&gt;&lt;a href=&quot;#&quot; title=&quot;Ir a Sub-Opción 3-1&quot;&gt;Sub-Opci&amp;oacute;n 3-1&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&quot;#&quot; title=&quot;Ir a Sub-Opción 3-2&quot;&gt;Sub-Opción 3-2&lt;/a&gt;&lt;/li&gt;			
        &lt;li&gt;&lt;a href=&quot;#&quot; title=&quot;Ir a Sub-Opción 3-3&quot;&gt;Sub-Opción 3-3&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href=&quot;#&quot; title=&quot;Ir a Sub-Opción 3-4&quot;&gt;Sub-Opción 3-4&lt;/a&gt;&lt;/li&gt;
     &lt;/ul&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
 &lt;/div&gt;	
&lt;/body&gt;
&lt;/html&gt;</pre></td></tr></table></div>

<p>Os podéis descargar todo el código e imágenes <a href="http://www.emenia.es/demos-blog/menu-desplegable/menu-desplegable.zip" title="descargar código" rel="nofollow">aquí</a>.</p>
<h3>Otras lecturas recomendadas</h3>
<p>Sobre .toggle(), en la <a href="http://docs.jquery.com/Events/toggle" title="Ir a la web oficial de jQuery">web oficial de jQuery</a>.<br />
Sobre .slideDown() en la <a href="http://docs.jquery.com/Effects/slideDown#speedcallback" title="Ir a la web oficial de jQuery">web oficial de jQuery</a>.<br />
Sobre .sliceUp() en la <a href="http://docs.jquery.com/Effects/slideUp#speedcallback" title="Ir a la web oficial de jQuery">web oficial de jQuery</a>.</p>
<div id="crp_related"><h3>Artículos relacionados:</h3><ul><li><a href="http://www.emenia.es/creando-un-menu-vertical-desplegable-con-jquery-2/" rel="bookmark" class="crp_title">Creando un menú vertical desplegable con jQuery (2)</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><li><a href="http://www.emenia.es/como-pre-cargar-imagenes-con-jquery/" rel="bookmark" class="crp_title">Cómo pre-cargar imágenes con jQuery</a></li><li><a href="http://www.emenia.es/como-separar-los-articulos-por-categorias-en-wordpress/" rel="bookmark" class="crp_title">Cómo separar los artículos por categorías en Wordpress</a></li><li><a href="http://www.emenia.es/recopilacion-de-45-trucos-para-wordpress/" rel="bookmark" class="crp_title">Recopilación de 45 trucos para Wordpress</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.emenia.es/creando-un-menu-vertical-desplegable-con-jquery/feed/</wfw:commentRss>
		<slash:comments>40</slash:comments>
		</item>
		<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>Cómo pre-cargar imágenes con jQuery</title>
		<link>http://www.emenia.es/como-pre-cargar-imagenes-con-jquery/</link>
		<comments>http://www.emenia.es/como-pre-cargar-imagenes-con-jquery/#comments</comments>
		<pubDate>Sat, 07 Nov 2009 20:11:45 +0000</pubDate>
		<dc:creator>Juan Diaz-Bustamante</dc:creator>
				<category><![CDATA[JQuery]]></category>

		<guid isPermaLink="false">http://emenia.es/?p=242</guid>
		<description><![CDATA[Cómo pre-cargar imágenes con jQuery para utilizarlas más tarde]]></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%2Fcomo-pre-cargar-imagenes-con-jquery%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.emenia.es%2Fcomo-pre-cargar-imagenes-con-jquery%2F&amp;source=JuanDBB_Emenia&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>Hay veces que utilizamos imágenes con javascript (por ejemplo una galería de imágenes) y queremos que se carguen antes de que vayan a ser utilizadas para evitar que luego se perciba el feo efecto de esperar a que la imagen cargue. En la página de inicio de la web de Emenia al situar el cursor del ratón sobre las opciones del menú cambia la imagen de fondo. Para que aparezca la imagen sin esperas utilicé este código:</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="javascript" style="font-family:monospace;">jQuery.<span style="color: #660066;">preloadImages</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>
  <span style="color: #000066; font-weight: bold;">for</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">var</span> i <span style="color: #339933;">=</span> <span style="color: #CC0000;">0</span><span style="color: #339933;">;</span> i<span style="color: #339933;">&lt;</span>arguments.<span style="color: #660066;">length</span><span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;&lt;img&gt;&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;src&quot;</span><span style="color: #339933;">,</span> arguments<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #006600; font-style: italic;">// Para utilizar el script y cargar tus imágenes:</span>
$.<span style="color: #660066;">preloadImages</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;images/logo.png&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;images/logo-face.png&quot;</span><span style="color: #339933;">,</span> <span style="color: #3366CC;">&quot;images/mission.png&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Es aconsejable que lo situéis al final del código, justo antes de cerrar<em> body</em> para que no se demore la carga de toda la página.</p>
<p>Como es lógico necesitamos haber cargado antes jQuery:</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://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js?ver=1.3.2&quot;</span><span style="color: #339933;">&gt;&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<p><strong>Si estamos en Wordpress</strong> jQuery viene ya incorporado. Sí hay que tener en cuenta que jQuery se inserta donde se encuentre <em>wp_head()</em>, dentro de <em>head.php</em>.</p>
<p><strong>Fuente:</strong> Trip Magazine, <a href="http://www.tripwiremagazine.com/ajax/developer-toolbox/more-jquery-and-general-javascript-tips-to-improve-your-code.html">More jQuery and General Javascript Tips to Improve Your Code</a></p>
<div id="crp_related"><h3>Artículos relacionados:</h3><ul><li><a href="http://www.emenia.es/como-utilizar-un-fondo-aleatorio-para-nuestra-web/" rel="bookmark" class="crp_title">Como utilizar un fondo aleatorio para nuestra web</a></li><li><a href="http://www.emenia.es/nuevas-fuentes-google-para-tu-web/" rel="bookmark" class="crp_title">Nuevas fuentes a través de Google para tu web</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/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><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></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.emenia.es/como-pre-cargar-imagenes-con-jquery/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>
		<item>
		<title>Resaltar un texto importante con jQuery</title>
		<link>http://www.emenia.es/obtencion-y-resaltado-de-un-texto-especifico-dentro-de-un-articulo-con-jquery/</link>
		<comments>http://www.emenia.es/obtencion-y-resaltado-de-un-texto-especifico-dentro-de-un-articulo-con-jquery/#comments</comments>
		<pubDate>Sat, 03 Oct 2009 08:55:26 +0000</pubDate>
		<dc:creator>Juan Diaz-Bustamante</dc:creator>
				<category><![CDATA[JQuery]]></category>

		<guid isPermaLink="false">http://emenia.es/?p=94</guid>
		<description><![CDATA[Cómo resaltar un texto importante con jQuery como hacen periódicos y revistas.]]></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%2Fobtencion-y-resaltado-de-un-texto-especifico-dentro-de-un-articulo-con-jquery%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.emenia.es%2Fobtencion-y-resaltado-de-un-texto-especifico-dentro-de-un-articulo-con-jquery%2F&amp;source=JuanDBB_Emenia&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p>Muchas páginas webs <strong>enfatizan algún texto importante situándolo en un cuadro aparte</strong> con un estilo diferente, por ejemplo con un tamaño de fuente mayor. Esto lo vemos con mucha frecuencia en periódicos y revistas impresas. Veamos un ejemplo de una revista:</p>
<p><img src="http://emenia.es/wp-content/uploads/2009/10/pull_quotes.jpg" alt="pull_quotes" title="pull_quotes" width="529" height="240" class="aligncenter size-full wp-image-95" /></p>
<p>Es lo que llaman en inglés &#8220;<em>pull quotes</em>&#8220;. Esto lo podemos realizar de una manera sencilla con jQuery utilizando el método <strong><em>.clone()</em></strong></p>
<p>Vamos a ver en detalle como funciona <em>.clone()</em> mientras creamos nuestro ejemplo. Gracias a jQuery y su método <em>.clone()</em> podemos <strong>copiar elementos ya existentes en una web y situar la parte copiada en otra ubicación de la misma web</strong>. Una aplicación podría ser copiar nuestra navegación de la cabecera de la página al pie de la misma. Otra sería el objeto de este artículo, copiar un trozo de texto y pegarlo con un estilo diferente que lo enfatice. El método <em>.clone()</em> toma cualquier grupo de elementos seleccionados y crea una copia de los mismos para su uso posterior. Por ejemplo:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">&lt;div class=&quot;contenido-articulo&quot;&gt;
&lt;p&gt;Hubo samba masiva sobre la arena de Copacabana para celebrar la elección de Brasil como sede de los Juegos Olímpicos de 2016, sí.&lt;/p&gt; 
&lt;p&gt;Pero, al final, caló el convencimiento de que su jefe de Estado, Lula, a 12.000 kilómetros de allí, tenía toda la razón en recetar a su pueblo, una vez recobrada la voz, &quot;trabajo, trabajo y trabajo desde mañana, no desde pasado mañana&quot;.&lt;/p&gt; 
&lt;p&gt;El inmenso país que dirige el ex sindicalista tiene la responsabilidad de reconstruirse y liderar el crecimiento suramericano alimentado por el maná olímpico.&lt;/p&gt;
&lt;p&gt;&quot;Hay que dormir menos y trabajar más&quot;, ordenó el presidente-milagro de Brasil.&lt;/p&gt;
&lt;/div&gt;</pre></td></tr></table></div>

<p>He copiado un texto de un periódico on-line. El texto que vamos a resaltar es “<em>Hay que dormir menos y trabajar más”, ordenó el presidente-milagro de Brasil</em>.</p>
<p><strong>Este es el texto sin hacer nada aún:</strong></p>
<hr />
<p>Hubo samba masiva sobre la arena de Copacabana para celebrar la elección de Brasil como sede de los Juegos Olímpicos de 2016, sí.</p>
<p>Pero, al final, caló el convencimiento de que su jefe de Estado, Lula, a 12.000 kilómetros de allí, tenía toda la razón en recetar a su pueblo, una vez recobrada la voz, &#8220;trabajo, trabajo y trabajo desde mañana, no desde pasado mañana&#8221;.</p>
<p>El inmenso país que dirige el ex sindicalista tiene la responsabilidad de reconstruirse y liderar el crecimiento suramericano alimentado por el maná olímpico.</p>
<p>&#8220;Hay que dormir menos y trabajar más&#8221;, ordenó el presidente-milagro de Brasil.</p>
<hr />
<p>Como vemos lo que queremos copiar es <strong>el cuarto párrafo del texto</strong>. Para seleccionarlo y copiarlo hacemos:</p>

<div class="wp_syntax"><div class="code"><pre class="1" style="font-family:monospace;">&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js?ver=1.3.2&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot;&gt;
  $(document).ready(function() {
     $('div.contenido-articulo p:eq(3)').clone();
  });
&lt;/script&gt;</pre></div></div>

<p>Lo que hemos hecho es:<br />
<strong>Línea 1:</strong> Cargamos jQuery desde la librería de Google<br />
<strong>Línea 3:</strong> Mediante jQuery decimos que cuando esté cargado el DOM de la web se ejecute la función que sigue a continuación.<br />
<strong>Línea 4:</strong> Creamos la selección sobre la que vamos a aplicar <em>.clone()</em>. Será el cuarto elemento p situado dentro del div con la clase contenido-artículo. Como vemos sigue la misma lógica que un selector CSS. ¿Por qué si es el cuarto elemento pone 3? Porque el contador comienza con 0.</p>
<p>Ya tenemos la copia. Pero aún no hemos hecho nada con ella. Es como si la tuviéramos en el portapapeles. Ahora hay que pegarla en la ubicación que elijamos. Vamos a situarla después del segundo párrafo para que esté más o menos en medio. Para ello usamos en método de jQuery <em>.insertAfter()</em>:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js?ver=1.3.2&quot;&gt;&lt;/script&gt;
<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>
  $<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;">'div.contenido-articulo p:eq(3)'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">clone</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">insertAfter</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'div.contenido-articulo p:eq(1)'</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></pre></td></tr></table></div>

<p>Ahora en la <strong>línea 4</strong> hemos añadido que el elemento copiado se inserte después (after) del segundo párrafo (<em>eq(1), recordemos que se empieza a contar desde 0</em>) que se encuentre dentro del div con la clase <em>contenido-articulo</em>.</p>
<p><strong>Si lo aplicamos al texto:</strong></p>
<hr />
<p><code><script type="text/javascript">
  $(document).ready(function() {
     $('div.contenido-articulo1 p:eq(3)').clone().insertAfter('div.contenido-articulo1 p:eq(1)');
  });
</script></code></p>
<div class="contenido-articulo1">
<p>Hubo samba masiva sobre la arena de Copacabana para celebrar la elección de Brasil como sede de los Juegos Olímpicos de 2016, sí.</p>
<p>Pero, al final, caló el convencimiento de que su jefe de Estado, Lula, a 12.000 kilómetros de allí, tenía toda la razón en recetar a su pueblo, una vez recobrada la voz, &#8220;trabajo, trabajo y trabajo desde mañana, no desde pasado mañana&#8221;.</p>
<p>El inmenso país que dirige el ex sindicalista tiene la responsabilidad de reconstruirse y liderar el crecimiento suramericano alimentado por el maná olímpico.</p>
<p>&#8220;Hay que dormir menos y trabajar más&#8221;, ordenó el presidente-milagro de Brasil.</p>
</div>
<hr />
<p>Vamos que ya tenemos el párrafo <em>copiado</em> y <em>pegado</em> donde queríamos, sin afectar al párrafo original. Ahora vamos a dar un estilo único al nuevo párrafo copiado para diferenciarlo del resto del texto. Para ello utilizaremos el método de jQuery <em>.css()</em>. Este método <strong>aplica estilos CSS</strong> de la siguiente manera:</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: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
 propiedad1 <span style="color: #339933;">:</span> <span style="color: #3366CC;">'valor1'</span><span style="color: #339933;">,</span>
 propiedad2 <span style="color: #339933;">:</span> <span style="color: #3366CC;">'valor2'</span><span style="color: #339933;">,</span>
 propiedad3 <span style="color: #339933;">:</span> <span style="color: #3366CC;">'valor3'</span>
<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Vamos a incluirlo en nuestro código:</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
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js?ver=1.3.2&quot;&gt;&lt;/script&gt;
<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>
  $<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;">'div.contenido-articulo p:eq(3)'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">clone</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
       .<span style="color: #660066;">insertAfter</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'div.contenido-articulo p:eq(1)'</span><span style="color: #009900;">&#41;</span>
       .<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
         <span style="color: #3366CC;">'background'</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'#e3e3e3'</span><span style="color: #339933;">,</span>
         <span style="color: #3366CC;">'float'</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'right'</span><span style="color: #339933;">,</span>
         <span style="color: #3366CC;">'width'</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'145px'</span><span style="color: #339933;">,</span>
         <span style="color: #3366CC;">'padding'</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'15px'</span><span style="color: #339933;">,</span>
         <span style="color: #3366CC;">'font'</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'italic 1.4em Times, serif'</span>
 <span style="color: #009900;">&#125;</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></pre></td></tr></table></div>

<p><strong>Vamos a ver qué pasa:</strong></p>
<hr />
<code><script type="text/javascript">
  $(document).ready(function() {
     $('div.contenido-articulo p:eq(3)').clone()
       .insertAfter('div.contenido-articulo p:eq(1)')
       .css({
         'background': '#e3e3e3',
         'float': 'right',
         'width': '145px',
         'padding': '15px',
         'font': 'italic 1.4em Times, serif'
 });
});
</script></code></p>
<div class="contenido-articulo">
<p>Hubo samba masiva sobre la arena de Copacabana para celebrar la elección de Brasil como sede de los Juegos Olímpicos de 2016, sí.</p>
<p>Pero, al final, caló el convencimiento de que su jefe de Estado, Lula, a 12.000 kilómetros de allí, tenía toda la razón en recetar a su pueblo, una vez recobrada la voz, &#8220;trabajo, trabajo y trabajo desde mañana, no desde pasado mañana&#8221;.</p>
<p>El inmenso país que dirige el ex sindicalista tiene la responsabilidad de reconstruirse y liderar el crecimiento suramericano alimentado por el maná olímpico.</p>
<p>&#8220;Hay que dormir menos y trabajar más&#8221;, ordenó el presidente-milagro de Brasil.</p>
</div>
<hr />
<p>Vemos nuestro párrafo copiado y pegado a la derecha con un fondo y un tipo de letra diferentes. Es un estilo muy sencillo, pero nos sirve para comprender lo que hemos hecho. Por último indicar que si el elemento a copiar tiene algún evento asignado al mismo habría que utilizar <strong><em>.clone(true)</em></strong> en vez de <em>.clone()</em> a secas para que se copiara también el evento.</p>
<p><strong>Ahora vamos a ver una manera de seleccionar el texto que queremos resaltar de una manera más avanzada.</strong> Supongamos que son varios los textos a resaltar en diversos documentos, siendo estos a su vez bastante largos. Evidentemente no podemos estar contando párrafos en cada documento ni creando un código específico de jQuery para cada uno. Lo que haremos será crear una función que nos busque dentro de cada artículo todos los elementos que cumplan con una característica determinada. Por ejemplo, supongamos que cada texto a resaltar lo incluimos dentro de un span al que le asignamos una clase a la que llamaremos “texto-importante” :</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="html" style="font-family:monospace;">&lt;p&gt;Hubo samba masiva sobre la arena de Copacabana para celebrar la elección de Brasil como sede de los Juegos Olímpicos de 2016, sí.
Pero, al final, caló el convencimiento de que su jefe de Estado, Lula, a 12.000 kilómetros de allí, tenía toda la razón en recetar a su pueblo, una vez recobrada la voz, “trabajo, trabajo y trabajo desde mañana, no desde pasado mañana”.
El inmenso país que dirige el ex sindicalista tiene la responsabilidad de reconstruirse y liderar el crecimiento suramericano alimentado por el maná olímpico.
&lt;span class=&quot;texto-importante&quot;&gt;“Hay que dormir menos y trabajar más”, ordenó el presidente-milagro de Brasil.&lt;/span&gt;&lt;/p&gt;</pre></td></tr></table></div>

<p><strong>Ahora el código de jQuery quedaría así:</strong></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
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">&lt;script type=&quot;text/javascript&quot; src=&quot;http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js?ver=1.3.2&quot;&gt;&lt;/script&gt;
<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>
  $<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;">'span.texto-importante'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">each</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>
      $textoImportante <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: #339933;">;</span>
      $parrafoAntecesor <span style="color: #339933;">=</span> $textoImportante.<span style="color: #660066;">parent</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'p'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
      $textoImportante.<span style="color: #660066;">clone</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
       .<span style="color: #660066;">prependTo</span><span style="color: #009900;">&#40;</span>$parrafoAntecesor<span style="color: #009900;">&#41;</span>
       .<span style="color: #660066;">css</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#123;</span>
         <span style="color: #3366CC;">'background'</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'#e3e3e3'</span><span style="color: #339933;">,</span>
         <span style="color: #3366CC;">'float'</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'right'</span><span style="color: #339933;">,</span>
         <span style="color: #3366CC;">'width'</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'145px'</span><span style="color: #339933;">,</span>
         <span style="color: #3366CC;">'padding'</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'15px'</span><span style="color: #339933;">,</span>
         <span style="color: #3366CC;">'font'</span><span style="color: #339933;">:</span> <span style="color: #3366CC;">'italic 1.4em Times, serif'</span>
   <span style="color: #009900;">&#125;</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: #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></pre></td></tr></table></div>

<p>Vamos a ver los cambios línea a línea:</p>
<p><strong>Línea 4:</strong> Buscamos todos los span con la clase texto-importante. Con el método <em>.each()</em> de jQuery lo que conseguimos es crear un ciclo en el que iremos asignando a cada <em>span class=&#8217;texto-importante&#8217;</em> la función que sigue a continuación.<br />
<strong>Línea 5:</strong> Asignamos a la variable <em>$textoImportante</em> el span class=&#8221;texto-importante&#8221; concreto en el que estemos en nuestro cliclo.<br />
<strong>Línea 6:</strong> Asignamos a la variable <em>$parrafoAntecesor</em> el elemento p padre o antecesor del span. Lo vamos a usar como referencia para situar ahí nuestro elemento copiado.<br />
<strong>Línea8: </strong> Con el método de jQuery <em>.prependTo()</em> situamos el elemento copiado dentro de su elemento p antecesor.  </p>
<h3>Otras lecturas recomendadas:</h3>
<p>CSSTricks, <a href="http://css-tricks.com/better-pull-quotes/" title="Ir al artículo">Better Pull Quotes: Don’t Repeat Markup</a><br />
Smashing Magazine, <a href="http://www.smashingmagazine.com/2008/06/12/block-quotes-and-pull-quotes-examples-and-good-practices/" title="Ir al artículo de Smashing Magazine">Block Quotes and Pull Quotes: Examples and Good Practices</a><br />
Elements of Design, <a href="http://www.smileycat.com/design_elements/pull_quotes/" title="Ir al artículo de Elements of Design">Pull Quotes (28 examples)</a><br />
Pluging para WordPress, <a href="http://striderweb.com/nerdaphernalia/features/wp-javascript-pull-quotes/" title="Ir al plugin para WordPress">Javascript Pull-Quotes</a><br />
Documentación de jQuery, <a href="http://docs.jquery.com/Clone">sobre .clone()</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/como-pre-cargar-imagenes-con-jquery/" rel="bookmark" class="crp_title">Cómo pre-cargar imágenes con jQuery</a></li><li><a href="http://www.emenia.es/utilizando-css3-hoy-3-sombras/" rel="bookmark" class="crp_title">Utilizando CSS3 hoy (3): Sombras</a></li><li><a href="http://www.emenia.es/como-limitar-el-numero-de-palabras-en-the_content-o-the_excerpt-en-wordpress/" rel="bookmark" class="crp_title">Cómo limitar el número de palabras en the_content o the_excerpt en Wordpress</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://www.emenia.es/obtencion-y-resaltado-de-un-texto-especifico-dentro-de-un-articulo-con-jquery/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
