<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/"
    xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ Yulianny Betancourt - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Descubre miles de cursos de programación escritos por expertos. Aprende Desarrollo Web, Ciencia de Datos, DevOps, Seguridad y obtén asesoramiento profesional para desarrolladores. ]]>
        </description>
        <link>https://www.freecodecamp.org/espanol/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ Yulianny Betancourt - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/espanol/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sat, 16 May 2026 08:13:17 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/espanol/news/author/yulianny/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ Cómo funciona el DOM de JavaScript: Un tutorial práctico ]]>
                </title>
                <description>
                    <![CDATA[ Si estuvieras escuchando música en una aplicación y quisieras pausar o pasar una canción, tendrías que hacerlo a través de la aplicación. Este proceso es similar a cómo funciona el Modelo de objetos de documento o DOM. Aquí, la aplicación de música representa el DOM porque sirve como medio para ]]>
                </description>
                <link>https://www.freecodecamp.org/espanol/news/el-dom-de-javascript-un-tutorial-practico/</link>
                <guid isPermaLink="false">6361464c1c44c307f6c1db89</guid>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Yulianny Betancourt ]]>
                </dc:creator>
                <pubDate>Wed, 30 Nov 2022 19:05:04 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/espanol/news/content/images/2022/11/DOMpract-2-.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p data-test-label="translation-intro">
        <strong>Artículo original:</strong> <a href="https://www.freecodecamp.org/news/the-javascript-dom-a-practical-tutorial/" target="_blank" rel="noopener noreferrer" data-test-label="original-article-link">How the JavaScript DOM Works – A Practical Tutorial</a>
      </p><p>Si estuvieras escuchando música en una aplicación y quisieras pausar o pasar una canción, tendrías que hacerlo a través de la aplicación.</p><p>Este proceso es similar a cómo funciona el Modelo de objetos de documento o DOM. Aquí, la aplicación de música representa el DOM porque sirve como medio para realizar cambios en la música.</p><p>En este tutorial, tu aprenderás qué es el DOM y cómo funciona de una manera práctica.</p><h2 id="-qu-es-el-dom"><strong>¿Qué es el DOM?</strong></h2><p>El DOM es una API Web que permite a los desarrolladores usar la lógica de programación para realizar cambios en el código HTML. Es una manera confiable de realizar cambios que convierten los sitios web estáticos en dinámicos. </p><p>Este es un tema importante en el desarrollo web porque el DOM sirve para dar inicio al uso de JavaScript en el navegador. </p><p>El código HTML no es considerado parte del DOM hasta que es analizado por el navegador. Para ver que está pasando en el código HTML, cuando está siendo analizado, copia tu código desde la etiqueta <strong><strong><code>&lt;body&gt;</code></strong> </strong>y pégalo <a href="https://software.hixie.ch/utilities/js/live-dom-viewer/">aquí</a> (dentro del cuadro con el título 'Markup to test' después de los tres puntos).</p><h2 id="-qu-estaremos-construyendo"><strong>¿Qué estaremos construyendo?</strong></h2><p>En este artículo, estaremos aprendiendo lo más importante y las partes usadas con frecuencia del DOM para construir este simple proyecto:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2022/09/domProject-1.gif" class="kg-image" alt="domProject-1" width="600" height="400" loading="lazy"></figure><p>Lo puedes ver en CodePen <a href="https://codepen.io/ophyboamah/pen/bGMdbve">aquí</a>.</p><h2 id="funcionalidades-del-proyecto"><strong>Funcionalidades del Proyecto</strong></h2><p>Como puedes ver arriba en la demostración del proyecto, estas son las funcionalidades que estaremos implementado:</p><ol><li><strong>Cambio dinámico de color</strong>: Cuando se hace clic en un color, el color del carro, el botón addTocart, y la etiqueta, todos cambian para coincidir con el color seleccionado.</li><li><strong>Botón de cambio</strong>: Al hacer clic en el botón addToCart aparece el botón de éxito y viceversa.</li></ol><h2 id="requisitos-previos"><strong>Requisitos previos</strong></h2><ul><li>Conocimientos básicos de HTML y CSS.</li><li>Conocimientos básicos de JavaScript.</li><li>Un IDE (Editor de texto).</li><li>Un navegador web.</li></ul><p><strong>Tener en cuenta: </strong>Debido a que el objetivo del artículo es aprender sobre JavaScript y el DOM, no a vamos hacer mucho énfasis en el código de HTML y CSS. Daremos un vistazo rápido para poder preparar la aplicación. Luego profundizaremos para aprender sobre el DOM.</p><h2 id="c-digo-html-"><strong>Código HTML:</strong></h2><p>En nuestro archivo <code>index.html</code> , vamos a crear la estructura básica del proyecto, lo cual incluye: el enlace del archivo CSS, Font Awesome, y Google Fonts – todo dentro de nuestra etiqueta <code>&lt;head&gt;</code>. Dentro de nuestra etiqueta <code>&lt;body&gt;</code>, crearemos nuestra tarjeta del producto y enlazaremos nuestra etiqueta JavaScript al final de la etiqueta <code>&lt;body&gt;</code>.</p><pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
  &lt;head&gt;
    &lt;meta charset="UTF-8" /&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="IE=edge" /&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&gt;
    &lt;link
      rel="stylesheet"
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.2/css/all.min.css"
      integrity="sha512-1sCRPdkRXhBV2PBLUdRb4tMg1w2YPf37qatUFeS7zlBy7jJI8Lf4VHwWfZZfpXtYSLy85pkm9GaYVYMfw5BC1A=="
      crossorigin="anonymous"
      referrerpolicy="no-referrer"
    /&gt;
    &lt;link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /&gt;
    &lt;link
      href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;700&amp;display=swap"
      rel="stylesheet"
    /&gt;
    &lt;link rel="stylesheet" href="style.css" /&gt;
    &lt;title&gt;Práctica del DOM&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;div class="product-card"&gt;
      &lt;div class="product-image"&gt;
        &lt;!-- &lt;img src="./img/gray-benz.jpg" alt="cars" /&gt; --&gt;
      &lt;/div&gt;
      &lt;div class="product-description"&gt;
        &lt;h3 class="tag"&gt;CARRO&lt;/h3&gt;
        &lt;h1 class="product-title"&gt;Mercedez Benz c300 2022&lt;/h1&gt;
        &lt;p class="product-details"&gt;
          &lt;span class="mileage"&gt;
            &lt;span style="font-size: 1em; color: black"
              &gt;&lt;i class="fa-solid fa-car"&gt;&lt;/i
            &gt;&lt;/span&gt;
            Kilometraje: 4,000 millas
          &lt;/span&gt;
          &lt;span class="fuel"&gt;
            &lt;span style="font-size: 1em; color: black"
              &gt;&lt;i class="fa-solid fa-gas-pump"&gt;&lt;/i
            &gt;&lt;/span&gt;
            Combustible: 25mpg
          &lt;/span&gt;
          &lt;span class="safety"&gt;
            &lt;span style="font-size: 1em; color: black"
              &gt;&lt;i class="fa-solid fa-shield"&gt;&lt;/i&gt;&lt;/span
            &gt;Seguridad:
            &lt;span class="stars"&gt;
              &lt;i class="fa-solid fa-star"&gt;&lt;/i&gt;
              &lt;i class="fa-solid fa-star"&gt;&lt;/i&gt;
              &lt;i class="fa-solid fa-star"&gt;&lt;/i&gt;
              &lt;i class="fa-solid fa-star"&gt;&lt;/i&gt;
              &lt;i class="fa-solid fa-star"&gt;&lt;/i&gt;
            &lt;/span&gt;
          &lt;/span&gt;
        &lt;/p&gt;
        &lt;p&gt;Escoge un color:&lt;/p&gt;
        &lt;div class="colors-price"&gt;
          &lt;div class="colors"&gt;
            &lt;span class="red"&gt;&lt;/span&gt;
            &lt;span class="gray"&gt;&lt;/span&gt;
            &lt;span class="black"&gt;&lt;/span&gt;
          &lt;/div&gt;
          &lt;div class="pricing"&gt;
            &lt;h2 class="new-price"&gt;$134,450&lt;/h2&gt;
            &lt;h4 class="old-price"&gt;&lt;s&gt;$140,500&lt;/s&gt;&lt;/h4&gt;
          &lt;/div&gt;
        &lt;/div&gt;
        &lt;button id="button"&gt;
          &lt;span style="font-size: 1em; color: white"&gt;
            &lt;i class="fa-solid fa-cart-shopping"&gt;&lt;/i&gt;
          &lt;/span&gt;
          &lt;span class="button-text"&gt;Agregar al carrito&lt;/span&gt;
        &lt;/button&gt;
        &lt;button class="feedback"&gt;
          &lt;span id="white-button"
            &gt;? Guao, vas a ser el dueño de un Benz ?&lt;/span
          &gt;
        &lt;/button&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;script src="app.js"&gt;&lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;</code></pre><h2 id="c-digo-css-"><strong>Código CSS:</strong></h2><p>En nuestro archivo de estilos, primero vamos a configurar nuestros estilos generales así:</p><pre><code class="language-css">* {
  font-family: "Poppins", sans-serif;
}

body {
  height: 100vh;
  display: flex;
  justify-content: center;
  align-items: center;
  overflow-y: hidden;
  background-color: antiquewhite;
}
</code></pre><p>Luego, damos estilos a nuestro producto, &nbsp;empezando con la etiqueta, imagen, descripción y detalles.</p><pre><code class="language-css">/* etiqueta producto */
.tag {
  font-size: 0.9rem;
  background-color: black;
  border-radius: 5px;
  width: 4rem;
  display: flex;
  justify-content: center;
  color: #fff;
}

/* producto*/
.product-title {
  font-size: 2rem;
  font-weight: 700;
}

.product-card {
  background: #fff;
  display: grid;
  /* align-items: center; */
  grid-template-rows: 55% 45%;
  height: 80%;
  width: 30%;
  box-shadow: 10px 10px 25px 0px #3c3c3c;
}

.product-image {
  /* border: 2px solid black; */
  background-image: url("./img/black-benz.jpg");
  background-position: center;
  background-repeat: no-repeat;
  background-size: cover;
  padding: 40px 10px;
  width: 28rem;
  height: 66%;
}

.product-description {
  background-color: #62c256;
  color: #fff;
  padding-left: 20px;
  margin-top: -67px;
}

.product-details {
  display: flex;
  flex-direction: column;
  margin-top: -20px;
}

.product-image img {
  width: 28rem;
}

.stars {
  color: yellow;
  font-size: 1em;
}</code></pre><p>Después, le daremos estilos a nuestros colores: sus precios, colores como un grupo, y colores individuales.</p><pre><code class="language-css">/* colores */
.colors-price {
  display: flex;
  align-items: center;
  width: 70%;
  justify-content: space-between;
  margin-top: -15px;
}

.colors {
  display: flex;
  width: 6rem;
  justify-content: space-between;
  cursor: pointer;
}

.red {
  background: red;
  width: 25px;
  height: 25px;
  border-radius: 50%;
}

.gray {
  background: gray;
  width: 25px;
  height: 25px;
  border-radius: 50%;
}

.black {
  background: black;
  width: 25px;
  height: 25px;
  border-radius: 50%;
}

.pricing {
  display: flex;
  width: 12rem;
  justify-content: space-between;
  align-items: center;
}

.old-price {
  font-weight: 100;
}
</code></pre><p>Finalmente, le daremos estilos a nuestros botones con este código:</p><pre><code class="language-css">/* botones */
button {
  cursor: pointer;
}

#button {
  background-color: #000;
  padding: 10px 25px;
  border: none;
  border-radius: 5px;
}

button white-button {
  background-color: #fff;
}

.button-text {
  color: #fff;
  margin-left: 5px;
}

.feedback {
  display: none;
  padding: 10px 25px;
  border: none;
  border-radius: 5px;
}</code></pre><h2 id="implementaci-n-del-dom"><strong>Implementación del DOM</strong></h2><p>Todo en el DOM recae en alguna de estas dos categorías: selección de elementos y manipulación de elementos. Después de crear nuestros archivos HTML y CSS, nos dirigimos a nuestro archivo <code>app.js</code> para implementar lo siguiente:</p><ol><li><strong>Selección</strong>: Hacemos referencia a todos los elementos que queremos hacer dinámicos desde nuestro código HTML y les asignamos variables en nuestro archivo JavaScript.</li><li><strong>Manipulación</strong>: Una vez que hemos seleccionado y enlazado las variables, creamos las diversas funciones responsables de la manipulación y luego las enlazamos a las variables.</li></ol><h2 id="-c-mo-seleccionar-elementos-en-el-dom"><strong>¿Cómo seleccionar elementos en el DOM?</strong></h2><p>Para tener acceso a los elementos de HTML que se quieren manipular, necesitas hacer que JavaScript sea consciente de la existencia de dichos elementos. A esto nos referimos generalmente como "selección" de elementos – básicamente es enlazarlos.</p><p>In el DOM, no hay una sola forma de localizar y hacer referencia a un elemento para su manipulación. En cambio, dependerá del <a href="https://developer.mozilla.org/es/docs/Web/CSS/CSS_Selectors">selector</a> que hayas usado en la etiqueta del elemento.</p><p>Para ello, se asigna el elemento a una variable. Tomando el siguiente formato. Ten en cuenta que todos los selectores del DOM están precedidos por el objeto de documento y un punto:</p><pre><code class="language-javascript">const ejemplo = document.[DOMselector]</code></pre><p>En nuestro archivo de JavaScript, tenemos que seleccionar todos los elementos que queremos manipular, como el botón, los colores, la tarjeta de imagen, y la etiqueta.</p><p>Vamos a utilizar tantos selectores de DOM como sea posible, así que aprendamos más sobre ellos.</p><h3 id="c-mo-usar-el-queryselector">Cómo usar el <code>querySelector</code></h3><p><code>querySelector</code><strong> </strong>es un método que acepta el selector exacto del CSS en una cadena y retorna un elemento. Puedes usarlo para seleccionar los colores rojo y negro así como la tarjeta de imagen, usando sus nombres de clase.</p><p>Si quisieras usar este enfoque para seleccionar y retornar más de un elemento, puedes usar <strong><strong><code>QuerySelectorAll</code></strong> </strong>en su lugar.</p><pre><code class="language-javascript">const redColor = document.querySelector(".red");</code></pre><p>El código de arriba vincula el span con la clase "red" <code>&lt;span class="red"&gt;&lt;/span&gt;</code> de nuestro código HTML a la variable redColor en nuestro JavaScript.</p><pre><code class="language-javascript">const blackColor = document.querySelector(".black");
</code></pre><p>El código de arriba vincula el span con la clase "black" <code>&lt;span class="black"&gt;&lt;/span&gt;</code> de nuestro código HTML a la variable blackColor en nuestro JavaScript.</p><pre><code class="language-javascript">const imageCard = document.querySelector(".product-image");</code></pre><p>El código de arriba vincula el div con la clase "product-image" <code>&lt;div class="product-image"&gt;</code> de nuestro código HTML a la variable imageCard en nuestro JavaScript.</p><pre><code class="language-javascript">const feedbackBtn = document.querySelector(".feedback");</code></pre><p>El código de arriba vincula el botón con la clase "feedback" <code>&lt;button class="feedback"&gt;</code> de nuestro código HTML a la variable feedbackBtn en nuestro JavaScript.</p><h3 id="c-mo-usar-getelementsbyclassname"><strong>Cómo usar </strong><code><strong>getElementsByClassName</strong></code></h3><p>Puedes usar este selector para seleccionar el color gris. Es muy similar al <code>querySelector</code>. La única diferencia es que este método acepta solo el nombre de la clase, sin el punto anterior (.) </p><pre><code class="language-javascript">const grayColor = document.getElementsByClassName("gray");</code></pre><p>El código de arriba vincula el span con la clase "gray" <code>&lt;span class="gray"&gt;&lt;/span&gt;</code> de nuestro código HTML a la variable grayColor en nuestro JavaScript.</p><h3 id="c-mo-usar-getelementbyid"><strong>Cómo usar <code>getElementById</code></strong></h3><p>Puedes usar este selector para seleccionar el botón del carrito. Es muy similar al <code>getElementsByClassName</code>. La única diferencia es que debido a que usamos el ID para mostrar que es único, se usa solo en un elemento. Este método lee getElement, sin s al final.</p><pre><code class="language-javascript">const cartButton = document.getElementById("button");</code></pre><p>El código de arriba vincula el botón con el id "button" <code>&lt;button id="button"&gt;</code> de nuestro código HTML a la variable cartButton en nuestro JavaScript.</p><h3 id="c-mo-usar-getelementsbytagname"><strong>Cómo usar </strong><code><strong>GetElementsByTagName</strong></code></h3><p>Los atributos no son la única forma de seleccionar un elemento. También puedes usar nombres de etiqueta. Si has utilizado la etiqueta a la que haces referencia más de una vez, entonces retornara una lista de elementos. Use la indexación para seleccionar la correcta.</p><pre><code class="language-javascript">const itemTag = document.getElementsByTagName("h3")[0];</code></pre><p>El código de arriba enlaza el h3 que contiene nuestra etiqueta de producto <code>&lt;h3 class="tag"&gt;</code> de nuestro código HTML con la variable itemTag en nuestro JavaScript.</p><p>De todos estos, el querySelector y querySelectorAll son probablemente los más populares debido a como generalizan y lo menos restrictivos que son.</p><h2 id="c-mo-manipular-elementos-en-el-dom"><strong>Cómo manipular elementos en el DOM</strong></h2><p>La manipulación es el objetivo principal del DOM. Es todo lo que sucede después de hacer referencia y seleccionar los elementos con los que se desea trabajar. Esto conduce a un cambio en el estado del elemento, de estático a dinámico. </p><p>Dos conceptos que debe conocer para entender la manipulación del DOM son los <strong>eventos</strong> y los <strong>manejadores.</strong></p><h3 id="-qu-son-los-eventos"><strong>¿Qué son los Eventos?</strong></h3><p>Vamos a usar la misma analogía de música del inicio. En la aplicación de música, debes realizar una acción [hacer clic o deslizar] antes de que se activen las funcionalidades.</p><p>En el DOM, esta acción es conocida como un evento. Tenemos muchos eventos como el clic, desplazar, pasar el cursor por encima, cambiar, y más.</p><p>En el DOM, las respuestas están sujetas a cada evento. Es decir, que debe suceder un evento para obtener una respuesta. Esto es conocido como un <strong><strong>event listener</strong>. </strong>El detector de eventos usualmente viene en forma de un método <code>addEventListener</code> y este toma dos argumentos (evento, y manejador de evento).</p><h4 id="anatom-a-de-un-evento"><strong>Anatomía de un evento</strong></h4><p>Los eventos del DOM normalmente contienen un elemento, su event listener, y una función.</p><pre><code>element.[eventListenerMethod(event, eventHandler)</code></pre><h3 id="-qu-son-los-manejadores-de-eventos"><strong>¿Qué son los manejadores de Eventos?</strong></h3><p>Los manejadores de eventos son las respuestas enviadas cuando nuestro método event listener lee un evento. Sin un manejador de eventos, no tenemos manera de alertar a nuestro código de que un evento ha ocurrido.</p><p>Todas las modificaciones que suceden en el DOM, tales como estilizar, agregar, eliminar, entre otros, son responsabilidad de los manejadores de eventos. Estas son las funciones que se encuentran en el segundo argumento del método <strong><strong>addEventListener</strong>. </strong>Estas están siempre alerta para ejecutarse tan pronto ocurra el evento (el primer argumento).</p><pre><code class="language-javascript">redColor.addEventListener("click", function () {
  cartButton.style.backgroundColor = "red";
  itemTag.style.backgroundColor = "red";
  imageCard.style.backgroundImage = 'url("./img/red-benz.webp")';
});</code></pre><p><br>En el código de arriba, la función después del evento 'clic' es el manejador de evento. Esto quiere decir que todo lo que está dentro de la función será implementado cuando al color rojo se le haya hecho clic.</p><h2 id="-c-mo-implementar-los-eventos-y-los-manejadores-de-eventos"><strong>¿Cómo implementar los Eventos y los manejadores de Eventos?</strong></h2><p>En este proyecto, vamos a usar eventos y manejadores de eventos en 5 implementaciones. Veremos cada una de ellas a continuación.</p><p>Primero, los usaremos para <strong>hacer el color rojo funcional</strong>. Una vez que el usuario haga clic en el color rojo, al botón del carrito, y a la etiqueta del elemento se le agregará un fondo de color rojo en los estilos. La imagen del carro también cambiará a un color rojo.</p><p>Hacemos esto tomando la variable <code>redColor</code> y agregando un event listener, de 'clic'. Esto quiere decir, que cuando se haga clic en el color rojo, queremos que nuestro código sea alertado. En respuesta, la <code>function</code> manejadora del evento es ejecutada inmediatamente.</p><figure class="kg-card kg-code-card"><pre><code class="language-javascript">redColor.addEventListener("click", function () {
  cartButton.style.backgroundColor = "red";
  itemTag.style.backgroundColor = "red";
  imageCard.style.backgroundImage = 'url("./img/red-benz.webp")';
});</code></pre><figcaption>Haciendo el color rojo funcional</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2022/09/redColor-1.gif" class="kg-image" alt="redColor-1" width="600" height="400" loading="lazy"><figcaption>Vista del color rojo</figcaption></figure><p>Ahora, haremos <strong>el color gris funcional. </strong>Cuando un usuario haga clic en el color gris, al botón del carrito, y a la etiqueta del elemento se le agregará un fondo de color gris en los estilos. La imagen del carro también cambiará a un color gris.</p><p>Hacemos esto tomando la variable <code>grayColor</code> y agregando un event listener de 'clic'. Esto quiere decir, que cuando se haga clic en el color gris, queremos que nuestro código sea alertado. En respuesta, la <code>function</code> manejadora del evento es ejecutada inmediatamente.</p><figure class="kg-card kg-code-card"><pre><code class="language-javascript">grayColor[0].addEventListener("click", function () {
  cartButton.style.backgroundColor = "gray";
  itemTag.style.backgroundColor = "gray";
  imageCard.style.backgroundImage = 'url("./img/gray-benz.jpg")';
});</code></pre><figcaption>Haciendo el color gris funcional</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2022/09/grayColor-1.gif" class="kg-image" alt="grayColor-1" width="600" height="400" loading="lazy"><figcaption>Vista del color gris</figcaption></figure><p>Siguiendo el mismo patrón, haremos <strong>el color negro funcional. </strong>Cuando un usuario haga clic en el color negro, al botón del carrito, y a la etiqueta del elemento se le agregará un fondo de color negro en los estilos. La imagen del carro también cambiará a un color negro.</p><p>Hacemos esto tomando la variable <code>blackColor</code> y agregando un event listener de 'clic'. Esto quiere decir, que cuando se haga clic en el color negro, queremos que nuestro código sea alertado. En respuesta, la <code>function</code> manejadora del evento es ejecutada inmediatamente.</p><figure class="kg-card kg-code-card"><pre><code class="language-javascript">blackColor.addEventListener("click", function () {
  cartButton.style.backgroundColor = "black";
  itemTag.style.backgroundColor = "black";
  imageCard.style.backgroundImage = 'url("./img/black-benz.jpg")';
});</code></pre><figcaption>Haciendo el color negro funcional</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2022/09/blackColor-1.gif" class="kg-image" alt="blackColor-1" width="600" height="400" loading="lazy"><figcaption>Vista del color negro</figcaption></figure><p>Hemos visto un enfoque para los manejadores de eventos, el cual consiste en crear la función dentro del método addEventListener.</p><p>Otro enfoque es crear la función antes de pasar el nombre de la función como un argumento en el método addEventListener.</p><h3 id="c-mo-implementar-el-bot-n-del-carrito"><strong>Cómo implementar el botón del Carrito</strong></h3><p>Empezaremos creando una funcionan llamada <code>cart</code>. La función cart esconde el botón del carrito y muestra el botón de retroalimentación. El nombre de la función cart es entonces pasado al método event listener, como segundo argumento.</p><figure class="kg-card kg-code-card"><pre><code class="language-javascript">const cart = () =&gt; {
  cartButton.style.display = "none";
  feedbackBtn.style.display = "block";
};
cartButton.addEventListener("click", cart);</code></pre><figcaption>Implementación del botón del carrito</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2022/09/cartButton.gif" class="kg-image" alt="cartButton" width="600" height="400" loading="lazy"><figcaption>Vista del botón del carrito</figcaption></figure><h3 id="c-mo-implementar-el-bot-n-de-retroalimentaci-n"><strong>Cómo Implementar el botón de retroalimentación</strong></h3><p>We first create a function named feedback. The feedback function hides the feedback button and shows the cart button. The function name feedback is then passed to the event listener method as the second argument.</p><p>Primero creamos una función llamada <code>feedback</code>. La función feedback esconde el botón de retroalimentación y muestra el botón del carrito. El nombre de la función feedback es entonces pasado al método event listener como un segundo argumento.</p><figure class="kg-card kg-code-card"><pre><code class="language-javascript">const feedback = () =&gt; {
  cartButton.style.display = "block";
  feedbackBtn.style.display = "none";
};
feedbackBtn.addEventListener("click", feedback);</code></pre><figcaption>Implementación del botón del retroalimentación</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://www.freecodecamp.org/news/content/images/2022/09/feedbackButton.gif" class="kg-image" alt="feedbackButton" width="600" height="400" loading="lazy"><figcaption>Vista del botón de retroalimentación</figcaption></figure><h2 id="c-digo-completo-del-proyecto"><strong>Código completo del Proyecto</strong></h2><p>Este es el proyecto que construimos juntos a lo largo de este artículo:</p><figure class="kg-card kg-image-card"><img src="https://www.freecodecamp.org/news/content/images/2022/09/domProject-2.gif" class="kg-image" alt="domProject-2" width="600" height="400" loading="lazy"></figure><p>Aquí está el código completo del HTML:</p><figure class="kg-card kg-code-card"><pre><code class="language-html">&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
  &lt;head&gt;
    &lt;meta charset="UTF-8" /&gt;
    &lt;meta http-equiv="X-UA-Compatible" content="IE=edge" /&gt;
    &lt;meta name="viewport" content="width=device-width, initial-scale=1.0" /&gt;
    &lt;link
      rel="stylesheet"
      href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.2/css/all.min.css"
      integrity="sha512-1sCRPdkRXhBV2PBLUdRb4tMg1w2YPf37qatUFeS7zlBy7jJI8Lf4VHwWfZZfpXtYSLy85pkm9GaYVYMfw5BC1A=="
      crossorigin="anonymous"
      referrerpolicy="no-referrer"
    /&gt;
    &lt;link rel="preconnect" href="https://fonts.gstatic.com" crossorigin /&gt;
    &lt;link
      href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;500;700&amp;display=swap"
      rel="stylesheet"
    /&gt;
    &lt;link rel="stylesheet" href="style.css" /&gt;
    &lt;title&gt;Práctica del DOM&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;div class="product-card"&gt;
      &lt;div class="product-image"&gt;
        &lt;!-- &lt;img src="./img/gray-benz.jpg" alt="cars" /&gt; --&gt;
      &lt;/div&gt;
      &lt;div class="product-description"&gt;
        &lt;h3 class="tag"&gt;CARRO&lt;/h3&gt;
        &lt;h1 class="product-title"&gt;Mercedez Benz c300 2022&lt;/h1&gt;
        &lt;p class="product-details"&gt;
          &lt;span class="mileage"&gt;
            &lt;span style="font-size: 1em; color: black"
              &gt;&lt;i class="fa-solid fa-car"&gt;&lt;/i
            &gt;&lt;/span&gt;
           Kilometraje: 4,000 millas
          &lt;/span&gt;
          &lt;span class="fuel"&gt;
            &lt;span style="font-size: 1em; color: black"
              &gt;&lt;i class="fa-solid fa-gas-pump"&gt;&lt;/i
            &gt;&lt;/span&gt;
            Combustible: 25mpg
          &lt;/span&gt;
          &lt;span class="safety"&gt;
            &lt;span style="font-size: 1em; color: black"
              &gt;&lt;i class="fa-solid fa-shield"&gt;&lt;/i&gt;&lt;/span
            &gt;Seguridad:
            &lt;span class="stars"&gt;
              &lt;i class="fa-solid fa-star"&gt;&lt;/i&gt;
              &lt;i class="fa-solid fa-star"&gt;&lt;/i&gt;
              &lt;i class="fa-solid fa-star"&gt;&lt;/i&gt;
              &lt;i class="fa-solid fa-star"&gt;&lt;/i&gt;
              &lt;i class="fa-solid fa-star"&gt;&lt;/i&gt;
            &lt;/span&gt;
          &lt;/span&gt;
        &lt;/p&gt;
        &lt;p&gt;Escoge un color:&lt;/p&gt;
        &lt;div class="colors-price"&gt;
          &lt;div class="colors"&gt;
            &lt;span class="red"&gt;&lt;/span&gt;
            &lt;span class="gray"&gt;&lt;/span&gt;
            &lt;span class="black"&gt;&lt;/span&gt;
          &lt;/div&gt;
          &lt;div class="pricing"&gt;
            &lt;h2 class="new-price"&gt;$134,450&lt;/h2&gt;
            &lt;h4 class="old-price"&gt;&lt;s&gt;$140,500&lt;/s&gt;&lt;/h4&gt;
          &lt;/div&gt;
        &lt;/div&gt;
        &lt;button id="button"&gt;
          &lt;span style="font-size: 1em; color: white"&gt;
            &lt;i class="fa-solid fa-cart-shopping"&gt;&lt;/i&gt;
          &lt;/span&gt;
          &lt;span class="button-text"&gt;Agregar al carrito&lt;/span&gt;
        &lt;/button&gt;
        &lt;button class="feedback"&gt;
          &lt;span id="white-button"
            &gt;? Guao, vas a ser el dueño de un Benz ?&lt;/span
          &gt;
        &lt;/button&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;script src="app.js"&gt;&lt;/script&gt;
  &lt;/body&gt;
&lt;/html&gt;
</code></pre><figcaption>Código HTML del proyecto</figcaption></figure><p>Aquí está el CSS:</p><figure class="kg-card kg-code-card"><pre><code class="language-css">* {
  font-family: "Poppins", sans-serif;
}

body {
  height: 100vh;
  display: flex;
  justify-content: center;
  align-items: center;
  overflow-y: hidden;
  background-color: antiquewhite;
}

/* etiqueta de producto */
.tag {
  font-size: 0.9rem;
  background-color: black;
  border-radius: 5px;
  width: 4rem;
  display: flex;
  justify-content: center;
  color: #fff;
}

/* producto */
.product-title {
  font-size: 2rem;
  font-weight: 700;
}

.product-card {
  background: #fff;
  display: grid;
  /* align-items: center; */
  grid-template-rows: 55% 45%;
  height: 80%;
  width: 30%;
  box-shadow: 10px 10px 25px 0px #3c3c3c;
}

.product-image {
  /* border: 2px solid black; */
  background-image: url("./img/black-benz.jpg");
  background-position: center;
  background-repeat: no-repeat;
  background-size: cover;
  padding: 40px 10px;
  width: 28rem;
  height: 66%;
}

.product-description {
  background-color: #62c256;
  color: #fff;
  padding-left: 20px;
  margin-top: -67px;
}

.product-details {
  display: flex;
  flex-direction: column;
  margin-top: -20px;
}

.product-image img {
  width: 28rem;
}

.stars {
  color: yellow;
  font-size: 1em;
}

/* colores */
.colors-price {
  display: flex;
  align-items: center;
  width: 70%;
  justify-content: space-between;
  margin-top: -15px;
}

.colors {
  display: flex;
  width: 6rem;
  justify-content: space-between;
  cursor: pointer;
}

.red {
  background: red;
  width: 25px;
  height: 25px;
  border-radius: 50%;
}

.gray {
  background: gray;
  width: 25px;
  height: 25px;
  border-radius: 50%;
}

.black {
  background: black;
  width: 25px;
  height: 25px;
  border-radius: 50%;
}

.pricing {
  display: flex;
  width: 12rem;
  justify-content: space-between;
  align-items: center;
}

.old-price {
  font-weight: 100;
}

/* botones */
button {
  cursor: pointer;
}

#button {
  background-color: #000;
  padding: 10px 25px;
  border: none;
  border-radius: 5px;
}

button white-button {
  background-color: #fff;
}

.button-text {
  color: #fff;
  margin-left: 5px;
}

.feedback {
  display: none;
  padding: 10px 25px;
  border: none;
  border-radius: 5px;
}
</code></pre><figcaption>Código CSS del proyecto</figcaption></figure><p>Aquí está el código JavaScript:</p><figure class="kg-card kg-code-card"><pre><code class="language-javascript">/// 1. Cambiar el color del carrito y el color del botón addToCart cuando un color es seleccionado
/// - Seleccionando elementos
const redColor = document.querySelector(".red");
const grayColor = document.getElementsByClassName("gray");
const blackColor = document.querySelector(".black");
const cartButton = document.getElementById("button");
const itemTag = document.getElementsByTagName("h3")[0];
const imageCard = document.querySelector(".product-image");
const feedbackBtn = document.querySelector(".feedback");

// Modificando elementos
// - Agregando detectores de eventos
// - Color rojo
redColor.addEventListener("click", function () {
  cartButton.style.backgroundColor = "red";
  itemTag.style.backgroundColor = "red";
  imageCard.style.backgroundImage = 'url("./img/red-benz.webp")';
});

// - Color Gris
grayColor[0].addEventListener("click", function () {
  cartButton.style.backgroundColor = "gray";
  itemTag.style.backgroundColor = "gray";
  imageCard.style.backgroundImage = 'url("./img/gray-benz.jpg")';
});

// - Color Negro
blackColor.addEventListener("click", function () {
  cartButton.style.backgroundColor = "black";
  itemTag.style.backgroundColor = "black";
  imageCard.style.backgroundImage = 'url("./img/black-benz.jpg")';
});

// Implementando el evento clic en el botón
// - Botón del Carrito
const cart = () =&gt; {
  cartButton.style.display = "none";
  feedbackBtn.style.display = "block";
};
cartButton.addEventListener("click", cart);

// - Botón de retroalimentación
const feedback = () =&gt; {
  cartButton.style.display = "block";
  feedbackBtn.style.display = "none";
};
feedbackBtn.addEventListener("click", feedback);
</code></pre><figcaption>Código JavaScript del proyecto</figcaption></figure><h1 id="conclusi-n"><strong>Conclusión</strong></h1><p>El DOM es una parte esencial del desarrollo web moderno porque este ayuda a los desarrolladores a transformar aplicaciones de páginas web estáticas a dinámicas. </p><p>Como principiantes, puede ser difícil entender el DOM y todo lo que conlleva su manejo. Tomar tiempo para construir proyectos simples como este te ayudará a reforzar los conceptos.</p><p>Gracias por leer ??. Espero te haya sido de ayuda.</p> ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
