If you're seeing this message, it means we're having trouble loading external resources on our website.

Si estás detrás de un filtro de páginas web, por favor asegúrate de que los dominios *.kastatic.org y *.kasandbox.org estén desbloqueados.

Contenido principal

Resumen: métodos de acceso del DOM

¿Qué métodos podemos usar?

Te mostramos cómo puedes utilizar los siguientes métodos para encontrar uno o más elementos en tu página web:

¿Qué es lo que regresan?

Hay dos métodos que regresan un único objeto Element, getElementById y querySelector:
var salsMotto = document.getElementById("salsMotto");
salsMotto.innerHTML = "Las matemáticas son geniales";
Los métodos getElementsByClassName y getElementsByTagName regresan un objeto HTMLCollection que actúa como un arreglo. Esa colección está "viva", lo que significa que la colección se actualiza si al documento se le agregan elementos adicionales con nombre de etiqueta o nombre de clase.
var teamMembers = document.getElementsByClassName("team-member");
for (var i = 0; i < teamMembers.length; i++) {
   console.log(teamMembers[i].innerHTML);
}
El método querySelectorAll() regresa un NodeList, que también actúa como un arreglo. Esa lista es "estática", lo que significa que la lista no se actualizará aunque se le agreguen nuevos elementos coincidentes a la página. Lo más probable es que no te encuentres con la diferencia entre los dos tipos de datos de regreso cuando estés usando estos métodos, pero es bueno tenerlo en cuenta.
var teamMembers = document.querySelectorAll(".team-member");
for (var i = 0; i < teamMembers.length; i++) {
   console.log(teamMembers[i].innerHTML);
}

Acceder con subconsultas

Una vez que hayas encontrado un elemento, puedes hacer subconsultas sobre él al usar los métodos que acabamos de mostrar. Por ejemplo:
// encuentra el elemento con esa ID
var salsMotto = document.getElementById("salsMotto");
// encuentra los spans dentro de ese elemento:
var mottoWords = salsMotto.getElementsByTagName("span");
// escribe en consola cuántos hay
console.log(mottoWords.length);

Atravesar el DOM

Otra manera de acceder a los elementos es "atravesar" el árbol del DOM. Cada elemento tiene propiedades que apuntan a los elementos relacionados con él:
  • firstElementChild
  • lastElementChild
  • nextElementChild/nextElementSibling
  • previousElementChild/previousElementSibling
  • childNodes
  • childElementCount
Por ejemplo:
var salsMotto = document.getElementById("salsMotto");
for (var i = 0; i < salsMotto.childNodes.length; i++) {
   console.log(salsMotto.childNodes[i]);
}
Estas propiedades no están disponibles en los nodos Text, solo en los nodos Element. Para asegurarte de que puedas atravesar un elemento, puedes revisar sus propiedades nodeType/nodeValue. Probablemente no necesites o quieras atravesar el DOM, pero es otra opción disponible para ti.

¿Quieres unirte a la conversación?

  • Avatar winston default style para el usuario Ariel Gimenez
    A medida que voy estudiando todo la cosa se va haciendo mas compleja,es bastante informacion para dijerir,espero que con tiempo pueda adquirir el conosimiento para recordar tantas palabras.definitivamente es un lenguaje
    (5 votos)
    Avatar Default Khan Academy avatar para el usuario
  • Avatar duskpin ultimate style para el usuario Sergio Andres Valencia Yepes
    En el desafio modernizacion de las cuestiones no entiendo que tengo que hacer en el tercer paso, se que tengo que pasar cambiar el doth en minuscula con does en minuscula, pero no entiendo como quieren que lo haga
    (3 votos)
    Avatar Default Khan Academy avatar para el usuario
    • Avatar leaf grey style para el usuario Marto Vallés
      Lo que te piden es agregar todos los elementos de la clase doth a una variable array en js para luego recorrerla y cambiarle el innerHTML que es el contenido, por does.

      Primero tienes que crear una clase para poder usar el querySelector (que si recuerdas, sólo es aplicable a definiciones de CSS), esto se hace de la siguiente manera, apuntando a doth:

      <style>
      li .doth {
      }
      </style>

      Luego, defines el script que te permite acceder a esa clase:

      <style>
      li .doth {
      }
      </style>
      <script>
      // Step 1: Store all doth that are inside lis in dothEls
      var dothEls = document.querySelectorAll("li .doth");
      // Step 2: Iterate through them and change doth to does
      for(var i=0;i<dothEls.length;i++){
      dothEls[i].innerHTML = "does"
      }
      </script>

      Espero que te haya servido
      (11 votos)
  • Avatar blobby green style para el usuario DIEGO RAFAEL FLORES MARINEZ
    Es un tanto complicado este tema
    (2 votos)
    Avatar Default Khan Academy avatar para el usuario
  • Avatar male robot hal style para el usuario Milena Pellegrino
    Aca les dejo el ejercicio de modernizador de las cuestiones, tratando de explicarlo paso por paso:




    <script>
    // Step 1: Store all doth that are inside lis in dothEls
    var dothEls = document.querySelectorAll("li .doth")
    // Step 2: Iterate through them and change doth to does
    for(var i = 0; i < dothEls.length; i++){
    dothEls[i].innerHTML = "does"
    }
    </script>




    -------------- EXPLICACIÓN --------------

    1-
    <script>
    //Primero definimos el <script> es la etiqueta que se utiliza para poder programar y escribir codigo en JavaScript en HTML.
    (cuando programes un proywecto verdaderos se van a estar utilizando diferentes ventanas o sea diferentes archivos, ejemplo una con formato .html (para la estructura de la pagina web) otro con formato .css (para el diseño y personalizacion de tu pagina) y otro .js (con el cual podras escribir codigo en JavaScript, para poder hacer tu pagina web dinamica.)
    </script>

    2-
    <script>
    // Step 1: Store all doth that are inside lis in dothEls
    var dothEls = document.querySelectorAll("li .doth")

    // en el codigo anterior se declara una variable con el nombre "dothEls" la cual contiene el metodo "querySelectorAll" sirve para devolver una lista de elementos del documento que coinciden con el grupo de selectores indicados. En resumen lo que se esta haciendo es decirle busca dentro de los "li" la clase ".doth"
    var dothEls = document.querySelectorAll("li .doth")
    * ATENCION Por este motivo no esta escrito ".
    li.doth" es SEPARADO ya que esta haciendo dos cosas distintas, primero busca los LI, y depsues le decimos ah genial ya encontraste los "li" bueno ahora dentro de esta lista busca todo lo que contenga la clase .doth
    </script>

    3-

    <script>
    // Step 1: Store all doth that are inside lis in dothEls
    var dothEls = document.querySelectorAll("li .doth")
    // Step 2: Iterate through them and change doth to does
    for(var i = 0; i < dothEls.length; i++){
    dothEls[i].innerHTML = "does"
    }
    //Lo ultimo es sencillo, un bucle for, primero se declara una variable, como buena practica siempre se pone "i" a esta variable que vamos a utilizar en este bucle le damos el valor de 0, ya que todavia no vale nada.
    Luego sigue la condicion, y ahi decimos que el bucle parara, cuando i sea menor (<) que dothEls.LENGTH (es la variable que definimos anteriormente, o sea si vemos el contenido dothEls, nos encontraremos que es un ARRAY con todas las clases .doth) y PORQUE .LENGTH es una propiedad de los array que te permite saber la longitud que este tiene, o sea le estamos diciendo que el bucle no pare hasta que se recorra todo ese array.
    Luego lo iteramos, para que recorra el array, o sea que cada vez que el bucle de una vuelta se sume uno (i++)
    Y para terminar decimos que dothEls (nuestra variable) que en cada unidad del array [i] i es lo que contiene cada parte del array, cambie el texto esto lo hacemos a traves de innerHTML por "does"
    </script>

    VOTAA SI ENTENDISTE, tratare de responder sus dudas!
    (2 votos)
    Avatar Default Khan Academy avatar para el usuario
  • Avatar hopper cool style para el usuario azulito1
    ¿no entendí que hace

    • firstElementChild
    • lastElementChild
    • nextElementChild/nextElementSibling
    • previousElementChild/previousElementSibling
    • childNodes
    • childElementCount?
    (1 voto)
    Avatar Default Khan Academy avatar para el usuario
    • Avatar blobby green style para el usuario JOSEDAV777
      childNodes: devuelve una matriz de nodos secundarios de un elemento.
      firstChild: devuelve el primer nodo hijo de un elemento.
      lastChild devuelve el último nodo hijo de un elemento.
      hasChildNodes: devuelve verdadero si un elemento tiene nodos secundarios, de lo contrario falso.
      nextSibling: devuelve el siguiente nodo en el mismo nivel de árbol.
      previousSibling: devuelve el nodo anterior en el mismo nivel de árbol.
      parentNode: devuelve el nodo padre de un elemento.
      (1 voto)
  • Avatar hopper happy style para el usuario Manuel Roldan
    ¿Cómo obtengo a todos los siblings de un elemento childNode y los filtro según su clase?
    (1 voto)
    Avatar Default Khan Academy avatar para el usuario
  • Avatar piceratops seed style para el usuario jorge Alberto
    en le desafió de modernizador, se supone que document.querySelectorAll es para Css, en la pagina web no hay estilos, "<style>", ¿o no solo es estrictamente para Css sino tambien para HTML?.
    (1 voto)
    Avatar Default Khan Academy avatar para el usuario
¿Sabes inglés? Haz clic aquí para ver más discusiones en el sitio en inglés de Khan Academy.