domingo, 20 de septiembre de 2015

Nuevos Selectores JavaScript - HTML



Como vimos anteriormente, los elementos HTML tienen que ser referenciados desde Javascript para ser afectados por el código. Si recuerda de previos capítulos, CSS, y especialmente CSS3, ofrece un poderoso sistema de referencia y selección que no tiene comparación con los pocos métodos provistos por Javascript para este propósito. Los métodos getElementById, getElementsByTagName y getElementsByClassName no son suficientes para contribuir a la integración que este lenguaje necesita y sostener la relevancia que posee dentro de la especificación de HTML5. Para elevar Javascript al nivel que las circunstancias requieren, nuevas alternativas debieron ser incorporadas. Desde ahora podemos seleccionar elementos HTML aplicando toda clase de selectores CSS por medio de los nuevos métodos querySelector() y querySelectorAll(). 

  • querySelector()
Este método retorna el primer elemento que concuerda con el grupo de selectores especificados entre paréntesis. Los selectores son declarados usando comillas y la misma sintaxis CSS, como en el siguiente ejemplo:

Código 4-4. Usando querySelector().

 
function hacerclic(){
document.querySelector(“#principal p:firstchild”).
onclick=mostraralerta;
}
function mostraralerta(){
alert('hizo clic!');
}
window.onload=hacerclic;

En el Código 4-4, el método getElementsByTagName usado anteriormente ha sido reemplazado por querySelector(). Los selectores para esta consulta en particular están referenciando al primer elemento <p> que es hijo del elemento identificado con el atributo id y el valor main.
Debido a que ya explicamos que este método solo retorna el primer elemento encontrado, probablemente notará que la pseudo clase first-child es redundante. El método querySelector() en nuestro ejemplo retornará el primer elemento <p> dentro de <div> que es, por supuesto, su primer hijo. El propósito de este ejemplo es mostrarle que querySelector() acepta toda clase de selectores válidos CSS y ahora, del mismo modo que en CSS, Javascript también provee herramientas importantes para referenciar cada elemento en el documento.
Varios grupos de selectores pueden ser declarados separados por coma. El método querySelector() retornará el primer elemento que concuerde con cualquiera de ellos.
Hágalo usted mismo: Reemplace el código en el archivo micodigo.js por el provisto en el Código 4-4 y abra el archivo HTML con el código del Código 4-3 en su navegador para ver el método querySelector() en acción.

  • querySelectorAll()
En lugar de uno, el método querySelectorAll() retorna todos los elementos que concuerdan con el grupo de selectores declarados entre paréntesis. El valor retornado es un arreglo (array) conteniendo cada elemento encontrado en el orden en el que aparecen en el documento.

Código 4-5. Usando querySelectorAll().

 
function hacerclic(){
var lista=document.querySelectorAll(“#principal p”);
lista[0].onclick=mostraralerta;
}
function mostraralerta(){
alert('hizo clic!');
}
window.onload=hacerclic;

El grupo de selectores especificados en el método querySelectorAll() del Código 4-5 encontrará cada elemento <p> en el documento HTML del Código 4-3 que es hijo del elemento <div>. Luego de la ejecución de esta primera línea, el array lista tendrá dos valores: una referencia al primer elemento <p> y una referencia al segundo elemento <p>. Debido a que el índice de cada array comienza por 0, en la próxima línea el primer elemento encontrado es referenciado usando corchetes y el valor 0 (lista[0]). 
Note que este ejemplo no muestra el potencial de querySelectorAll(). 
Normalmente será utilizado para afectar a varios elementos y no solo uno, como en este caso. Para interactuar con una lista de elementos retornados por este método, podemos utilizar un bucle for:

Código 4-6. Afectando todos los elementos encontrados por querySelectorAll().

 
function hacerclic(){
var lista=document.querySelectorAll(“#principal p”);
for(var f=0; f<lista.length; f++){
lista[f].onclick=mostraralerta;
}
}
function mostraralerta(){
alert('hizo clic!');
}
window.onload=hacerclic;

En el Código 4-6, en lugar de seleccionar solo el primer elemento encontrado, registramos el manejador de eventos onclick para cada uno de ellos usando un bucle for. Ahora, todos los elementos <p> dentro de <div> mostrarán una pequeña ventana cuando el usuario haga clic sobre ellos. 
El método querySelectorAll(), al igual que querySelector(), puede contener uno o más grupos de selectores separados por coma. Éstos y los demás métodos estudiados pueden ser combinados para referenciar elementos a los que resulta difícil llegar. Por ejemplo, en el próximo Código, el mismo resultado del código del Código 4-6 es logrado utilizando querySelectorAll() y getElementById() juntos:

Código 4-7. Combinando métodos.

 
function hacerclic(){
var lista=document.getElementById(‘principal’).
querySelectorAll(“p”);
lista[0].onclick=mostraralerta;
}
function mostraralerta(){
alert('hizo clic!');
}
window.onload=hacerclic;

Usando esta técnica podemos ver qué precisos pueden ser estos métodos. Podemos combinarlos en una misma línea y luego realizar una segunda selección con otro método para alcanzar elementos dentro de los primeros. En próximos capítulos estudiaremos algunos ejemplos más.



Espero haber ayudado en algo. Hasta la próxima oportunidad!








No hay comentarios:

Publicar un comentario en la entrada