DEV Community

Cover image for #CienDiasConCourseIt: Día 4/100
Javier Rodriguez
Javier Rodriguez

Posted on • Updated on

#CienDiasConCourseIt: Día 4/100

DOM, classlist y eventos (click)

Resumen

El 4to día costó! Por falta de tiempo, aprendí poquitos temas pero cumpliendo (tarde, pero cumplí!). Ya empezamos a introducirnos en el concepto de DOM y le damos más dinamismo a nuestras páginas.
No entro mucho en detalle, pero quiero abarcar todos los temas aprendidos y por aprender, para luego ver más en profundidad métodos y/o conceptos nuevos en práctica pura.

Podrás ver la lista de los 100 días en este enlace.


DOM

DOM (Document Object Model) es un arbol de nodos de HTML (una estructura jerárquica). Dentro del body en nuestro HTML, podemos construir estos nodos para interactuar con ellos desde JS:

...
<body>
    <h1 id='title'>Esto es un título</h1>
    <p class='parr'>Esto es un parrafo copado</p>
    <div>
        <p>Esto es un parrafo copado dentro de un div</p>
        <p class='parr'>Esto es un parrafo copado dentro de un div</p>
    </div>
</body>
...
Enter fullscreen mode Exit fullscreen mode
    const titulo = document.getElementById('title');
    console.log(titulo); // <h1 id='title'>Esto es un título</h1>
    titulo.innerHTML = 'Esto es un titulo modificado';

    const parrafos = document.getElementsByClassName('parr');
    console.log(parrafos);

    const parrafitos = document.getElementsByTagName('p');
    console.log(parrafitos)
Enter fullscreen mode Exit fullscreen mode
  • getElementById: Obtenemos solo un elemento a través de un id.
  • getElementsByClassName: Obtenemos elementos por una class.
  • getElementsByTagName: Obtenemos elementos por un tag.

Con innerHTML editamos el contenido de nuestro elemento HTML.

Para clases y tags, veremos en la consola que obtenemos una especie de arrays que se las conoce como HTML Collections. En estos "arrays de HTML", tenemos métodos que podemos utilizar para interactuar un poco más con el DOM, uno de ellos es length:

<body>
    <h1 id='itemCount'></h1>
    <ul>
        <li>Item 1</li>
        <li>Item 2</li>
        <li>Item 3</li>
        <li>Item 4</li>
    </ul>
</body>
Enter fullscreen mode Exit fullscreen mode
const liCount = document.getElementsByTagName('li').length;
const result = document.getElementById('itemCount');
result.innerHTML = `Hay ${liCount} items en la lista!`;
Enter fullscreen mode Exit fullscreen mode

Usamos los métodos length e innerHTML. Con length puedo obtener el largo del HTML Collections y lo muestro en el tag h1 por id.
Obtener los elementos por tag no es muy práctico porque falla muy fácilmente agregando otro li que no quiero tener en cuenta. Así que lo mejor (en la mayoría de lo casos) es usar getElementById.

Classlist

Podemos agregar y eliminar el clases a un elemento HTML de esta manera:

<!-- HTML -->
<body>
    <div id="algo" class="cosito"></div>
</body>
Enter fullscreen mode Exit fullscreen mode
// CSS
.cosito{
    width: 300px;
    height: 300px;
    background-color: blue;
    transition: 1s all;
}

.socotroco{
    background-color: red;
    transition: 1s all;
}
Enter fullscreen mode Exit fullscreen mode

Y desde consola del inspector, hacemos:

const coso = document.getElementById('algo');

coso.classList; // Acá nos debería mostrar las clases que tiene nuestro div, que debería ser "cosito"
Enter fullscreen mode Exit fullscreen mode

classList nos muestra las clases que contiene un elemento HTML. Utilizando el método add agrega una clase. Con remove eliminamos una clase. Y con toggle agrega o elimina una clase

coso.classList.add('socotroco'); // Agrega la clase

coso.classList.remove('socotroco'); // Elimina la clase

coso.classList.toggle('socotroco'); // Agrega la clase
coso.classList.toggle('socotroco'); // Elimina la clase
Enter fullscreen mode Exit fullscreen mode

Eventos

Los eventos son interacciones que realizan los humanos en nuestra página en "algo". Puede ser sobre un botón, al hacer click derecho, tecla Enter, etc.
Editando el HTML de ClassList, en la propiedad onclick le damos una función:

<body>
    <div id="algo" class="cosito"></div>
    <button onclick="toggleSocotroco()">Apretame</button>
</body>
Enter fullscreen mode Exit fullscreen mode

Y usando el mismo css, podemos armar nuestro código de JS usando la función declarada:

const coso = document.getElementById('algo');

function toggleSocotroco(){
    coso.classList.toggle('socotroco');
}
Enter fullscreen mode Exit fullscreen mode

Si ven con antención, la variable coso está declarada fuera de la función. Esto es porque existe un concepto llamado scope, o sea, todas las variable que declaremos afuera de una función, la podemos utilizar dentro de una función.


Día 4/100

Top comments (0)