Websarrolladores

Todo sobre diseño y desarrollo web

Nuevos selectores

Como vimos anteriormente, los elementos HTML tienen que ser referenciados desde Javascript para ser afectados por el código. Si recuerdas 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:

EJM 4.4

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

En el ejm 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.

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.

EJM 4.5

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 ejm 4.5 encontrará cada elemento <p> en el documento HTML del ejm 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]).

Para interactuar con una lista de elementos retornados por este método, podemos
utilizar un bucle for:

EJM 4.6

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 ejm 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 ejm, el mismo resultado del código del ejm 4.6 es logrado utilizando querySelectorAll() y getElementById() juntos.

EJM 4.7

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.

Tema creado por Anders Norén

¿Necesitas una web?

www.sutilweb.com