DOM son las siglas de Document Object Model, una representación de un documento HTML en nodos y objetos. Los navegadores exponen una API que puede utilizar para interactuar con el DOM. Así es como funcionan los marcos de JavaScript modernos: utilizan la API DOM para indicarle al navegador qué mostrar en la página.
El DOM es la representación interna del navegador de una página web. Cuando el navegador recupera su HTML de su servidor, el analizador analiza la estructura de su código y crea un modelo del mismo. Según este modelo, el navegador muestra la página en la pantalla.
Los navegadores exponen una API que puede utilizar para interactuar con el DOM. Así es como funcionan los marcos de JavaScript modernos: utilizan la API DOM para indicarle al navegador qué mostrar en la página.
En las aplicaciones de una sola página, el DOM cambia continuamente para reflejar lo que aparece en la pantalla y, como desarrollador, puede inspeccionarlo usando elHerramientas para desarrolladores de navegadores.
El DOM es independiente del idioma, y el estándar de facto para acceder al DOM es mediante el uso deJavaScript, ya que es el único idioma que pueden ejecutar los navegadores.
El DOM está estandarizado por WHATWG en elEspecificaciones del estándar de vida DOM.
Con JavaScript puede interactuar con el DOM para:
- inspeccionar la estructura de la página
- acceder a los metadatos y encabezados de la página
- editar el estilo CSS
- adjuntar o eliminar detectores de eventos
- editar cualquier nodo de la página
- cambiar cualquier atributo de nodo
.. y mucho más.
Los 2 objetos principales proporcionados por la API DOM con los que interactuarás más sondocument
ywindow
.
El objeto Window
loswindow
objeto representa la ventana que contiene el documento DOM.
window.document
apunta aldocument
objeto cargado en la ventana.
Las propiedades y métodos de este objeto se pueden llamar sin hacer referenciawindow
explícitamente, porque representa el objeto global. Entonces, la propiedad anteriorwindow.document
generalmente se llama simplementedocument
.
Propiedades
Aquí hay una lista de propiedades útiles a las que probablemente hará referencia mucho:
console
apunta a la consola de depuración del navegador. Útil para imprimir mensajes de error o registro, usandoconsole.log
,console.error
y otras herramientas (ver elHerramientas de desarrollo del navegadorartículo)document
como ya se dijo, apunta aldocument
objeto, clave para las interacciones DOM que realizaráhistory
da acceso a laAPI de historiallocation
da acceso a laInterfaz de ubicación, a partir del cual puede determinar la URL, el protocolo, el hash y otra información útil.localStorage
es una referencia a laAPI de almacenamiento webobjeto localStoragesessionStorage
es una referencia al objeto sessionStorage de la API de almacenamiento web
Métodos
loswindow
El objeto también expone métodos útiles:
alert()
: que puede utilizar para mostrar cuadros de diálogo de alertapostMessage()
: utilizado por elAPI de mensajería de canalrequestAnimationFrame()
: utilizado para realizar animaciones de una manera que sea a la vez eficaz y fácil para la CPUsetInterval()
: llamar a una función cada n milisegundos, hasta que el intervalo se borre conclearInterval()
clearInterval()
: borra un intervalo creado consetInterval()
setTimeout()
: ejecuta una función después de 'n' milisegundossetImmediate()
: ejecuta una función tan pronto como el navegador esté listoaddEventListener()
: agrega un detector de eventos al documentoremoveEventListener()
: eliminar un detector de eventos del documento
Vea la referencia completa de todas las propiedades y métodos delwindow
objeto enhttps://developer.mozilla.org/en-US/docs/Web/API/Window
El objeto Documento
losdocument
objeto representa el árbol DOM cargado en una ventana.
Aquí hay una representación de una parte del DOM que apunta a las etiquetas de cabeza y cuerpo:
Aquí hay una representación de una parte del DOM que muestra la etiqueta principal, que contiene una etiqueta de título con su valor:
Aquí hay una representación de una parte del DOM que muestra la etiqueta del cuerpo, que contiene un enlace, con un valor y el atributo href con su valor:
Se puede acceder al objeto Documento desdewindow.document
, y desdewindow
es el objeto global, puedes usar el atajodocument
objeto directamente desde la consola del navegador o en su código JavaScript.
Este objeto Document tiene un montón de propiedades y métodos. losAPI de selectoresLos métodos son los que probablemente usará más:
document.getElementById()
document.querySelector()
document.querySelectorAll()
document.getElementsByTagName()
document.getElementsByClassName()
Puede obtener el título del documento usandodocument.title
y la URL que usadocument.URL
. El referente está disponible endocument.referrer
, el dominio endocument.domain
.
Desde eldocument
objeto puedes conseguir el cuerpo y la cabezaNodos de elementos:
document.documentElement
: el nodo Documentodocument.body
: labody
Nodo de elementodocument.head
: lahead
Nodo de elemento
También puede obtener una lista de todos los nodos de elementos de un tipo particular, como unColección HTMLCde todos los enlaces que utilizandocument.links
, todas las imágenes usandodocument.images
, todas las formas usandodocument.forms
.
El documentogalletasson accesibles endocument.cookie
. La última fecha de modificación endocument.lastModified
.
Puedes hacer mucho más, incluso conseguirvieja escuelay llena tus scripts condocument.write()
, un método que se utilizó mucho en los primeros días de JavaScript para interactuar con las páginas.
Vea la referencia completa de todas las propiedades y métodos deldocument
objeto enhttps://developer.mozilla.org/en-US/docs/Web/API/Document
Tipos de nodos
Hay diferentes tipos de nodos, algunos de los cuales ya ha visto en las imágenes de ejemplo anteriores. Los principales que encontrarás son:
- Documento: el documento Nodo, el inicio del árbol
- Elemento: una etiqueta HTML
- Attr: un atributo de una etiqueta
- Texto: el contenido de texto de un elemento o nodo de atributo
- Comentario: un comentario HTML
- Tipo de Documento: laDoctypedeclaración
Atravesando el DOM
El DOM es un árbol de elementos, con el nodo Documento en la raíz, que apunta alhtml
Nodo de elemento, que a su vez apunta a sus nodos de elemento hijohead
ybody
, etcétera.
Desde cada uno de esos elementos, puede navegar por la estructura DOM y moverse a diferentes nodos.
Conseguir al padre
Cada elemento tienesolo unopadre.
Para conseguirlo, puedes usarNode.parentNode
oNode.parentElement
(donde Nodo significa un nodo en el DOM).
Son casi iguales, excepto cuando se ejecutan en elhtml
elemento:parentNode
devuelve el padre del nodo especificado en el árbol DOM, mientras queparentElement
devuelve el elemento padre del nodo DOM, o nulo si el nodo no tiene padre o su padre no es un elemento DOM.
La gente suele usarparentNode
.
Conseguir a los niños
Para comprobar si un nodo tiene nodos secundarios, utiliceNode.hasChildNodes()
que devuelve un valor booleano.
Para acceder a todos los nodos de elementos secundarios de un nodo, utiliceNode.childNodes
.
El DOM también expone unNode.children
método. Sin embargo, no solo incluye nodos de elementos, sino también el espacio en blanco entre elementos como nodos de texto. Esto no es algo que generalmente desee.
Para obtener el primer nodo de elemento secundario, useNode.firstElementChild
. Para obtener el último nodo elemento secundario, useNode.lastElementChild
:
El DOM también exponeNode.firstChild
yNode.lastChild
, con la diferencia de que no "filtran" el árbol solo para los nodos de Elemento. También mostrarán nodos de texto vacíos que indican espacios en blanco.
En resumen, para navegar por los niños, use Element Nodes
Node.childNodes
Node.firstElementChild
Node.lastElementChild
Conseguir a los hermanos
Además de obtener el padre y los hijos, dado que el DOM es un árbol, también puede obtener los hermanos de cualquier nodo de elemento.
Puedes hacerlo usando
Node.previousElementSibling
Node.nextElementSibling
El DOM también exponepreviousSibling
ynextSibling
, pero como sus contrapartes descritas anteriormente, incluyen espacios en blanco como nodos de texto, por lo que generalmente los evita.
Editando el DOM
El DOM ofrece varios métodos para editar los nodos de la página y alterar el árbol del documento.
Con
document.createElement()
: crea un nuevo nodo de elementodocument.createTextNode()
: crea un nuevo nodo de texto
puede crear nuevos elementos y agregarlos a los elementos DOM que desee como hijos, utilizandodocument.appendChild()
:
const div = document.createElement('div')
div.appendChild(document.createTextNode('Hello world!'))
first.removeChild(second)
elimina el nodo hijo "segundo" del nodo "primero".document.insertBefore(newNode, existingNode)
inserta "newNode" como hermano de "existingNode", colocándolo antes que en la estructura del árbol DOM.element.appendChild(newChild)
altera el árbol debajo de "elemento", agregando un nuevo nodo hijo "newChild", después de todos los demás hijos.element.prepend(newChild)
altera el árbol bajo "elemento", agregando un nuevo nodo secundario "newChild", antes de otros elementos secundarios. Puede pasar uno o más nodos secundarios, o incluso una cadena que se interpretará como un nodo de texto.element.replaceChild(newChild, existingChild)
altera el árbol debajo de "elemento", reemplazando "existingChild" con un nuevo Nodo "newChild".element.insertAdjacentElement(position, newElement)
inserta "newElement" en el DOM, posicionado relativamente a "element" dependiendo del valor del parámetro "position".Ver los posibles valores.element.textContent = 'something'
cambia el contenido de un nodo de texto a "algo".
Descarga mi gratisManual para principiantes de JavaScript
Más tutoriales de navegador:
- Algunos trucos útiles disponibles en HTML5
- Cómo hice que un sitio web basado en CMS funcionara sin conexión
- La guía completa de aplicaciones web progresivas
- La API de Fetch
- La guía Push API
- La API de mensajería de canal
- Tutorial para trabajadores de servicios
- La guía de la API de caché
- La guía de la API de notificaciones
- Sumérjase en IndexedDB
- La API de selectores: querySelector y querySelectorAll
- Cargue JavaScript de forma eficiente con diferir y asincrónico
- El modelo de objetos de documento (DOM)
- La API de almacenamiento web: almacenamiento local y almacenamiento de sesiones
- Descubra cómo funcionan las cookies HTTP
- La API de historia
- El formato de imagen WebP
- XMLHttpRequest (XHR)
- Un tutorial detallado de SVG
- ¿Qué son las URL de datos?
- Hoja de ruta para aprender la plataforma web
- CORS, intercambio de recursos de origen cruzado
- Trabajadores web
- La guía requestAnimationFrame ()
- Que es el Doctype
- Trabajar con la consola de DevTools y la API de la consola
- La API de síntesis de voz
- Cómo esperar el evento DOM Ready en JavaScript simple
- Cómo agregar una clase a un elemento DOM
- Cómo recorrer los elementos DOM de querySelectorAll
- Cómo eliminar una clase de un elemento DOM
- Cómo comprobar si un elemento DOM tiene una clase
- Cómo cambiar un valor de nodo DOM
- Cómo agregar un evento de clic a una lista de elementos DOM devueltos por querySelectorAll
- WebRTC, la API web en tiempo real
- Cómo obtener la posición de desplazamiento de un elemento en JavaScript
- Cómo reemplazar un elemento DOM
- Cómo aceptar solo imágenes en un campo de archivo de entrada
- ¿Por qué utilizar una versión de vista previa de un navegador?
- El objeto Blob
- El objeto de archivo
- El objeto FileReader
- El objeto FileList
- ArrayBuffer
- ArrayBufferView
- El objeto URL
- Matrices escritas
- El objeto DataView
- La API BroadcastChannel
- La API de Streams
- El objeto FormData
- El objeto del navegador
- Cómo utilizar la API de geolocalización
- Cómo utilizar getUserMedia ()
- Cómo utilizar la API de arrastrar y soltar
- Cómo trabajar con el desplazamiento en páginas web
- Manejo de formularios en JavaScript
- Eventos de teclado
- Eventos del mouse
- Toque eventos
- Cómo eliminar a todos los hijos de un elemento DOM
- Cómo crear un atributo HTML usando Vanilla Javascript
- ¿Cómo verificar si una casilla de verificación está marcada usando JavaScript?
- Cómo copiar al portapapeles usando JavaScript
- Cómo deshabilitar un botón usando JavaScript
- Cómo hacer que una página sea editable en el navegador
- Cómo obtener valores de cadena de consulta en JavaScript con URLSearchParams
- Cómo eliminar todo el CSS de una página a la vez
- Cómo utilizar insertAdjectedHTML
- Safari, avisa antes de salir
- Cómo agregar una imagen al DOM usando JavaScript
- Cómo restablecer un formulario
- Cómo utilizar las fuentes de Google