Capítulo 2: Selección de Elementos
Antes de poder hacer algo con un elemento (cambiar su color, ocultarlo, leer su texto), necesitas encontrarlo en el árbol del DOM. JavaScript nos ofrece varias herramientas para esto, desde métodos modernos hasta clásicos.
2.1. Métodos modernos: querySelector y querySelectorAll
querySelector y querySelectorAllSon los métodos estándar hoy en día. Permiten seleccionar elementos usando selectores CSS, lo que los hace extremadamente potentes y flexibles.
document.querySelector(selector): Devuelve el primer elemento que coincida. Si no encuentra nada, devuelvenull.document.querySelectorAll(selector): Devuelve una lista (NodeList) con todos los elementos que coincidan.
// Seleccionar por etiqueta
const titulo = document.querySelector('h1');
// Seleccionar por clase (nota el punto)
const tarjeta = document.querySelector('.card');
// Seleccionar por ID (nota la almohadilla)
const header = document.querySelector('#main-header');
// Selectores complejos (hijo directo)
const links = document.querySelectorAll('nav > ul > li > a');
// Seleccionar con atributos
const inputs = document.querySelectorAll('input[type="text"]');2.2. Métodos clásicos: getElementById, getElementsByClassName, getElementsByTagName
getElementById, getElementsByClassName, getElementsByTagNameEstos métodos son más antiguos pero siguen siendo muy rápidos y específicos. Es probable que los encuentres en código legacy.
document.getElementById('id'): El más rápido. Devuelve un elemento único. Nota: No lleva#.document.getElementsByClassName('clase'): Devuelve una HTMLCollection (colección "viva") de elementos.document.getElementsByTagName('tag'): Similar al anterior, pero por etiqueta (ej: 'div').
2.3. NodeList vs HTMLCollection vs Array
Aquí es donde muchos principiantes se confunden. Las colecciones devueltas por los métodos de selección no son Arrays verdaderos.
HTMLCollection: Es una colección "viva". Si el DOM cambia, la colección se actualiza sola automáticamente. Retornada por métodos
getElementsBy....NodeList: Generalmente estática (como una foto del momento exacto en que pediste los datos). Retornada por
querySelectorAll. Las NodeList modernas sí tienen.forEach().Array: Verdadero Array con todos los métodos (
.map(),.filter(),.reduce(), etc.).
2.4. Conversión a Array: Array.from() y Spread Operator
Array.from() y Spread OperatorPara usar toda la potencia de los métodos de Array que aprendiste en el Tema 13 (map, filter, reduce), debes convertir estas colecciones a Arrays verdaderos.
Opción 1: Array.from() (Recomendada)
Array.from() (Recomendada)Opción 2: Spread Operator [...]
[...]2.5. Selectores CSS avanzados en JavaScript
Gracias a querySelector, puedes usar lógica CSS avanzada para seleccionar elementos sin añadir clases extra:
Resumen del Capítulo
La selección de elementos es el primer paso para manipular el DOM. Usa querySelector y querySelectorAll para el 95% de tus necesidades por su flexibilidad con selectores CSS. Recuerda siempre que lo que devuelven no son Arrays puros; a menudo necesitarás usar Array.from() o el operador spread [...] para manipularlos cómodamente.
💡 Conceptos Clave:
querySelector: Selecciona el primer elemento que coincida
querySelectorAll: Selecciona todos los elementos que coincidan (retorna
NodeList)getElementById, getElementsByClassName, getElementsByTagName: Métodos clásicos
HTMLCollection: Colección "viva" que se actualiza con cambios en el DOM
NodeList: Colección estática (fotografía del DOM en el momento de la selección)
Array.from() y spread [...]: Convierte colecciones a Arrays verdaderos
Selectores CSS: Puedes usar toda la potencia de CSS en JavaScript
🤔 Preguntas de Reflexión:
¿Cuál es la diferencia entre
querySelectorygetElementById?¿Por qué querySelectorAll devuelve una NodeList y no un Array?
¿Cuál es la diferencia entre una HTMLCollection y una NodeList?
¿Cómo convertirías una NodeList a un Array para usar
.map()?Escribe un selector CSS avanzado que encuentre todos los botones dentro de un formulario.
¿Cuándo es importante entender que una HTMLCollection es "viva"?
Última actualización
¿Te fue útil?