En las entradas anteriores hemos aprendido lo más básico, a seleccionar elementos, hacer comprobaciones, algunas cosas que no deberías hacer, y a hacer un loop for. Ahora vamos a ver cómo editar los elementos que hemos seleccionado: Cambiar sus atributos.
Partimos del siguiente código:
<div id="ejemplo" data-atributo-sin-valor class="miejemplo" style="
width: 100px;
position: relative;
background: #2a7fce;
color: #111;
text-align: center;
line-height: 100px;">Soy el ejemplo!</div>
Para editar y obtener sus atributos nos serviremos de getAttribute
y setAttribute
. Como su nombre indica, sirven para obtener el valor de un atributo (getAttribute
) y configurarlo (setAttribute
).
getAttribute
A la función getAttribute
le pasaremos el nombre del atributo, y nos puede devolver:
null
si el atributo no está definido.- El valor del atributo (si el atributo está definido en el elemento, pero no tiene valor, se devolverá una string vacía (
""
))
Aquí tenéis un ejemplo básico, que podéis ver en la consola:
var elemento = document.querySelector('#ejemplo');
elemento.getAttribute('id'); // "ejemplo"
elemento.getAttribute('data-atributo-que-no-existe'); // null
elemento.getAttribute('data-atributo-sin-valor'); // ""
setAttribute
A la función setAtrribute
, le pasaremos el nombre del atributo y el valor que queremos darle:
var elemento = document.querySelector('#ejemplo');
elemento.setAttribute("data-atributo-que-no-existe", "Valor para ese atributo");
// Comprobación
elemento.getAttribute("data-atributo-que-no-existe"); // "Valor para ese atributo"
Atributos con una propiedad para sí mismos
Ojo, aunque getAttribute
y setAttribute
funcionarán, los elementos tienen ciertas propiedades específicas para acceder a algunos atributos. Aparte de style
(ver abajo), aquí tenéis algunos de las propiedades más frecuentes:
var elemento = document.querySelector('#ejemplo');
// class
elemento.className // "miejemplo"
elemento.className = "miejemplo ejemplo-especial"; // Ahora el elemento tendrá las clases "miejemplo" y "ejemplo-especial"
// id
elemento.id // "ejemplo"
Esas son globales, y son siempre strings, aunque no estén definidos. Pero en elementos más específicos se pueden encontrar otros.
En elementos más específicos (como <a>
, <img>
e <input>
) tenemos propiedades adicionales (no están todas pero sí las más importantes):
- En
<a>
tenemoshref
,target
ytitle
- En
<img>
tenemossrc
yalt
- En
<input>
estánvalue
ytype
…
El atributo style
Éste atributo es la madre del cordero, así que lo dejaré para otra entrada. Pero como introducción:
- Se accede a él de forma específica (
elemento.style
), pero no devuelve una string, sino unElementCSSInlineStyle
(para el caso, un objeto). - Ese objeto tiene tantas propiedades como propiedades css acepta el navegador
- Los nombres de esas propiedades son el de la propiedad (excepto
float
que es una palabra reservada), o están en camelCase si tienen guioneselemento.style.borderRadius
. Para hacer la conversión CSS/Javascript reemplazad todos los guiones y la letra siguiente por sólo la letra en mayúscula (ej:-moz-border-radius
›MozBorderRadius
)