Utilizacion del DOM
Obteniendo el texto de nodos
Existe principalmente 4 formas distintas de obtener texto de nodos HTML: nodeValue , innerHTML, textContent e innerText. Nosotros nos centraremos en el uso de:
- innerHTML: Obtiene el texto en formato “text/html” por lo que si el texto tuviese alguna etiqueta html la tendría en cuenta. Es un poco menos eficiente.
- textContent : Obtiene el texto en formato “text/plain”. Solo devuelve el texto tal cual por lo que su uso es un poco más eficiente que innerHTML.
Veamos un ejemplo:
Relación entre nodos
Con estas propiedades de DOM podemos localizar, movernos por los distintos elementos del árbol de nodos generado.
parentNode
La propiedad “parentNode” permite acceder al padre del nodo o devuelve null si no existe (por ejemplo, si el nodo no se ha añadido al documento).
firstElementChild y lastElementChild
Las propiedades firstElementChild y lastElementChild permiten acceder al primer y al último hijo de un nodo, como se puede comprobar en el ejemplo siguiente:
previousElementSibling y nextElementSibling
Por otra parte, previousElementSibling y nextElementSibling permiten acceder a los nodos hermanos, anterior y posterior respectivamente, de un mismo nodo. Sibling, en inglés, significa hermano/a. Ejemplo:
Obtención de nodos descendientes: 'children' y 'hasChildNodes()'
La propiedad children nos permite acceder a la lista de nodos contenidos que se puede tratar como un array y conocer la cantidad de nodos a través de la propiedad length . Por otro lado, si sólo se quiere saber si contiene otros nodos o no, se puede invocar el método hasChildNodes() , que devolverá “true” si contiene o “false” en caso contrario.
También podríamos iterar por los elementos como lo hemos visto en clase:
Para crear un nuevo elemento utilizaremos una serie de pasos con los que trabajaremos con una serie de métodos:
Vamos a ver un nuevo ejemplo de cómo podríamos crear una imagen:
Borrado de elementos
Para borrar elementos necesitamos tener acceso a 2 elementos: el padre del elemento que queremos borrar y el elemento a borrar. Para esta operación utilizaremos el método padre.removeChild(hijo). Veámoslo con un ejemplo:
Sustitución de elementos
Para sustituir o reemplazar elementos necesitamos también 3 elementos: el nodo padre, el nodo hijo que queremos reemplazar, y el nuevo elemento por el que se va a reemplazar. Para este cometido utilizamos el método padre.replaceChild ( <nuevoElemento>, <elementoReemplazado>). Veámoslo con un ejemplo:
- createElement: El método document.createElement ( <tipo_elemento>) creará un nuevo elemento HTML del tipo que deseemos.
- createTextNode: Para añadir contenido a dicho elemento recién creado debemos de utilizar el método document.createTextNode ( <contenido>) el cual nos va a crear un “nodo” con el contenido deseado.
- appendChild: Para añadir el nodo con el contenido al elemento HTML creado debemos de utilizar el método elementoHTML.appendChild ( <contenido>). Este método es usado con propósito general para añadir elementos a nuestro árbol DOM. (También si quisieramos insertar el nodo por el principio se puede usar el método “insertBefore()”).
- Y por último también podríamos añadirle atributos a dicho elemento recién creado mediante el método elementoHTML.setAttribute( <tipo_atributo>, <valor_atributo>). (Este método se usa tanto para añadir como para modificar atributos que ya existen). Si quisiéramos eliminar atributos podríamos utilizar el método elementoHTML.removeAttribute( <tipo_atributo> ).
Veamos un ejemplo de un método que crea un párrafo:
Vamos a ver un nuevo ejemplo de cómo podríamos crear una imagen:
Borrado de elementos
Para borrar elementos necesitamos tener acceso a 2 elementos: el padre del elemento que queremos borrar y el elemento a borrar. Para esta operación utilizaremos el método padre.removeChild(hijo). Veámoslo con un ejemplo:
Sustitución de elementos
Para sustituir o reemplazar elementos necesitamos también 3 elementos: el nodo padre, el nodo hijo que queremos reemplazar, y el nuevo elemento por el que se va a reemplazar. Para este cometido utilizamos el método padre.replaceChild ( <nuevoElemento>, <elementoReemplazado>). Veámoslo con un ejemplo:
/*-------------------------------- FORMAS DE ACCEDER A UN ELEMENTO HTML -------------------------------------------*/
//Seleccionar un único elemento según su ID
document.getElementById("parrafo1").innerHTML = "Cambiamos el texto html del parrafo1";
//Seleccionar todos los elementos segun su etiqueta
document.getElementsByTagName("p")[1]; //Nos devuelve un array por lo que debemos de indicar que posicion queremos.
//Seleccionar todos los elementos según su clase
document.getElementsByClassName("miClase")[0]; //Devuelve un array (igual que el de arriba);
//Seleccionar un elemento dentro de otro
var principal = document.getElementById("main");
var parrafo1 = principal.getElementById("parrafo1");
//Seleccionar el primer elemento con un selector css
document.querySelector("p.miClase");
//Seleccionar cualquier otro elemento con un selector css
document.querySelector("p.miClase")[0];
//Para modificar el css --> document.getElementById(id).style.property = new style
document.getElementById("p2").style.color = "blue";
//Para modificar el atributos ---------------------------------------------
//get
document.getElementById("p2").getAttribute("style");
//set
document.getElementById("p2").setAttribute("style", "background-color: red;");
//remove
document.getElementById("p2").removeAttribute("style");
//has
document.getElementById("p2").hasAttribute("style");
//Clases -----------------------------------------------------------------
//Add
document.getElementById("p1").className = "miClase"; //si se pone = se añade, sino devuelve las clases
//Remove
document.getElementById("p1").classList.remove("miClase"); //classList devuelve todas las clases y tiene los metodos
//add, remove, toggle, contains