<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Ulises A.F.C</title>
    <description>The latest articles on Forem by Ulises A.F.C (@ulisesafcdev).</description>
    <link>https://forem.com/ulisesafcdev</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F930369%2F1d3ddc54-9877-48cb-8ee6-66026fdda673.jpeg</url>
      <title>Forem: Ulises A.F.C</title>
      <link>https://forem.com/ulisesafcdev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/ulisesafcdev"/>
    <language>en</language>
    <item>
      <title>Primeros pasos con AJAX: XMLHttpRequest</title>
      <dc:creator>Ulises A.F.C</dc:creator>
      <pubDate>Wed, 06 Aug 2025 02:25:45 +0000</pubDate>
      <link>https://forem.com/ulisesafcdev/primeros-pasos-con-ajax-xmlhttprequest-1j7</link>
      <guid>https://forem.com/ulisesafcdev/primeros-pasos-con-ajax-xmlhttprequest-1j7</guid>
      <description>&lt;p&gt;Para empezar a utilizar AJAX y consumir API's es necesario tener conocimientos básicos en el lenguaje.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;XMLHttpRequest&lt;/strong&gt; es un objeto de JavaScript, es un estándar en la W3C, y nos proporciona información de una URL de forma fácil. &lt;/p&gt;

&lt;p&gt;Iniciaremos creando dos archivos, un archivo &lt;strong&gt;html&lt;/strong&gt; y el otro archivo &lt;strong&gt;javascript&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv57qwx8qpx27p41xg2pz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv57qwx8qpx27p41xg2pz.png" alt="cap" width="249" height="88"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dentro del archivo &lt;strong&gt;html&lt;/strong&gt; incluiremos el archivo &lt;strong&gt;javascript&lt;/strong&gt; para verlo en la consola del navegador.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang="en"&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset="UTF-8"&amp;gt;
    &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&amp;gt;
    &amp;lt;title&amp;gt;XMLHttpRequest&amp;lt;/title&amp;gt;
    &amp;lt;style&amp;gt;
        body {
            font-family: monospace;
        }
    &amp;lt;/style&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;

    &amp;lt;h1&amp;gt;XMLHttpRequest&amp;lt;/h1&amp;gt;
    &amp;lt;hr&amp;gt;

    &amp;lt;script src="xmlhttp.js"&amp;gt;&amp;lt;/script&amp;gt;

&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ahora trabajaremos con el archivo &lt;strong&gt;javascript&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Para empezar a utilizar &lt;strong&gt;XMLHttpRequest&lt;/strong&gt; debemos entender que es un objeto el cual debemos hacer una instancia de ella en nuestro archivo y para ello definiremos una constante de la siguiente manera:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const xhr = new XMLHttpRequest;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Al crear una instancia del objeto &lt;strong&gt;XMLHttpRequest&lt;/strong&gt; podemos ver sus metodos y propiedades al mostrarlo en consola:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;console.log(xhr);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjpv7f6j2oo462xah0fvk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjpv7f6j2oo462xah0fvk.png" alt="cap" width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Podemos ver que al imprimir en consola nos muestra todos sus metodos, propiedades y eventos, de los cuales tomaremos en cuenta los siguientes:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff32koutnagvhwlbmz57b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff32koutnagvhwlbmz57b.png" alt="cap" width="800" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como primer paso &lt;strong&gt;readystatechange&lt;/strong&gt;, este contiene el manejador del evento que es invocado cuando se dispara el evento &lt;strong&gt;readystatechange&lt;/strong&gt;, lo cual sucede cada vez que cambia el valor de la propiedad &lt;strong&gt;readyState&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Al saber lo antes mencionado asignaremos el evento &lt;strong&gt;readystatechange&lt;/strong&gt; a nuestra instancia del objeto &lt;strong&gt;XMLHttpRequest&lt;/strong&gt;, y dentro mandaremos a imprimir la instancia:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;xhr.addEventListener("readystatechange", e =&amp;gt; {
    console.log(xhr);
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Al hacerlo observamos que ya no nos muestra nada en consola, pero, es porque esta esperando a que el valor de la propiedad &lt;strong&gt;readyState&lt;/strong&gt; cambie. Por defecto su valor es cero, pero sus valores pueden cambiar segun su estado del cliente.&lt;/p&gt;

&lt;p&gt;Cada numero que se muestra significa un estado en el que se encuentra el cliente &lt;strong&gt;XMLHttpRequest&lt;/strong&gt;, y cada numero significa lo siguiente:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi5zalljfwcehg29d8gpi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi5zalljfwcehg29d8gpi.png" alt="cap" width="781" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para que el cliente vaya cambiando su valor hasta llegar a "4" &lt;strong&gt;DONE&lt;/strong&gt;, debemos continuar con el paso siguiente, iniciar la solicitud recien creada y eso lo hacemos invocando al metodo &lt;strong&gt;open()&lt;/strong&gt; de la siguiente manera:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;xhr.open("GET", "https://jsonplaceholder.typicode.com/users");
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El cual recibe dos parametros principales, primero, el metodo de solicitud HTTP, y segundo, la direccion URL de la API o al recurso donde se hara la solicitud, para la URL usaremos &lt;a href="https://jsonplaceholder.typicode.com/" rel="noopener noreferrer"&gt;JSONPlaceholder&lt;/a&gt;, que nos permite a acceder a una API falsa con datos ficticios para poder practicar..&lt;/p&gt;

&lt;p&gt;Entre los principales metodos de solicitud HTTP son:&lt;/p&gt;

&lt;h3&gt;
  
  
  GET
&lt;/h3&gt;

&lt;p&gt;El metodo HTTP &lt;code&gt;GET&lt;/code&gt; solicita una representación del recurso especificado. Las solicitudes que usan &lt;code&gt;GET&lt;/code&gt; solo deben usarse para recuperar datos (no deben incluir datos).&lt;/p&gt;

&lt;h3&gt;
  
  
  POST
&lt;/h3&gt;

&lt;p&gt;El metodo HTTP &lt;code&gt;POST&lt;/code&gt; envía datos al servidor. El tipo del cuerpo de la solicitud está indicado por la cabecera &lt;code&gt;Content-Type&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  PUT
&lt;/h3&gt;

&lt;p&gt;El metodo (idempotente) HTTP &lt;code&gt;PUT&lt;/code&gt; crea un nuevo elemento o reemplaza una representación del elemento de destino con los datos de la petición. &lt;/p&gt;

&lt;p&gt;Diferencia entre &lt;code&gt;PUT&lt;/code&gt; &amp;amp; &lt;code&gt;POST&lt;/code&gt; es que &lt;code&gt;PUT&lt;/code&gt; es un metodo idempotente, es decir, llamarlo una o más veces de forma sucesiva tiene el mismo efecto (sin efectos secundarios), mientras que una sucesión de peticiones &lt;code&gt;POST&lt;/code&gt; idénticas pueden tener efectos adicionales, como enviar una orden varias veces.&lt;/p&gt;

&lt;h3&gt;
  
  
  DELETE
&lt;/h3&gt;

&lt;p&gt;El metodo HTTP &lt;code&gt;DELETE&lt;/code&gt; elimina el recurso especificado.&lt;/p&gt;

&lt;h3&gt;
  
  
  ...
&lt;/h3&gt;

&lt;p&gt;Una vez sabiendo esto podemos continuar con el siguiente paso, que es enviar la peticion invocando al metodo &lt;strong&gt;send()&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;xhr.send();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Al tener todo esto escrito en nuestro codigo, se debe de ver asi:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const xhr = new XMLHttpRequest;

xhr.addEventListener("readystatechange", e =&amp;gt; {

    console.log(xhr);

});


xhr.open("GET", "https://jsonplaceholder.typicode.com/users");

xhr.send();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hoy si podemos visualizar en consola lo siguiente:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb124r518fz7ozesxha0k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb124r518fz7ozesxha0k.png" alt="cap" width="800" height="275"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nos imprime 4 veces en consola la instancia realizada con el evento &lt;strong&gt;readystatechange&lt;/strong&gt;, es porque segun va cambiando de estado nos va imprimiendo cada valor de la propiedad &lt;strong&gt;readyState&lt;/strong&gt;, por eso es que si observamos bien podemos ver que en la propiedad &lt;strong&gt;readyState&lt;/strong&gt; se va mostrando por cada impresion en consola el numero &lt;strong&gt;1, 2, 3, 4&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxvk7zt8os07w8d3mgvpm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxvk7zt8os07w8d3mgvpm.png" alt="cap" width="800" height="271"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ahora teniendo en cuenta esto, volvemos dentro del evento &lt;strong&gt;readystatechange&lt;/strong&gt; que asignamos a nuestra instancia del objeto &lt;strong&gt;XMLHttpRequest&lt;/strong&gt;, aca es donde sucede la magia:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;xhr.addEventListener("readystatechange", e =&amp;gt; {

    console.log(xhr);

});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Antes de imprimir el objeto vamos a hacer algunas validaciones, ya que hasta este paso el objeto nos muestra cuatro veces en consola por cada cambio de valor de la propiedad &lt;strong&gt;readyState&lt;/strong&gt;, y nos interesa que nos muestre en consola solo cuando &lt;em&gt;readyState&lt;/em&gt;* tenga como valor el numero 4.&lt;/p&gt;

&lt;p&gt;Para eso hacemos la validacion correspondiente agregando dentro del evento lo siguiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    if (xhr.readyState !== 4) return;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Accedemos a la propiedad &lt;strong&gt;readyState&lt;/strong&gt; y validamos que cuando el valor de la propiedad &lt;strong&gt;readyState&lt;/strong&gt; sea diferente de 4, que no haga nada, por eso ponemos "return". Ya que nos interesa que solo nos muestre cuando el valor de la propiedad &lt;strong&gt;readyState&lt;/strong&gt; sea "4".&lt;/p&gt;

&lt;p&gt;Al ver en consola vemos que ya solo nos imprime una vez:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqy13jasldvq1g5edlnwt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqy13jasldvq1g5edlnwt.png" alt="cap" width="800" height="177"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ahora que ya validamos eso, nos toca evaluar cuando la propiedad &lt;strong&gt;status&lt;/strong&gt; este en el codigo de estado de respuesta HTTP correcto, estos codigos empiezan desde el numero 100 hasta 599. &lt;/p&gt;

&lt;p&gt;Los codigos de estado de respuesta HTTP son los siguientes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Respuestas informativas (100 - 199)&lt;/li&gt;
&lt;li&gt;Respuestas satisfactorias (200 - 299)&lt;/li&gt;
&lt;li&gt;Redirecciones (300 - 399)&lt;/li&gt;
&lt;li&gt;Errores de los clientes (400 - 499)&lt;/li&gt;
&lt;li&gt;Errores de servidores (500 - 599)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cada codigo representa algo en la web y mas cuando hacemos peticiones con AJAX, aca te muestro una captura donde podemos observar esos codigos que se estan ejecutando a medida que vamos realizando este tutorial, en el navegador cuando inspeccionamos la pagina, en el apartado de "network" vemos lo siguiente:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F14uvpau10ao03ohmhe56.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F14uvpau10ao03ohmhe56.png" alt="cap" width="800" height="313"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Podemos ver el &lt;strong&gt;status&lt;/strong&gt; (codigos de estado de respuesta HTTP), observamos que nos muestra un &lt;strong&gt;codigo de respuestas informativas&lt;/strong&gt; (101), estas son solo de informacion, en este caso es del web socket que se implementa en el navegador y el servidor de visual studio para ver en vivo los resultados del tutorial.&lt;/p&gt;

&lt;p&gt;Nos aparecen &lt;strong&gt;códigos de respuestas satisfactorias&lt;/strong&gt; (200), este es porque se ha hecho correctamente la petición a la API de &lt;a href="https://jsonplaceholder.typicode.com/users" rel="noopener noreferrer"&gt;JSONPlaceholder&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Y también nos muestra dos &lt;strong&gt;códigos de redirecciones&lt;/strong&gt; (304), este es porque se están usando los dos archivos que creamos al inicio del tutorial y se almacenan en cache del navegador.&lt;/p&gt;

&lt;p&gt;Los errores (400 - 499) son cuando no se encuentra el recurso de la peticion que se esta realizando, y los errores (500 - 599) suceden cuando el servidor donde se ha alojado el recurso no ha sido encontrado.&lt;/p&gt;

&lt;h3&gt;
  
  
  ...
&lt;/h3&gt;

&lt;p&gt;Ahora sabiendo esto, el siguiente paso es hacer la validacion cuando la respuesta sea satisfactoriamente, pondremos dentro del codigo lo siguiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    if (xhr.status &amp;gt;= 200 &amp;amp;&amp;amp; xhr.status &amp;lt; 300) {
        let req = xhr.responseText;
        console.log(req);
    } else {
        console.log("error");
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Creamos un "if else" donde validamos que la respuesta sea satisfactoria con un operador logico, cuando el &lt;strong&gt;status&lt;/strong&gt; sea mayor o igual a un codigo de respuesta 200 &amp;amp;&amp;amp; &lt;strong&gt;status&lt;/strong&gt; sea menor a un codigo de respuesta menor a 300 (el numero 300 no se toma en cuenta, 299 si). Si esto se cumple, entonces, declaramos una variable llamada "req" donde almacenaremos la respuesta a la peticion.&lt;/p&gt;

&lt;p&gt;La respuesta a la peticion se almacena en la propiedad &lt;strong&gt;responseText&lt;/strong&gt; y tambien en la propiedad &lt;strong&gt;response&lt;/strong&gt;, la diferencia en ambos es que &lt;strong&gt;responseText&lt;/strong&gt; devuelve la respuesta en texto plano, en cambio &lt;strong&gt;response&lt;/strong&gt; devuelve la respuesta en un tipo de dato JavaScript.&lt;/p&gt;

&lt;p&gt;Para acceder a la respuesta de la peticion, llamamos a la propiedad &lt;strong&gt;responseText&lt;/strong&gt; para tenerlo en formato de texto plano, y mandamos a imprimir en consola.&lt;/p&gt;

&lt;p&gt;Si esta condicion no se cumple, entonces imprimimos un error en consola.&lt;/p&gt;

&lt;p&gt;Veamos el resultado de esto:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F63afq4j92uxj0cvk3ir9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F63afq4j92uxj0cvk3ir9.png" alt="cap" width="800" height="557"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ya podemos ver la respuesta en formato de texto plano en consola, pero, en formato de texto plano no nos sirve, debemos convertirlo en formato &lt;strong&gt;JSON&lt;/strong&gt;, para eso lo convertimos de la siguiente manera:&lt;/p&gt;

&lt;p&gt;Agregamos lo siguiente al codigo luego de mandar a imprimir en consola la variable "req":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    let data = JSON.parse(req);
    console.log(data);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Creamos una variable llamada "data" y hacemos uso de &lt;strong&gt;JSON&lt;/strong&gt; para invocar al metodo &lt;strong&gt;parse()&lt;/strong&gt; quedando de la siguiente manera &lt;code&gt;**JSON.parse()**&lt;/code&gt; y dentro de los parentesis ponemos la variable donde almacenamos la respuesta de la peticion. Finalmente mandamos a imprimir en consola la variable "data" donde ya convertimos la respuesta en formato &lt;strong&gt;JSON&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;El código final nos debe quedar así:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const xhr = new XMLHttpRequest;

xhr.addEventListener("readystatechange", e =&amp;gt; {

    if (xhr.readyState !== 4) return;

    if (xhr.status &amp;gt;= 200 &amp;amp;&amp;amp; xhr.status &amp;lt; 300) {
        let req = xhr.responseText;
        let data = JSON.parse(req);
        console.log(data);
    } else {
        console.error("error");
    }

    console.log(xhr);

});


xhr.open("GET", "https://jsonplaceholder.typicode.com/users");

xhr.send();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Y si vemos la consola en el navegador ya podemos ver lo siguiente:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd0rmktd7uh7afyz88o5x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd0rmktd7uh7afyz88o5x.png" alt="cap" width="800" height="521"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ya podemos obtener la respuesta a la petición que hemos hecho a &lt;a href="https://jsonplaceholder.typicode.com/users" rel="noopener noreferrer"&gt;JSONPlaceholder&lt;/a&gt; en formato JSON. &lt;/p&gt;

&lt;p&gt;Con esto hemos finalizado la petición a la API de &lt;a href="https://jsonplaceholder.typicode.com" rel="noopener noreferrer"&gt;JSONPlaceholder&lt;/a&gt;, ya con esto ya solo queda mostrar los datos en el DOM, en una tabla o en tarjetas dinámicas mediante el DOM, pero eso lo veremos en el próximo blog.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Manejo del DOM #5: modificando elementos.</title>
      <dc:creator>Ulises A.F.C</dc:creator>
      <pubDate>Tue, 26 Mar 2024 05:53:12 +0000</pubDate>
      <link>https://forem.com/ulisesafcdev/manejo-del-dom-5-modificando-elementos-37g2</link>
      <guid>https://forem.com/ulisesafcdev/manejo-del-dom-5-modificando-elementos-37g2</guid>
      <description>&lt;p&gt;Desde JavaScript podemos modificar elementos, reemplazando elementos por otros, insertar elementos en diferentes posiciones del DOM por medio del traversing. &lt;/p&gt;

&lt;p&gt;Veremos como hacerlo de la forma antigua y con los nuevos métodos y mejoras que ECMAScript ha implementado con el pasar de los años.&lt;/p&gt;

&lt;p&gt;Para ambas formas usaremos como ejemplo la siguiente estructura HTML:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;section class="cards"&amp;gt;
    &amp;lt;figure class="card"&amp;gt;
        &amp;lt;img src="https://picsum.photos/id/237/200/200" alt="card"&amp;gt;
        &amp;lt;figcaption&amp;gt;Card&amp;lt;/figcaption&amp;gt;
    &amp;lt;/figure&amp;gt;

    &amp;lt;figure class="card"&amp;gt;
        &amp;lt;img src="https://picsum.photos/id/23/200/200" alt="card"&amp;gt;
        &amp;lt;figcaption&amp;gt;Card&amp;lt;/figcaption&amp;gt;
    &amp;lt;/figure&amp;gt;

    &amp;lt;figure class="card"&amp;gt;
        &amp;lt;img src="https://picsum.photos/id/137/200/200" alt="card"&amp;gt;
        &amp;lt;figcaption&amp;gt;Card&amp;lt;/figcaption&amp;gt;
    &amp;lt;/figure&amp;gt;

    &amp;lt;figure class="card"&amp;gt;
        &amp;lt;img src="https://picsum.photos/id/267/200/200" alt="card"&amp;gt;
        &amp;lt;figcaption&amp;gt;Card&amp;lt;/figcaption&amp;gt;
    &amp;lt;/figure&amp;gt;

    &amp;lt;figure class="card"&amp;gt;
        &amp;lt;img src="https://picsum.photos/id/27/200/200" alt="card"&amp;gt;
        &amp;lt;figcaption&amp;gt;Card&amp;lt;/figcaption&amp;gt;
    &amp;lt;/figure&amp;gt;

    &amp;lt;figure class="card"&amp;gt;
        &amp;lt;img src="https://picsum.photos/id/239/200/200" alt="card"&amp;gt;
        &amp;lt;figcaption&amp;gt;Card&amp;lt;/figcaption&amp;gt;
    &amp;lt;/figure&amp;gt;
&amp;lt;/section&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Forma antigua de modificar elementos
&lt;/h2&gt;

&lt;p&gt;En un archivo JavaScript accederemos al contenedor donde se encuentran cada una de las &lt;code&gt;figure&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const $cards = document.querySelector(".cards")

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Crearemos un elemento &lt;code&gt;figure&lt;/code&gt; y le asignaremos un nombre de referencia:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const $newCard = document.createElement("figure")

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;De manera rápida crearemos el contenido del elemento &lt;code&gt;figure&lt;/code&gt; que acabamos de crear:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$newCard.innerHTML = `
    &amp;lt;img src="https://picsum.photos/id/111/200/200" alt="any"&amp;gt;
    &amp;lt;figcaption&amp;gt;Any&amp;lt;/figcaption&amp;gt;
`

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Por ultimo solo agregamos la clase CSS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$newCard.classList.add("card")

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ahora que tenemos el elemento creado empezaremos a ver como podemos modificar e insertar el elemento al DOM.&lt;/p&gt;

&lt;h3&gt;
  
  
  .replaceChild()
&lt;/h3&gt;

&lt;p&gt;Este método reemplaza el elemento por uno nuevo, este recibe dos parámetros, el primero, el elemento que se insertará al DOM, el segundo, el elemento del cual se va a reemplazar por el nuevo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$cards.replaceChild($newCard, $cards.children[1])

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A través del "traversing" podemos buscar el elemento hijo que va a ser reemplazado.&lt;/p&gt;

&lt;h3&gt;
  
  
  .insertBefore()
&lt;/h3&gt;

&lt;p&gt;Este método inserta el elemento antes de un elemento de referencia, este recibe dos parámetros, el primero, el elemento que se insertará al DOM, el segundo, la posición del elemento que tomará como referencia para insertarlo antes de él.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$cards.insertBefore($newCard, $cards.firstElementChild)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En este ejemplo lo estamos insertando al principio de todas las &lt;code&gt;figure&lt;/code&gt;, aunque podemos insertarlo antes de cualquier elemento existente.&lt;/p&gt;

&lt;h3&gt;
  
  
  .removeChild()
&lt;/h3&gt;

&lt;p&gt;Este método nos permite remover un elemento del DOM, si queremos eliminar un elemento del DOM lo podríamos hacer con este método, este recibe un parámetro el cual es el elemento a remover.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$cards.removeChild($cards.lastElementChild)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En este ejemplo estamos removiendo el ultimo elemento.&lt;/p&gt;

&lt;h2&gt;
  
  
  Forma reciente de modificar elementos
&lt;/h2&gt;

&lt;p&gt;Con las nuevas actualizaciones de ECMAScript se han implementado nuevos métodos para poder modificar elementos, a continuación cada uno de los métodos que se pueden utilizar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;.insertAdjacentElement(position, element)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Este método nos permite insertar adyacentemente un elemento al DOM.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;.insertAdjacentHTML(position, html)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Este método nos permite insertar adyacentemente código HTML, es equivalente a &lt;code&gt;.innerHTML&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;.insertAdjacentText(position, text)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Este método nos permite insertar texto adyacentemente, es equivalente a &lt;code&gt;.textContent&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Cada uno de estos métodos reciben dos parámetros, el primero es la posición en la que se insertarán en el DOM, el segundo, puede ser una variable con codigo HTML en el caso de &lt;code&gt;.insertAdjacentHTML()&lt;/code&gt;, puede ser texto en el caso de &lt;code&gt;.insertAdjacentText()&lt;/code&gt;, o puede ser el elemento que se insertará en el caso de &lt;code&gt;.insertAdjacentElement&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Como primer parámetro recibe la posición en la que se insertará el elemento, código o texto hacia al DOM, para eso existen de forma establecida por JavaScript lo siguiente:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;beforebegin "hermano anterior"&lt;/li&gt;
&lt;li&gt;afterend "hermano siguiente"&lt;/li&gt;
&lt;li&gt;afterbegin "primer hijo"&lt;/li&gt;
&lt;li&gt;beforeend "ultimo hijo"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Veamos un ejemplo para poder comprender mejor:&lt;/p&gt;

&lt;p&gt;Accederemos al contenedor de cada una de las &lt;code&gt;figure&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const $cards = document.querySelector(".cards")

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Crearemos un elemento &lt;code&gt;figure&lt;/code&gt; con un nombre de referencia:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const $newCard = document.createElement("figure")

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ahora empezaremos a implementar cada uno de los método y posiciones, primero, en una variable definiremos código HTML que será el contenido del elemento &lt;code&gt;figure&lt;/code&gt; que acabamos de crear:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let contentHTML = `
    &amp;lt;img src="https://picsum.photos/id/111/200/200" alt="any"&amp;gt;
    &amp;lt;figcaption&amp;gt;&amp;lt;/figcaption&amp;gt;
`

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  .insertAdjacentHTML()
&lt;/h3&gt;

&lt;p&gt;A continuación, insertaremos este código al elemento &lt;code&gt;figure&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$newCard.insertAdjacentHTML("afterbegin", contentHTML)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Como primer parámetro utilizamos &lt;code&gt;afterbegin&lt;/code&gt; para definirlo como "primer hijo", y el segundo parámetro es el código HTML que se insertará.&lt;/p&gt;

&lt;p&gt;Una vez teniendo la estructura del elemento &lt;code&gt;figure&lt;/code&gt;, insertaremos texto a la etiqueta &lt;code&gt;figcaption&lt;/code&gt; ya que la hemos dejado vacía:&lt;/p&gt;

&lt;h3&gt;
  
  
  .insertAdjacentText()
&lt;/h3&gt;

&lt;p&gt;Insertaremos el texto de la siguiente manera:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$newCard.querySelector("figcaption").insertAdjacentText("afterbegin", "Any")

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Con el método &lt;code&gt;.querySelector()&lt;/code&gt; accedemos a la etiqueta &lt;code&gt;figcaption&lt;/code&gt; para poder definir el texto con el metodo &lt;code&gt;.insertAdjacentText()&lt;/code&gt;, como primer parametro elegimos la posición "afterbegin" (primer hijo), y como segundo parámetro definimos el texto a insertar.&lt;/p&gt;

&lt;p&gt;Ahora que ya tenemos formado nuestro elemento &lt;code&gt;figure&lt;/code&gt; insertaremos el elemento al DOM:&lt;/p&gt;

&lt;h3&gt;
  
  
  .insertAdjacentElement()
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$cards.insertAdjacentElement("afterbegin", $newCard)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Utilizamos "afterbegin" para insertarlo al inicio, pero fácilmente podemos insertarlo en "x" posición o como hermano anterior o hermano siguiente del contenedor.&lt;/p&gt;

&lt;p&gt;Con esto ya tenemos insertado el elemento &lt;code&gt;figure&lt;/code&gt; en el DOM. Ambas formas funcionan, nos permiten tener opciones de como modificar e insertar elementos al DOM.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>Manejo del DOM #4: traversing, creando elementos, fragmentos y templates.</title>
      <dc:creator>Ulises A.F.C</dc:creator>
      <pubDate>Thu, 14 Mar 2024 04:45:19 +0000</pubDate>
      <link>https://forem.com/ulisesafcdev/introduccion-al-dom-4-traversing-creando-elementos-fragmentos-y-templates-8l3</link>
      <guid>https://forem.com/ulisesafcdev/introduccion-al-dom-4-traversing-creando-elementos-fragmentos-y-templates-8l3</guid>
      <description>&lt;h2&gt;
  
  
  DOM Traversing
&lt;/h2&gt;

&lt;p&gt;Recorrido del DOM, desde JavaScript podemos recorrer elementos HTML tomando como referencia un nodo en especifico. Podemos acceder a los "hijos" de un elemento "padre", podemos acceder al elemento "padre", saber cuantos elementos "hijos" tiene un elemento en concreto, acceder al primer y ultimo elemento, acceder a elementos hermanos, siempre y cuando tomemos de referencia un nodo para poder recorrer el DOM.&lt;/p&gt;

&lt;p&gt;Tomaremos de ejemplo el siguiente código HTML:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;main&amp;gt;

    &amp;lt;article&amp;gt;
        &amp;lt;input type="search" name="buscar" id="txtsearch"&amp;gt;
        &amp;lt;a class="linkuser" href="index.html" data-link="inicio de pagina" data-name="enlace home"&amp;gt;Ir a&amp;lt;/a&amp;gt;
    &amp;lt;/article&amp;gt;

    &amp;lt;section class="cards"&amp;gt;
        &amp;lt;figure class="card"&amp;gt;
            &amp;lt;img src="https://picsum.photos/id/237/200/200" alt="card"&amp;gt;
            &amp;lt;figcaption&amp;gt;Card&amp;lt;/figcaption&amp;gt;
        &amp;lt;/figure&amp;gt;

        &amp;lt;figure class="card"&amp;gt;
            &amp;lt;img src="https://picsum.photos/id/23/200/200" alt="card"&amp;gt;
            &amp;lt;figcaption&amp;gt;Card&amp;lt;/figcaption&amp;gt;
        &amp;lt;/figure&amp;gt;

        &amp;lt;figure class="card"&amp;gt;
            &amp;lt;img src="https://picsum.photos/id/137/200/200" alt="card"&amp;gt;
            &amp;lt;figcaption&amp;gt;Card&amp;lt;/figcaption&amp;gt;
        &amp;lt;/figure&amp;gt;

        &amp;lt;figure class="card"&amp;gt;
            &amp;lt;img src="https://picsum.photos/id/267/200/200" alt="card"&amp;gt;
            &amp;lt;figcaption&amp;gt;Card&amp;lt;/figcaption&amp;gt;
        &amp;lt;/figure&amp;gt;

        &amp;lt;figure class="card"&amp;gt;
            &amp;lt;img src="https://picsum.photos/id/27/200/200" alt="card"&amp;gt;
            &amp;lt;figcaption&amp;gt;Card&amp;lt;/figcaption&amp;gt;
        &amp;lt;/figure&amp;gt;

        &amp;lt;figure class="card"&amp;gt;
            &amp;lt;img src="https://picsum.photos/id/239/200/200" alt="card"&amp;gt;
            &amp;lt;figcaption&amp;gt;Card&amp;lt;/figcaption&amp;gt;
        &amp;lt;/figure&amp;gt;
    &amp;lt;/section&amp;gt;

    &amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;

&amp;lt;/main&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En un archivo &lt;code&gt;.js&lt;/code&gt; accederemos a un elemento en concreto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const $cards = document.querySelector(".cards")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Veamos cada uno de las propiedades para recorrer elementos:&lt;/p&gt;

&lt;h3&gt;
  
  
  .childElementCount
&lt;/h3&gt;

&lt;p&gt;Nos devuelve la cantidad de elementos "hijos" del elemento de referencia.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;console.log($cards.childElementCount)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  .childNodes
&lt;/h3&gt;

&lt;p&gt;Nos devuelve la cantidad de nodos secundarios de un elemento, esta propiedad toma en cuenta los nodos del documento HTML, esto incluye los saltos de línea o espacios en blanco.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;console.log($cards.childNodes)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  .children[]
&lt;/h3&gt;

&lt;p&gt;Nos devuelve el elemento "hijo" especificando la posición en la que se encuentra, si hay 5 elementos y queremos acceder al elemento "3" especificamos la posición numero #3.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;console.log($cards.children[3])
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  .firstElementChild
&lt;/h3&gt;

&lt;p&gt;Nos devuelve el primer elemento "hijo" del elemento de referencia.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;console.log($cards.firstElementChild)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  .lastElementChild
&lt;/h3&gt;

&lt;p&gt;Nos devuelve el ultimo elemento "hijo" del elemento de referencia.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;console.log($cards.lastElementChild)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  .parentElement
&lt;/h3&gt;

&lt;p&gt;Nos devuelve el elemento "padre" del elemento de referencia:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;console.log($cards.parentElement)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  .previousElementSibling
&lt;/h3&gt;

&lt;p&gt;Nos devuelve el elemento "hermano anterior" del elemento de referencia:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;console.log($cards.previousElementSibling)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  .nextElementSibling
&lt;/h3&gt;

&lt;p&gt;Nos devuelve el elemento "hermano siguiente" del elemento de referencia:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;console.log($cards.nextElementSibling)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;De esta manera podemos recorrer elementos del DOM tomando de referencia un elemento en concreto, esto nos permite tener acceso a elementos en específicos para tomarles de referencia y en base a eso insertar elementos adicionales al DOM.&lt;/p&gt;

&lt;h2&gt;
  
  
  Creando elementos HTML desde JavaScript
&lt;/h2&gt;

&lt;p&gt;Desde JavaScript podemos crear elementos HTML e insertarlos en el documento, hay diferentes formas de hacerlo y veremos cada una de ellas.&lt;/p&gt;

&lt;p&gt;Seguiremos tomando de ejemplo el código HTML del ejemplo anterior y crearemos una nueva &lt;code&gt;card&lt;/code&gt; para insertarla junto a las demás.&lt;/p&gt;

&lt;h3&gt;
  
  
  Primer forma:
&lt;/h3&gt;

&lt;p&gt;Seleccionamos el contenedor de donde se encuentran las &lt;code&gt;card&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const $cards = document.querySelector(".cards")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para empezar debemos tomar en cuenta que las &lt;code&gt;card&lt;/code&gt; que hemos creado incluye una etiqueta &lt;code&gt;img&lt;/code&gt; las cuales como atributo indica una dirección URL de una imagen y un nombre alternativo, iniciaremos creando una constante para la dirección URL de la imagen y para el nombre alternativo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/* ATRIBUTOS IMG */
const SRC = "https://picsum.photos/id/199/200/200"
const ALT = "Card New"

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Iniciemos a crear elementos HTML:&lt;/p&gt;

&lt;h4&gt;
  
  
  .createElement()
&lt;/h4&gt;

&lt;p&gt;Con este metodo podemos crear elementos HTML, toda aquella etiqueta de apertura y cierre HTML. Con ello crearemos la etiqueta &lt;code&gt;figure&lt;/code&gt;, la etiqueta &lt;code&gt;img&lt;/code&gt; y la etiqueta &lt;code&gt;figcaption&lt;/code&gt; para completar una &lt;code&gt;card&lt;/code&gt; adicional al documento:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// creando elementos
const $figure = document.createElement("figure")
const $img = document.createElement("img")
const $figcaption = document.createElement("figcaption")

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  .createTextNode()
&lt;/h4&gt;

&lt;p&gt;Este método nos permite crear texto en forma que el navegador lo interprete como un nodo de tipo texto. Con este método crearemos el texto que ira dentro de la etiqueta &lt;code&gt;figcaption&lt;/code&gt; con el texto de &lt;code&gt;CARD NEW&lt;/code&gt; indicando que es la nueva &lt;code&gt;card&lt;/code&gt; que estamos creando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// creando nodo de texto
const $figcaptionText = document.createTextNode("CARD NEW")

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ya tenemos las partes de la &lt;code&gt;card&lt;/code&gt; creadas, solo nos falta unirlas y complementarlas, iniciaremos con la etiqueta &lt;code&gt;img&lt;/code&gt; definiendo sus atributos con las constantes que habíamos creado anteriormente, recordemos que para asignar atributos se utiliza &lt;code&gt;.setAttribute()&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// definiendo atributos a IMG
$img.setAttribute("src", SRC)
$img.setAttribute("alt", ALT)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  .appendChild()
&lt;/h4&gt;

&lt;p&gt;Con este método podemos asignarle un elemento hijo a un elemento padre, en este caso empezaremos a asignarle el nodo de tipo texto como hijo al elemento &lt;code&gt;figcaption&lt;/code&gt;, que vendría siendo el elemento padre:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// insertando nodo de texto a elemento FIGCAPTION
$figcaption.appendChild($figcaptionText)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Haremos lo mismo con la etiqueta &lt;code&gt;img&lt;/code&gt; para asignársela como elemento hijo al elemento &lt;code&gt;figure&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// insertando elemento IMG a elemento FIGURE
$figure.appendChild($img)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Y también con la etiqueta &lt;code&gt;figcaption&lt;/code&gt; para asignarsela como elemento hijo al elemento &lt;code&gt;figure&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// insertando elemento FIGCAPTION a elemento FIGURE
$figure.appendChild($figcaption)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ya tenemos armada la &lt;code&gt;card&lt;/code&gt; con sus elementos hijos, solo nos falta insertarla como elemento hijo al elemento padre que es donde se encuentran todas nuestras &lt;code&gt;card&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// insertando elemento FIGURE a contenedor .cards
$cards.appendChild($figure)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hasta acá ya tenemos nuestra &lt;code&gt;card&lt;/code&gt; creada e insertada en el documento HTML donde corresponde, pero falta una cosa, y es asignarle la clase CSS para que tome el mismo estilo que las demás &lt;code&gt;card&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// definiendo clase CSS a elemento FIGURE
$figure.classList.add("card")

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esta es la forma en la que podemos crear elementos, los métodos &lt;code&gt;.createElement()&lt;/code&gt; &amp;amp; &lt;code&gt;.appendChild()&lt;/code&gt; nos dan accesibilidad a crear elementos y armarlos por partes. Existen otros métodos como el siguiente que veremos a continuación:&lt;/p&gt;

&lt;h3&gt;
  
  
  Segunda forma:
&lt;/h3&gt;

&lt;p&gt;Continuaremos con otra forma de crear elementos desde JavaScript, crearemos otra &lt;code&gt;card&lt;/code&gt; pero de una forma diferente.&lt;/p&gt;

&lt;p&gt;Crearemos un nuevo elemento:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const $figureDos = document.createElement("figure")

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Una vez creado nuestro elemento &lt;code&gt;figure&lt;/code&gt; podemos empezar a armar nuestra &lt;code&gt;card&lt;/code&gt; con lo siguiente:&lt;/p&gt;

&lt;h4&gt;
  
  
  .innerHTML
&lt;/h4&gt;

&lt;p&gt;Esta propiedad nos permite definir código HTML dentro de JavaScript, veamos como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$figureDos.innerHTML = `
    &amp;lt;img src="${SRC}" alt="${ALT}"&amp;gt;
    &amp;lt;figcaption&amp;gt;CARD NEW&amp;lt;/figcaption&amp;gt;`

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Con ayuda de &lt;code&gt;template string&lt;/code&gt; que vienen siendo un tipo de comilla para incrustar variables, con la ayuda de ello podemos definir los valores de &lt;code&gt;src&lt;/code&gt; y &lt;code&gt;alt&lt;/code&gt; con las constantes que habíamos creado anteriormente, si puedes observar es código HTML, esto nos permite insertar código HTML en el elemento que creamos.&lt;/p&gt;

&lt;p&gt;Como paso siguiente es agregarle la clase CSS al elemento &lt;code&gt;figure&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$figureDos.classList.add("card")

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Por ultimo, nos queda insertarlo en el documento HTML, lo incrustaremos en el contenedor de donde se encuentran todas nuestras &lt;code&gt;card&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$cards.appendChild($figureDos)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Y ya podemos ver los resultados en el navegador, esta es una manera rápida de hacerlo, es válido hacerlo si solamente es algo pequeño de incrustar HTML en el documento desde JavaScript.&lt;/p&gt;

&lt;p&gt;A continuación, veremos otras dos formas de crear elementos desde JavaScript pero de forma dinámica, es decir, si queremos crear varios elementos a partir de mucha información, desde un objeto o un arreglo, veamos los siguiente ejemplos:&lt;/p&gt;

&lt;h4&gt;
  
  
  Tercera forma
&lt;/h4&gt;

&lt;p&gt;En el documento HTML crearemos un &lt;code&gt;div&lt;/code&gt; con un &lt;code&gt;id&lt;/code&gt; llamado "meses" :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;div id="meses"&amp;gt;&amp;lt;/div&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Seleccionamos ese &lt;code&gt;div&lt;/code&gt; desde JavaScript:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const $divmeses = document.getElementById("meses")

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Crearemos un &lt;code&gt;array&lt;/code&gt; con los meses del año para posteriormente crear una lista de ellos e insertarlos en el documento HTML:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const meses = ["enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"]

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vamos a crear una lista &lt;code&gt;ul&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const $ul = document.createElement("ul")

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El siguiente paso es recorrer el &lt;code&gt;array&lt;/code&gt; de datos con los meses del año, luego nos apoyaremos de la propiedad &lt;code&gt;.innerHTML&lt;/code&gt; para crear los items de la lista dinámicamente a cada elemento del &lt;code&gt;array&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;meses.forEach(el =&amp;gt; {
    $ul.innerHTML += `&amp;lt;li&amp;gt;${el}&amp;lt;/li&amp;gt;`
})

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Por cada elemento recorrido iremos agregando un &lt;code&gt;li&lt;/code&gt; (list item) dentro de nuestra lista &lt;code&gt;ul&lt;/code&gt;, para ello asignamos con &lt;code&gt;+=&lt;/code&gt; para que vaya agregando un elemento tras otro.&lt;/p&gt;

&lt;p&gt;Solo nos queda insertar en el documento HTML la lista que hemos creado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$divmeses.appendChild($ul)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esta es la tercera forma de crear elementos pero de una forma dinámica en base a varios elementos en común a partir de cierta información, en este caso fue un &lt;code&gt;array&lt;/code&gt; de los meses del año.&lt;/p&gt;

&lt;h4&gt;
  
  
  Cuarta forma
&lt;/h4&gt;

&lt;p&gt;Continuaremos con la siguiente forma de crear elementos de una forma dinámica, pero a traves de un &lt;code&gt;fragmento&lt;/code&gt;, empezaremos creando un &lt;code&gt;div&lt;/code&gt; en el documento HTML para después insertar los elementos dentro:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;div id="estaciones"&amp;gt;&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Luego crearemos un &lt;code&gt;array&lt;/code&gt; con las estaciones del año:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const estaciones = ["verano", "invierno", "primavera", "otoño"]

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ahora crearemos un &lt;code&gt;fragment&lt;/code&gt; con &lt;strong&gt;.createDocumentFragment()&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const $fragment = document.createDocumentFragment()

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este fragmento nos permite adicionar elementos dentro de él, para posteriormente insertarlos al DOM. Se muestran en el DOM hasta que son insertados.&lt;/p&gt;

&lt;p&gt;Crearemos una lista:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const $ulEst = document.createElement("ul")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ahora viene lo interesante del uso de &lt;code&gt;fragment&lt;/code&gt;, recorreremos el &lt;code&gt;array&lt;/code&gt; para crear un &lt;code&gt;li&lt;/code&gt; por cada elemento recorrido:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;estaciones.forEach(el =&amp;gt; {
    const $li = document.createElement("li")
    $li.textContent = el
    $fragment.appendChild($li)
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Por cada elemento, creamos un elemento &lt;code&gt;li&lt;/code&gt; y dentro de el por medio de &lt;code&gt;.textContent&lt;/code&gt; le asignamos el valor de cada elemento recorrido, por último, al &lt;code&gt;fragment&lt;/code&gt; le vamos adicionando cada &lt;code&gt;li&lt;/code&gt; que se crea por cada vuelta del bucle.&lt;/p&gt;

&lt;p&gt;Ahora dentro del &lt;code&gt;fragment&lt;/code&gt; se encuentra cada &lt;code&gt;li&lt;/code&gt; con cada estación del año, ahora agregaremos este fragmento dentro de la lista:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ulEst.appendChild($fragment)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ahora ya tenemos la lista creada, solo falta insertarlo al &lt;code&gt;div&lt;/code&gt; donde lo queremos mostrar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$divestaciones.appendChild($ulEst)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Y ya podemos ver el resultado en la página, esta es otra manera de crear elementos de forma dinámica utilizando fragmentos, los fragmentos nos permiten adicionar elementos sin que se muestren en el DOM, solamente se muestran o están preparados para mostrarse hasta que se asigna como hijos. Es una forma correcta de hacerlo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Template HTML y elementos dinámicos
&lt;/h2&gt;

&lt;p&gt;Los "template" HTML se crean con la etiqueta &lt;code&gt;&amp;lt;template&amp;gt;&amp;lt;/template&amp;gt;&lt;/code&gt;, este es un mecanismo para contener fragmentos HTML que pueden usarse a través de JavaScript o mantenerse oculto en el DOM.&lt;/p&gt;

&lt;p&gt;Ya que hemos visto los "fragmentos" ahora veremos como usarlos también implementando los "template" HTML, veamos un ejemplo sencillo generando "cards" dinámicamente a través de un objeto.&lt;/p&gt;

&lt;p&gt;Empezaremos creando un &lt;code&gt;template&lt;/code&gt; en el documento HTML y a darle forma de una "card", esta será nuestra plantilla de como queremos mostrar las "card" que crearemos dinámicamente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;template id="template-card"&amp;gt;
    &amp;lt;figure class="card"&amp;gt;
        &amp;lt;img&amp;gt;
        &amp;lt;figcaption&amp;gt;&amp;lt;/figcaption&amp;gt;
    &amp;lt;/figure&amp;gt;
&amp;lt;/template&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Al "template" le pondremos un selector de identificador con el nombre de "template-card" para poder acceder a su contenido desde JavaScript. Dentro tenemos la estructura de una "card" con la clase "card" en donde se le aplicarían los estilos CSS, dentro tenemos la etiqueta "img" y la etiqueta "figcaption".&lt;/p&gt;

&lt;p&gt;A través de JavaScript crearemos un &lt;code&gt;array&lt;/code&gt; objetos, donde cada objeto tendrá dos propiedades con una dirección URL de diferentes imágenes y un titulo para el "figcaption":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const data = [
    {
        src: "https://picsum.photos/id/31/200/200",
        title: "ID31"
    },
    {
        src: "https://picsum.photos/id/32/200/200",
        title: "ID32"
    },
    {
        src: "https://picsum.photos/id/33/200/200",
        title: "ID33"
    },
    {
        src: "https://picsum.photos/id/34/200/200",
        title: "ID34"
    },
    {
        src: "https://picsum.photos/id/35/200/200",
        title: "ID35"
    }
]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este es el array de objetos llamado "data", con la propiedad llamada "src" con una direccion URL de una imagen la cual le asignaremos como atributo a la etiqueta "img" del "template" que hemos creado, asi mismo para el "figcaption" donde le insertaremos el texto de la propiedad "title" del array de objetos.&lt;/p&gt;

&lt;p&gt;Continuaremos seleccionando el contenedor de todas las "card" para luego insertar las demás "card" que iremos creando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const $cards = document.querySelector(".cards")

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tambien accederemos al "template" de la siguiente manera:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const $templateCard = document.getElementById("template-card").content

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Accedemos al "template" pero añadimos &lt;code&gt;.content&lt;/code&gt; para poder acceder a los elementos dentro del "template".&lt;/p&gt;

&lt;p&gt;Por ultimo nos falta crear un "fragmento":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const $fragment = document.createDocumentFragment()

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ahora veamos como podemos hacer uso del "fragmento" y del "template" para crear "cards" dinámicas, según este ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;data.forEach(el =&amp;gt; {
    $templateCard.querySelector("img").setAttribute("src", el.src)
    $templateCard.querySelector("figcaption").textContent = el.title

    let clone = document.importNode($templateCard, true)
    $fragment.appendChild(clone)
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Primero, recorreremos el "array" con el método &lt;code&gt;foreach&lt;/code&gt;, luego, por cada elemento que este recorra accederemos al elemento "img" y le asignaremos como atributo la propiedad "src" del array de objetos, así mismo accederemos al elemento "figcaption" para incrustarle el texto de la propiedad "title" del array de objetos.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Dentro del "template" tenemos los elementos "img" y "figcaption" totalmente vacíos, al obtener el "template" desde JavaScript junto con la propiedad &lt;code&gt;.content&lt;/code&gt;, este nos permite mapear lo que hay dentro de las etiquetas "template" con ayuda de un &lt;code&gt;.querySelector()&lt;/code&gt;. Por medio de eso podemos asignarle los atributos e incrustar el texto a los elementos desde las propiedades del "array de objetos" que creamos.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Una vez hecho esto ahora viene lo interesante, a partir de lo que tenemos hasta el momento, debemos crear "clones", es decir, el "template" nos sirve como plantilla de lo que queremos crear y mostrar, es por eso que por cada vuelta del bucle &lt;code&gt;foreach&lt;/code&gt; vamos a crear "x" cantidad de lo mismo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    let clone = document.importNode($templateCard, true)
    $fragment.appendChild(clone)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Por ello definimos una variable llamada "clone" y lo creamos con el método &lt;code&gt;.importNode()&lt;/code&gt;, este recibe 2 parámetros, el primero es de donde sacaremos los clones, el segundo es un valor &lt;code&gt;boolean&lt;/code&gt;, especificamos a &lt;code&gt;true&lt;/code&gt; para indicarle que queremos clonar toda la estructura según como lo hemos indicado, con todo sus elementos, atributos, textos, etc.&lt;/p&gt;

&lt;p&gt;Luego de eso, al "fragmento" le añadimos como hijos todos los "clones" que acabamos de definir. Se lo añadimos al "fragmento" ya que no queremos mostrarlos al DOM todavía.&lt;/p&gt;

&lt;p&gt;Por ultimo, al salir del bucle ya podemos insertar los elementos creados que se encuentran en el "fragmento" listos para mostrarse en el DOM:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$cards.appendChild($fragment)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Añadimos el "fragmento" dentro del contenedor donde se mostraran cada "card" creada.&lt;/p&gt;

&lt;p&gt;Y con esto ya podemos ver el resultado, los "template" nos permiten definir plantillas, y dinámicamente podemos definir datos desde JavaScript para poder insertar elementos al DOM, todo esto con ayuda de "fragmentos", este fue un ejemplo sencillo donde podemos simular un arreglo de datos, así como lo es una petición a una API.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>Manejo del DOM #3: Estilos y clases CSS, texto y HTML</title>
      <dc:creator>Ulises A.F.C</dc:creator>
      <pubDate>Mon, 19 Feb 2024 04:58:51 +0000</pubDate>
      <link>https://forem.com/ulisesafcdev/introduccion-al-dom-3-estilos-y-clases-css-texto-y-html-45co</link>
      <guid>https://forem.com/ulisesafcdev/introduccion-al-dom-3-estilos-y-clases-css-texto-y-html-45co</guid>
      <description>&lt;h2&gt;
  
  
  Atributo &lt;code&gt;style&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Desde JavaScript podemos acceder a estilos CSS en etiquetas HTML, también podemos definir estilos CSS y redefinir su valor a estilos CSS. Veamos un ejemplo a continuación:&lt;/p&gt;

&lt;p&gt;Tomaremos de ejemplo la siguiente etiqueta HTML:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;a href="index.html" class="link-home" data-name="enlaceHome" style="background-color: lightpink;"&amp;gt;Ir a inicio&amp;lt;/a&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Es un enlace que contiene como atributo &lt;code&gt;style&lt;/code&gt;, ósea, contiene estilos CSS en línea.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;No es recomendable usar estilos en línea, esto es solamente de ejemplo de como se implementan los estilos desde JavaScript.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Para acceder a los estilos desde JavaScript se hace con la notación del punto con la propiedad &lt;code&gt;.style&lt;/code&gt;, veamos un ejemplo:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// accedemos al enlace
const $linkhome = document.querySelector(".link-home")

// para acceder a los estilos se hace con la notacion del punto
console.log($linkhome.style)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Al mostrar por consola el resultado, nos devuelve un objeto llamado &lt;code&gt;CSSStyleDeclaration&lt;/code&gt; este es un objeto con todas las propiedades con respecto a los estilos CSS, veamos la imagen:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsu3r6sb4y47joe0qmkp1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsu3r6sb4y47joe0qmkp1.png" alt="CSSStyleDeclaration"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Observemos, primero nos muestra enumeradas las propiedades que son afectadas por el elemento HTML y las que hemos definido en su atributo &lt;code&gt;style&lt;/code&gt;. Además nos muestra todas las propiedades CSS que podemos acceder, pero, la mayoría no tienen un valor, solamente tienen valor las propiedades que han sido definidas en el atributo &lt;code&gt;style&lt;/code&gt; y las que tienen mayor relevancia al elemento HTML.&lt;/p&gt;

&lt;p&gt;Veamos la imagen:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feo02i9t8on3me9sswefm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feo02i9t8on3me9sswefm.png" alt="CSSStyleDeclaration"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Con la notación del punto podemos acceder al valor de una propiedad en especifico, veamos un ejemplo:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// podemos acceder a una propiedad en especifico
console.log($linkhome.style.backgroundColor)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Este nos devolverá su valor establecido por el elemento HTML o establecido en su atributo &lt;code&gt;style&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Con la notación del punto accedemos a los estilos de un elemento siempre y cuando estén definidos en su atributo &lt;code&gt;style&lt;/code&gt;, de igual manera al definir valor a estilos CSS con la notación del punto, estos se añaden al atributo &lt;code&gt;style&lt;/code&gt; del elemento HTML.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  .getComputedStyle()
&lt;/h2&gt;

&lt;p&gt;Es un método que nos devuelve un objeto en forma de mapa con todas las propiedades CSS de un elemento con estilos previamente definidos. Tomaremos de ejemplo el enlace anterior a los ejemplos previos.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;console.log(getComputedStyle($linkhome))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Al método &lt;code&gt;.getComputedStyle()&lt;/code&gt; se le pasa como parámetro el elemento que queramos analizar sus estilos CSS. Este nos devolverá todo un mapeo de propiedades CSS que han sido definidos al elemento en cuestión.&lt;/p&gt;

&lt;p&gt;Si queremos acceder a una propiedad en especifico con este método, se usa otro método llamado:&lt;/p&gt;

&lt;h2&gt;
  
  
  .getPropertyValue()
&lt;/h2&gt;

&lt;p&gt;Este método nos devuelve el valor de una propiedad CSS que ha sido definida a un elemento, veamos como podemos usarla:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;console.log(getComputedStyle($linkhome).getPropertyValue("background-color"))

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Así obtendremos el valor de cualquier propiedad CSS, siempre y cuando esta propiedad tenga valor y haya sido definida previamente al elemento en cuestión.&lt;/p&gt;

&lt;h2&gt;
  
  
  .setProperty()
&lt;/h2&gt;

&lt;p&gt;Este método nos permite definir estilos CSS a elementos HTML desde JavaScript, estos estilos se terminan de asignar como &lt;code&gt;estilos en línea&lt;/code&gt; en su atributo &lt;code&gt;style&lt;/code&gt; del elemento.&lt;/p&gt;

&lt;p&gt;No es recomendable hacerlo, ya que estos estilos se terminan quedando en el atributo &lt;code&gt;style&lt;/code&gt; del elemento, lo cual afecta al SEO de la página, se usa solamente en casos especiales, aunque no se recomienda hacerlo.&lt;/p&gt;

&lt;p&gt;Veamos un ejemplo de como se pueden asignar estilos a propiedades CSS con este método:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$linkhome.style.setProperty("text-decoration", "none")
$linkhome.style.setProperty("display", "inline-block")
$linkhome.style.setProperty("padding", "8px 16px 8px 16px")
$linkhome.style.setProperty("border-radius", "5px")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Clases CSS desde JavaScript
&lt;/h2&gt;

&lt;p&gt;Desde JavaScript podemos asignar clases CSS a elementos HTML, así como podemos asignar elementos también podemos removerlos.&lt;/p&gt;

&lt;p&gt;Veamos un ejemplo, tomaremos de ejemplo el siguiente código HTML:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;section class="cards"&amp;gt;
    &amp;lt;figure class="card"&amp;gt;
        &amp;lt;img src="https://picsum.photos/id/237/200/200" alt="card"&amp;gt;
        &amp;lt;figcaption&amp;gt;Card&amp;lt;/figcaption&amp;gt;
    &amp;lt;/figure&amp;gt;

    &amp;lt;figure class="card"&amp;gt;
        &amp;lt;img src="https://picsum.photos/id/23/200/200" alt="card"&amp;gt;
        &amp;lt;figcaption&amp;gt;Card&amp;lt;/figcaption&amp;gt;
    &amp;lt;/figure&amp;gt;

    &amp;lt;figure class="card"&amp;gt;
        &amp;lt;img src="https://picsum.photos/id/137/200/200" alt="card"&amp;gt;
        &amp;lt;figcaption&amp;gt;Card&amp;lt;/figcaption&amp;gt;
    &amp;lt;/figure&amp;gt;

    &amp;lt;figure class="card"&amp;gt;
        &amp;lt;img src="https://picsum.photos/id/267/200/200" alt="card"&amp;gt;
        &amp;lt;figcaption&amp;gt;Card&amp;lt;/figcaption&amp;gt;
    &amp;lt;/figure&amp;gt;

    &amp;lt;figure class="card"&amp;gt;
        &amp;lt;img src="https://picsum.photos/id/27/200/200" alt="card"&amp;gt;
        &amp;lt;figcaption&amp;gt;Card&amp;lt;/figcaption&amp;gt;
    &amp;lt;/figure&amp;gt;

    &amp;lt;figure class="card"&amp;gt;
        &amp;lt;img src="https://picsum.photos/id/239/200/200" alt="card"&amp;gt;
        &amp;lt;figcaption&amp;gt;Card&amp;lt;/figcaption&amp;gt;
    &amp;lt;/figure&amp;gt;
&amp;lt;/section&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Tenemos un contenedor con elementos &lt;code&gt;figure&lt;/code&gt; con una imagen y una descripción, agreguemos un poco de estilos:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.card {
    display: inline-block;
    background-color: darkslateblue;
    color: lightcyan;
}

.card figcaption {
    padding: .5rem 1rem;
    text-align: center;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;El resultado es el siguiente:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq9h87r9wo2lg6ikfw0dz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq9h87r9wo2lg6ikfw0dz.png" alt="figure card"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hasta este punto tenemos las clases CSS llamadas &lt;code&gt;.card&lt;/code&gt;. Para poder asignar clases CSS a elementos HTML desde JavaScript debemos tenerlas ya definidas, crearemos las siguientes clases CSS y las asignaremos al elemento HTML desde JavaScript:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.rotate-45 {
    transform: rotate(45deg);
}

.rotate-145 {
    transform: rotate(145deg);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Una vez tengamos las clases CSS definidas podemos asignarlas a elementos HTML desde JavaScript, veamos como podemos hacerlo:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// accedemos al primer elemento ".card"
$card = document.querySelector(".card")

// asignando una clase css a elementos
$card.classList.add("rotate-45")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Con la notación del punto accedemos a su listado de clases del elemento e invocamos al método &lt;code&gt;add()&lt;/code&gt;, este método recibe como parámetro el nombre de la clase a asignar.&lt;/p&gt;

&lt;p&gt;Una vez asignado se verá el resultado:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbr0zhmq7wzpp5i6o4bqe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbr0zhmq7wzpp5i6o4bqe.png" alt="figure card add class css"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Podemos notar que se le ha asignado la clase al primer elemento, es por ello que vemos el elemento inclinado.&lt;/p&gt;

&lt;p&gt;También podemos remover clases CSS a elementos que ya tengan asignado una clase, veamos como:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// quitando una clase css a elementos
$card.classList.remove("rotate-45") 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Con el método &lt;code&gt;.remove()&lt;/code&gt; quitamos la clase al elemento, este recibe como parámetro el nombre de la clase que queremos remover.&lt;/p&gt;

&lt;p&gt;También existe otro método llamado &lt;code&gt;.toggle()&lt;/code&gt; que recibe como parámetro el nombre de la clase CSS, este método asigna una clase CSS si no ha sido asignado previamente, si ya estaba asignada la clase CSS la removerá del elemento.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$card.classList.toggle("rotate-45")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h2&gt;
  
  
  Texto en HTML desde JavaScript
&lt;/h2&gt;

&lt;p&gt;Para poder introducir texto en algún elemento HTML desde JavaScript podemos usar 3 maneras de hacerlo, veamos como:&lt;/p&gt;

&lt;p&gt;Pongamos de ejemplo este código HTML:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;main&amp;gt;
    &amp;lt;article&amp;gt;
        &amp;lt;p id="texto"&amp;gt;
            Lorem ipsum dolor sit amet consectetur adipisicing elit. Vel fuga eius fugit, accusantium distinctio quos voluptas tempora voluptatibus similique omnis tempore quam, iste sed ad beatae dolores reiciendis laudantium soluta!
        &amp;lt;/p&amp;gt;
    &amp;lt;/article&amp;gt;
&amp;lt;/main&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Ahora obtengamos estos elementos desde JavaScript y creamos una variable con un parrafo:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let $texto = document.getElementById("texto")

let parrafo = `
    &amp;lt;p&amp;gt;Este es un ejemplo de como &amp;lt;strong&amp;gt;definir texto&amp;lt;/strong&amp;gt; a elemento HTML desde JavaScript&amp;lt;/p&amp;gt;
    &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;
    &amp;lt;p&amp;gt;&amp;lt;i&amp;gt;Primer ejemplo&amp;lt;/i&amp;gt;&amp;lt;/p&amp;gt;
`

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Para introducir texto podemos usar la notación del punto utilizando &lt;code&gt;.textContent&lt;/code&gt;:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// con textContent, este nos renderiza el texto en una cadena de texto normal
$texto.textContent = parrafo

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Veamos el resultado:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvvamtrk6trm36506tz27.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvvamtrk6trm36506tz27.png" alt="Result textContent"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Podemos observar que al introducir texto cumple con lo que queremos, pero, si notamos, en el texto tenemos etiquetas HTML, al introducir texto con la notación del punto al usar &lt;code&gt;.textContent&lt;/code&gt; este lo renderizado en forma de texto plano de una sola línea.&lt;/p&gt;

&lt;p&gt;Para renderizar en formato HTML se usa otra manera usando la notación del punto con &lt;code&gt;.innerHTML&lt;/code&gt;:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// con innerHTML nos permite renderizar el codifo en formato HTML, respetando etiquetas y texto segun el contedido definido
$texto.innerHTML = parrafo

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Veamos el resultado:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe86gjt1umpmw1oq4e3jj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe86gjt1umpmw1oq4e3jj.png" alt="Result innerHTML"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tambien podemos usar otra manera llamada &lt;code&gt;.outerHTML&lt;/code&gt;, este nos permite renderizar código HTML pero reemplazando el elemento padre si sus descendiente son del mismo tipo. Por ejemplo, si en un &lt;code&gt;&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;&lt;/code&gt; desde JavaScript introducimos texto en el cual vaya otro &lt;code&gt;&amp;lt;p&amp;gt; &amp;lt;/p&amp;gt;&lt;/code&gt;, esto no es semántico para nuestra página web, esto hace que evalúe sus descendientes y reemplaza al elemento.&lt;/p&gt;

&lt;p&gt;Veamos una imagen:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flc1tvefhz647hhb388ep.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flc1tvefhz647hhb388ep.png" alt="outerhtml"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;En la imagen podemos ver señalizadas con unas flechas rojas los párrafos que están dentro de un párrafo, esto semánticamente no es correcto, esto es cuando utilizamos &lt;code&gt;.innerHTML&lt;/code&gt;, pero podemos corregir esto con &lt;code&gt;.outerHTML&lt;/code&gt;:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$texto.outerHTML = parrafo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Ahora veamos el resultado:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frechut0a74a3uqy14yvs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frechut0a74a3uqy14yvs.png" alt="result outerHTML"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Con esto hemos terminado las diferentes formas de introducir texto en HTML desde JavaScript, cada una de ellas nos permiten introducir texto o renderizar código según nuestro objetivo y lo que queramos introducir en elementos HTML.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>Manejo del DOM #2: Attributes &amp; Data Attributes</title>
      <dc:creator>Ulises A.F.C</dc:creator>
      <pubDate>Wed, 24 Jan 2024 04:32:38 +0000</pubDate>
      <link>https://forem.com/ulisesafcdev/introduccion-al-dom-attributes-data-attributes-1dj1</link>
      <guid>https://forem.com/ulisesafcdev/introduccion-al-dom-attributes-data-attributes-1dj1</guid>
      <description>&lt;h2&gt;
  
  
  ¿Qué es un Attribute?
&lt;/h2&gt;

&lt;p&gt;Los &lt;code&gt;attributes&lt;/code&gt; nos proporcionan información adicional sobre los elementos del documento HTML, todos los elementos HTML pueden tener &lt;code&gt;attributes&lt;/code&gt;, por ejemplo, &lt;code&gt;&amp;lt;html lang="es"&amp;gt;&lt;/code&gt; su atributo es &lt;code&gt;lang&lt;/code&gt; y su valor es &lt;code&gt;es&lt;/code&gt;, esto indigo el lenguaje de la pagina a español.&lt;/p&gt;

&lt;p&gt;En los enlaces de una pagina, por ejemplo, &lt;code&gt;&amp;lt;a href="index.html"&amp;gt;Inicio&amp;lt;/a&amp;gt;&lt;/code&gt; su atributo es &lt;code&gt;href&lt;/code&gt; y su valor es  una dirección URL.&lt;/p&gt;

&lt;h2&gt;
  
  
  Primera forma de obtener el valor de un atributo
&lt;/h2&gt;

&lt;p&gt;Accediendo a elementos del HTML tenemos acceso a sus atributos con la notación del punto, veamos un ejemplo de como hacerlo.&lt;/p&gt;

&lt;p&gt;Tomaremos como referencia un enlace en el documento HTML:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;a class="linkuser" href="index.html" data-link="inicio de pagina" data-name="enlace home"&amp;gt;Ir a&amp;lt;/a&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Accederemos al enlace y a su atributo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let linkhref1 = document.querySelector(".linkuser").href
console.log(linkhref1)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esto nos devuelve el valor del atributo &lt;code&gt;href&lt;/code&gt; como en la siguiente imagen:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy4wazsw75cer5i1sskhc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy4wazsw75cer5i1sskhc.png" alt="Resultado" width="423" height="37"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hay que tomar en cuenta en el resultado que nos muestra por consola, podemos observar que en este ejemplo el valor que nos muestra es una URL absoluta, diferente al valor que tiene en el documento, el valor que tiene es &lt;code&gt;index.html&lt;/code&gt;, en los enlaces, por ejemplo, podríamos necesitar el valor de la URL absoluta ó solamente el valor que tiene en el documento.&lt;/p&gt;

&lt;p&gt;Hay otra forma de acceder a los atributos de los elementos con un método en especifico el cual veremos a continuación:&lt;/p&gt;

&lt;h2&gt;
  
  
  Segunda forma de obtener el valor de un atributo
&lt;/h2&gt;

&lt;p&gt;Existe un método que nos permite acceder al valor de un atributo llamado &lt;code&gt;.getAttribute()&lt;/code&gt; veamos como se utiliza:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let linkhref2 = document.querySelector(".linkuser").getAttribute("href")
console.log(linkhref2)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este nos devuelve el valor que tiene en el atributo, mas no nos devuelve la ruta absoluta, veamos la imagen:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0phuf4cvyiq7fwtr00j7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0phuf4cvyiq7fwtr00j7.png" alt="Resultado 2" width="407" height="41"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ambas formas nos permiten acceder al valor del atributo, hay excepciones en el caso de los enlaces así como el ejemplo anterior que nos puede devolver la ruta absoluta, esto depende de la necesidad del programador del valor que requiera.&lt;/p&gt;

&lt;h2&gt;
  
  
  Creando y asignando valores a atributos en elementos HTML
&lt;/h2&gt;

&lt;p&gt;Podemos asignar valores a atributos y a la vez crear nuevos atributos a elementos HTML con el método llamado &lt;code&gt;.setAttribute()&lt;/code&gt; y se usa de la siguiente forma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// asignando un nuevo atributo
$linkuser.setAttribute("target", "_blank")
$linkuser.setAttribute("rel", "noopener")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tomando de referencia el enlace de ejemplo, le estamos asignando valores al atributo &lt;code&gt;target&lt;/code&gt; &amp;amp; al atributo &lt;code&gt;rel&lt;/code&gt;, independientemen si tenga el atributo o no, este cambia su valor o le asigna el nuevo atributo al elemento HTML.&lt;/p&gt;

&lt;h2&gt;
  
  
  Validar si existe o no un atributo en elementos HTML
&lt;/h2&gt;

&lt;p&gt;En caso de necesitar validar si existe un atributo en un elemento HTML. podemos usar un método especifico para eso llamado &lt;code&gt;.hasAttribute()&lt;/code&gt; este nos devolverá un valor &lt;code&gt;booleano&lt;/code&gt; indicando si existe o no el atributo en el elemento HTML que le indiquemos. &lt;/p&gt;

&lt;p&gt;Veamos un ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;console.log($linkuser.hasAttribute("rel"))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En este ejemplo nos devolverá &lt;code&gt;true&lt;/code&gt; ya que anteriormente lo hemos asignado al enlace del documento, en caso de no haberlo asignado, se validaría con &lt;code&gt;false&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Eliminar atributo de un elemento HTML
&lt;/h2&gt;

&lt;p&gt;También podemos eliminar atributos de elementos HTML en caso de que lo necesitemos con el método llamado &lt;code&gt;.removeAttribute()&lt;/code&gt; y se usa de la siguiente forma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$linkuser.removeAttribute("rel")
console.log($linkuser.hasAttribute("rel"))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Primero eliminamos el atributo que queremos eliminar, posterior, validamos que el atributo que eliminamos se haya removido del elemento HTML correctamente.&lt;/p&gt;

&lt;h2&gt;
  
  
  ¿Qué es un Data-attribute?
&lt;/h2&gt;

&lt;p&gt;Los &lt;code&gt;data-attribute&lt;/code&gt; fueron diseñados para que sea mas fácil de extender datos asociados a un elemento en particular sin necesidad de que tengan un significado definido, permiten almacenar información sobre un elemento HTML, su sintaxis es la siguiente:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;data-nombre="valor"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Los &lt;code&gt;data-attribute&lt;/code&gt; deben anteponerse con la palabra &lt;code&gt;data&lt;/code&gt; seguido por un guion (-) y un nombre, veamos un ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;a class="linkuser" href="index.html" data-link="inicio de pagina" data-name="enlace home"&amp;gt;Ir a&amp;lt;/a&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Tomando de referencia el código anterior, en el enlace podemos ver que tenemos dos &lt;code&gt;data-attribute&lt;/code&gt; llamados &lt;code&gt;data-link&lt;/code&gt; &amp;amp; &lt;code&gt;data-name&lt;/code&gt;. Así es como podemos definir &lt;code&gt;data-attributes&lt;/code&gt; a elementos HTML con información adicional que necesitemos.&lt;/p&gt;

&lt;p&gt;Para poder ver todos los &lt;code&gt;data-attributes&lt;/code&gt; del documento HTML podemos hacerlo con la notación del punto seguido de la palabra &lt;code&gt;dataset&lt;/code&gt;, veamos como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// podemos acceder a todos los data-attributes del elemento
console.log($linkuser.dataset)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esto nos devuelve un &lt;code&gt;DOMStringMap&lt;/code&gt; es una colección con los nombres de los &lt;code&gt;data-attribute&lt;/code&gt; que hemos definido en elementos del documento HTML. Veamos una imagen según el resultado anterior:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhhfgxz3f4q74ojahkd9r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhhfgxz3f4q74ojahkd9r.png" alt="Resultado dataset" width="389" height="98"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Esto nos permite darnos una mejor visibilidad de todos los &lt;code&gt;data-attributes&lt;/code&gt; que hemos definido.&lt;/p&gt;

&lt;h2&gt;
  
  
  Obtener el valor de un único Data Attribute
&lt;/h2&gt;

&lt;p&gt;Para acceder al valor de un &lt;code&gt;data-attribute&lt;/code&gt; lo hacemos con la notación del punto seguido del nombre del &lt;code&gt;data-attribute&lt;/code&gt;, de la siguiente forma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// podemos acceder a un data-attributes con la notación del punto
console.log($linkuser.dataset.name)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este nos devuelve su valor definido en su &lt;code&gt;data-attribute&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Creando un nuevo Data Attribute y definiendo su valor
&lt;/h2&gt;

&lt;p&gt;Para crear un nuevo &lt;code&gt;data-attribute&lt;/code&gt; se hace similar al ejemplo anterior donde obtenemos el valor de ello, solo que esta vez se le asigna un valor, veamos un ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// creando un nuevo data-attribute
$linkuser.dataset.unit = "nuevo dataset"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Con esto creamos y le asignamos valor a un nuevo &lt;code&gt;data-attribute&lt;/code&gt;, pero a la vez, si el &lt;code&gt;data-attribute&lt;/code&gt; ya existe, solamente sobrescribe su valor.&lt;/p&gt;

&lt;p&gt;Para validar si existe un &lt;code&gt;data-attribute&lt;/code&gt; se usa el método &lt;code&gt;.hasAttribute()&lt;/code&gt; nos sirve para validar cualquier atributo o data attribute. &lt;/p&gt;

&lt;p&gt;Para eliminar un &lt;code&gt;data-attribute&lt;/code&gt; se usa el método &lt;code&gt;.removeAttribute()&lt;/code&gt;, son los mismo métodos para cualquier tipo de atributo.&lt;/p&gt;

&lt;p&gt;Hasta aca hemos visto el valor que tiene los atributo y data-attribute en los elementos HTML, a criterio del programador los usara de manera que lo requiera.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>javascript</category>
      <category>learning</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Manejo del DOM #1: Nodos, selectores y elementos.</title>
      <dc:creator>Ulises A.F.C</dc:creator>
      <pubDate>Mon, 22 Jan 2024 05:28:21 +0000</pubDate>
      <link>https://forem.com/ulisesafcdev/introduccion-al-dom-35pi</link>
      <guid>https://forem.com/ulisesafcdev/introduccion-al-dom-35pi</guid>
      <description>&lt;h2&gt;
  
  
  ¿Que son los nodos?
&lt;/h2&gt;

&lt;p&gt;Cada etiqueta del documento y cada texto del documento es un nodo, lo que nos da como resultado tener nodos de tipo elementos y nodos de tipo texto. Por ejemplo, un nodo de tipo elemento seria un &lt;code&gt;&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;/code&gt; y un nodo de tipo texto seria lo que contenga dentro de la etiqueta &lt;code&gt;&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Con JavaScript podemos acceder a estos elementos del documento, a cada etiqueta HTML, podemos acceder a clases y a identificadores por medio del DOM.&lt;/p&gt;

&lt;h2&gt;
  
  
  Buscar elementos por su etiqueta
&lt;/h2&gt;

&lt;p&gt;Para acceder a cada elemento del documento por su etiqueta podemos hacerlo con un método llamado &lt;code&gt;.getElementsByTagName("p")&lt;/code&gt; y se usa de la siguiente forma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Buscar elementos por su etiqueta
let listItem = document.getElementsByTagName("li")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este nos devuelve un &lt;code&gt;HTMLCollection&lt;/code&gt;, este representa una colección genérica de elementos (objeto tipo array) y ofrece métodos y propiedades para seleccionarlos de la lista. &lt;/p&gt;

&lt;h2&gt;
  
  
  Buscar elementos por su nombre de clase
&lt;/h2&gt;

&lt;p&gt;Para acceder a elementos por su nombre de clase podemos hacerlo con el método &lt;code&gt;.getElementsByClassName("card")&lt;/code&gt; y se usa de la siguiente manera:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Buscar elementos por su nombre de clase
let clases = document.getElementsByClassName("card")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este método también nos devuelve un &lt;code&gt;HTMLCollection&lt;/code&gt; con una lista con todas los elementos que tengan como nombre de clase el parámetro que le indicamos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Buscar elementos por su nombre de formulario
&lt;/h2&gt;

&lt;p&gt;Con estos dos métodos mencionados anteriormente, podemos acceder una lista de elementos buscándolos por nombre de etiqueta o por su nombre de clase, pero, en el caso que tengamos un formulario en nuestra página podemos acceder a elementos con su nombre de formulario y para eso se utiliza el método llamado &lt;code&gt;.getElementsByName("buscar")&lt;/code&gt; y se usa de la siguiente manera:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Buscar elementos por su nombre de formulario "name"
let nameForm = document.getElementsByName("buscar")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este nos devuelve un &lt;code&gt;NodeList&lt;/code&gt; es una coleccion de nodos, este no es un &lt;code&gt;array&lt;/code&gt;, pero, es posible interactuar con &lt;code&gt;.foreach()&lt;/code&gt; y tambien se puede convertir en &lt;code&gt;array&lt;/code&gt; con &lt;code&gt;Array.from&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Buscar elementos por su nombre de ID
&lt;/h2&gt;

&lt;p&gt;Tambien podemos buscar elementos por su nombre de "id" con el método &lt;code&gt;.getElementById("header")&lt;/code&gt; y se usa de la siguiente manera:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Buscar elementos por su nombre de id
let id = document.getElementById("header")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este nos devuelve la sintaxis HTML de la primer coincidencia que encuentre.&lt;/p&gt;

&lt;p&gt;Con las nuevas actualizaciones del lenguaje han aparecido nuevos métodos que nos simplifican el uso de acceder a elementos del documento HTML, los 3 métodos vistos anteriormente han sido reemplazados por los métodos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;.querySelector()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;.querySelectorAll()&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;En ambos métodos se debe especificar con un punto (.) cuando queramos buscar elementos por nombre de clase, y con un (hashtag, gatito, etc.) (#) cuando queramos buscar elementos por nombre de ID. &lt;code&gt;.querySelector()&lt;/code&gt; nos devuelve la primer coincidencia encontrada, y, &lt;code&gt;.querySelectorAll()&lt;/code&gt; nos devuelve todas las coincidencias encontradas.&lt;/p&gt;

&lt;p&gt;Ambos métodos se usan de las siguiente manera:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let enlaces = document.querySelectorAll("a")
let card = document.querySelector(".card")

// nos devuelve todos los enlaces que existan
console.log(enlaces)
// nos devuelve el primer .card que exista
console.log(card)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En el caso de &lt;code&gt;.querySelectorAll()&lt;/code&gt; puede compartir método como &lt;code&gt;.foreach()&lt;/code&gt;, siguiendo el ejemplo anterior, recorriendo todos los enlaces:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// puede compartir metodos como en este ejemplo:
enlaces.forEach(el =&amp;gt; {
  console.log(el)
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hasta acá hemos visto como podemos acceder a elementos del documento HTML y poder interactuar con ellos por medio del DOM. Hemos aprendido métodos que nos pueden ayudar a acceder a elementos HTML, poro, a día de hoy se utiliza mas el método &lt;code&gt;.querySelector()&lt;/code&gt;, esto a medida que el programador lo requiera, ya que hay diferentes implementaciones que un método nos pueda ayudar mas que otro en el rendimiento de nuestra pagina según vaya creciendo el código.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>tutorial</category>
      <category>javascript</category>
      <category>programming</category>
    </item>
    <item>
      <title>Introducción a PHP y su sintaxis básica</title>
      <dc:creator>Ulises A.F.C</dc:creator>
      <pubDate>Sun, 31 Dec 2023 04:32:37 +0000</pubDate>
      <link>https://forem.com/ulisesafcdev/introduccion-a-php-y-su-sintaxis-basica-53kj</link>
      <guid>https://forem.com/ulisesafcdev/introduccion-a-php-y-su-sintaxis-basica-53kj</guid>
      <description>&lt;h2&gt;
  
  
  Etiquetas PHP
&lt;/h2&gt;

&lt;p&gt;Cuando &lt;strong&gt;PHP&lt;/strong&gt; analiza un archivo, busca etiquetas de apertura y cierre, las cuales son: &lt;code&gt;&amp;lt;?php&lt;/code&gt; y &lt;code&gt;?&amp;gt;&lt;/code&gt; que le indican a &lt;strong&gt;PHP&lt;/strong&gt; que comience e interprete el código entre ellas. De esta manera permite que &lt;strong&gt;PHP&lt;/strong&gt; se incruste en todo tipo de documentos diferentes, ya que al analizar el código que se encuentre entre estas etiquetas ignora todo lo que esta fuera de ellas.&lt;/p&gt;

&lt;p&gt;Veamos un ejemplo de su sintaxis básica:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?php

// esto es un comentario
// aca estarán instrucciones, código PHP

echo "hola mundo";

?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;echo&lt;/code&gt; es una instrucción en &lt;strong&gt;PHP&lt;/strong&gt; para mostrar un mensaje, podemos usar su version corta con la siguiente sintaxis:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;?= "hola mundo" ?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esta version corta solo es valida en instrucciones &lt;code&gt;echo&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Solamente lo que se encuentra dentro de estas etiquetas &lt;code&gt;&amp;lt;?php ... ?&amp;gt;&lt;/code&gt; sera interpretado por &lt;strong&gt;PHP&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Veamos otro ejemplo donde incrustamos código &lt;strong&gt;PHP&lt;/strong&gt; en un documento &lt;strong&gt;HTML&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang="en"&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;meta charset="UTF-8"&amp;gt;
    &amp;lt;meta http-equiv="X-UA-Compatible" content="IE=edge"&amp;gt;
    &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&amp;gt;
    &amp;lt;title&amp;gt;Document&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;h1&amp;gt;PHP Sintaxis&amp;lt;/h1&amp;gt;
    &amp;lt;?php echo "hola mundo"; ?&amp;gt;&amp;lt;br&amp;gt;

    &amp;lt;?= "hola mundo con la version corta "; ?&amp;gt;&amp;lt;br&amp;gt; 
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En este caso &lt;strong&gt;PHP&lt;/strong&gt; interpreta el código que se encuentra dentro de sus etiquetas, ósea, interpreta su sintaxis de código, ignorando el demás código, el navegador interpreta las etiquetas &lt;strong&gt;HTML&lt;/strong&gt; y las muestra en el navegador, pero, &lt;strong&gt;PHP&lt;/strong&gt; interpreta el código de su sintaxis dentro de sus etiquetas mostrando así su resultado, desde mostrar un simple mensaje a el resultado de alguna validación con sentencias condicionales, entre otros.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>php</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Tipos de Selectores en CSS</title>
      <dc:creator>Ulises A.F.C</dc:creator>
      <pubDate>Tue, 12 Sep 2023 03:11:55 +0000</pubDate>
      <link>https://forem.com/ulisesafcdev/tipos-de-selectores-en-css-467</link>
      <guid>https://forem.com/ulisesafcdev/tipos-de-selectores-en-css-467</guid>
      <description>&lt;p&gt;Los &lt;strong&gt;selectores en CSS&lt;/strong&gt; son aquellos donde asignamos estilos a etiquetas del documento HTML.&lt;/p&gt;

&lt;p&gt;Este tutorial se tratara de como podemos usar los selectores en CSS, veremos la mayor parte código de CSS.&lt;/p&gt;

&lt;p&gt;Empecemos por clasificar los tipos de selectores que hay en CSS:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Selector universal&lt;/li&gt;
&lt;li&gt;Selector de etiqueta&lt;/li&gt;
&lt;li&gt;Selector de identificador (ID)&lt;/li&gt;
&lt;li&gt;Selector de clase&lt;/li&gt;
&lt;li&gt;Selector de atributo&lt;/li&gt;
&lt;li&gt;Selectores agrupados&lt;/li&gt;
&lt;li&gt;Selectores descendientes&lt;/li&gt;
&lt;li&gt;Selector de hermano&lt;/li&gt;
&lt;li&gt;Selector de hijo directo&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Veremos a continuación cada uno de ellos, empecemos...&lt;/p&gt;

&lt;h2&gt;
  
  
  Selector universal
&lt;/h2&gt;

&lt;p&gt;El selector universal en CSS se compone por el símbolo de un asterisco &lt;code&gt;*&lt;/code&gt;, este selector hace referencia a todo el documento visible de una pagina web, por lo tanto, al definir estilos con este selector, este se aplica a todas las etiquetas del &lt;code&gt;body&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;* {
  background-color: darkslateblue;
  font-family: Arial, Helvetica, sans-serif
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este selector es mas utilizado para definir propiedades como &lt;code&gt;box-sizing: border-box&lt;/code&gt;, fuente de letra o un color de fondo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Selector de etiqueta
&lt;/h2&gt;

&lt;p&gt;Los selectores de etiqueta son aquellos que se componen por el nombre de etiquetas HTML, como por ejemplo: &lt;code&gt;body&lt;/code&gt;, &lt;code&gt;p&lt;/code&gt;, &lt;code&gt;header&lt;/code&gt;, &lt;code&gt;article&lt;/code&gt;, &lt;code&gt;section&lt;/code&gt;, &lt;code&gt;footer&lt;/code&gt;, entre otros.&lt;/p&gt;

&lt;p&gt;Para asignar estilos mediante selector de etiquetas, basta con colocar el nombre de la etiqueta HTML:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;h1 {
  color: lightcyan;
}

h2 {
  color: lemonchiffon;
}

p {
  color: lawngreen;
}

b {
  color: aliceblue;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Selector de identificador (ID)
&lt;/h2&gt;

&lt;p&gt;Los selectores de ID (identificador) se compone por el símbolo de &lt;code&gt;#&lt;/code&gt; seguido de un nombre identificador.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#cabecera {
  background-color: lightskyblue;
  padding: 5px;
}

#contenido {
  background-color: lightblue;
  padding: 5px;
}

#titulo {
  color: darkred;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Selectores de clase
&lt;/h2&gt;

&lt;p&gt;Los selectores de clase se componen por el símbolo del punto &lt;code&gt;.&lt;/code&gt; seguido de un nombre.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.texto {
  color: darkslateblue;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Selectores de atributo
&lt;/h2&gt;

&lt;p&gt;Los selectores de atributo se asignan por medio de corchetes &lt;code&gt;[]&lt;/code&gt;, dentro de ellos va el atributo al cual se le asignaría estilos.&lt;/p&gt;

&lt;p&gt;Un ejemplo de como poder usar este tipo de selector, supongamos que en nuestra pagina tenemos enlaces hacia diferentes redes sociales, pero que dependiendo la URL podamos asignar un color al enlace, seria de la siguiente manera:&lt;/p&gt;

&lt;p&gt;Estos serian los enlaces:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;a href="https://www.twitter.com"&amp;gt;Twitter&amp;lt;/a&amp;gt;
&amp;lt;a href="https://www.facebook.com"&amp;gt;Facebook&amp;lt;/a&amp;gt;
&amp;lt;a href="https://www.instagram.com"&amp;gt;Intagram&amp;lt;/a&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En CSS seria de la siguiente forma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[href="https://www.twitter.com"] {
  background-color: dodgerblue;
  padding: 6px;
  color: #222;
}

[href="https://www.facebook.com"] {
  background-color: navy;
  padding: 6px;
  color: #ccc;
}

[href="https://www.instagram.com"] {
  background-color: mediumvioletred;
  padding: 6px;
  color: pink;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Asi se definen los selectores de atributo. Una ventaja de usar este tipo de selector en casos muy especiales, es que podemos definir un patron. Por ejemplo, si queremos asignar estilos a un atributo que empieze por &lt;code&gt;x&lt;/code&gt; palabra, o que termina en &lt;code&gt;x&lt;/code&gt; palabra, o que contenga &lt;code&gt;x&lt;/code&gt; palabra.&lt;/p&gt;

&lt;p&gt;Veamos un ejemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/* 
lo que empiece con la palabra "curso",
poner en mayuscula y pintar de color verde 
*/
[href^="curso"] {
  text-transform: uppercase;
  color: greenyellow;
}

/*
lo que termine con la palabra "css3"
pintarlos de color rosa 
*/
[href$="css3"] {
  color: palevioletred;
}

/* 
todo lo que lleva la palabra 'maquetar' 
poner en minuscula y pintarlo de blanco 
*/
[href*="maquetar"] {
  color: #fff;
  text-transform: lowercase;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Con el símbolo de &lt;code&gt;^&lt;/code&gt; definimos el patrón para la búsqueda de "palabras que empiecen con".&lt;/li&gt;
&lt;li&gt;Con el símbolo de &lt;code&gt;$&lt;/code&gt; definimos el patrón para la búsqueda de "palabras que terminen con".&lt;/li&gt;
&lt;li&gt;Con el símbolo de &lt;code&gt;*&lt;/code&gt; definimos el patrón para la búsqueda de "palabras que incluyan la palabra de".&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Selectores agrupados
&lt;/h2&gt;

&lt;p&gt;Los selectores agrupados son aquellos elementos que comparten mismos estilos que otros elementos, ya sea, selectores de etiqueta, selectores de ID, selectores de clase, entre otros. El objetivo de agrupar selectores es no repetir codigo. &lt;code&gt;Don't  repeat yourself&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;article, #section {
  background-color: darkturquoise;
}

.titulo_uno, .titulo_dos, #titulo_tres {
  color: darkred;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Estos van separados por comas &lt;code&gt;,&lt;/code&gt;. como el ejemplo anterior.&lt;/p&gt;

&lt;h2&gt;
  
  
  Selectores descendientes
&lt;/h2&gt;

&lt;p&gt;Los selectores descendientes no son mas que otro tipo de selector que se encuentre dentro de otro, y así sucesivamente. Un ejemplo seria:&lt;/p&gt;

&lt;p&gt;En nuestro documento HTML tengamos lo siguiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;article class="parrafo"&amp;gt;
  &amp;lt;h2 class="titulo"&amp;gt;Concepto&amp;lt;/h2&amp;gt;
  &amp;lt;p class="texto"&amp;gt;
    Lorem ipsum dolor sit amet, consectetur adipisicing elit.
    Quaerat veritatis sint eius quasi, beatae vitae culpa 
    libero distinctio minima.
  &amp;lt;/p&amp;gt;
&amp;lt;/article&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El selector descendiente de &lt;code&gt;article&lt;/code&gt; son la etiqueta &lt;code&gt;h2&lt;/code&gt; y &lt;code&gt;p&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;En CSS seria de la siguiente forma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.parrafo .titulo {
  color: #558a05;
}

.parrafo .texto {
  color: #000111;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Así se asigna un selector descendiente, estas nos van separadas por comas &lt;code&gt;,&lt;/code&gt; a diferencia de los selectores agrupados.&lt;/p&gt;

&lt;p&gt;Aunque esta forma de usarlo no es tan usado, ya que para asignar estilos a un elemento de nuestro &lt;code&gt;body&lt;/code&gt; en el &lt;code&gt;html&lt;/code&gt; basta con poner el tipo de selector directamente. A diferencia de los tipos de selectores que nos restan por ver.&lt;/p&gt;

&lt;h2&gt;
  
  
  Selectores de hermano
&lt;/h2&gt;

&lt;p&gt;Los selectores de hermano hacen referencia al hermano siguiente de un elemento HTML. Para acceder al hermano siguiente mas cercano, se utiliza el símbolo de &lt;code&gt;+&lt;/code&gt;. También si queremos acceder a todos los hermanos siguientes se utiliza el símbolo de &lt;code&gt;~&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Un ejemplo, veamos el siguiente código HTML:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;main&amp;gt;
  &amp;lt;article&amp;gt;
    &amp;lt;h2&amp;gt;Titulo del parrafo&amp;lt;/h2&amp;gt;
    &amp;lt;p&amp;gt;
      Lorem ipsum dolor sit amet, consectetur adipisicing elit.
      Quaerat veritatis sint eius quasi, beatae vitae culpa 
      libero distinctio minima.
    &amp;lt;/p&amp;gt;

    &amp;lt;p id="cita"&amp;gt;
      Lorem ipsum dolor sit amet, consectetur adipisicing elit.
      Quaerat veritatis sint eius quasi, beatae vitae culpa 
      libero distinctio minima.
    &amp;lt;/p&amp;gt;

    &amp;lt;p&amp;gt;
      Lorem ipsum dolor sit amet, consectetur adipisicing elit.
      Quaerat veritatis sint eius quasi, beatae vitae culpa 
      libero distinctio minima.
    &amp;lt;/p&amp;gt;
  &amp;lt;/article&amp;gt;
&amp;lt;/main&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para poder asignar estilos a un hermano siguiente de un elemento se hace de la siguiente forma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;h2 + p {
  color: purple;
}

#cita + p {
  color: cyan;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Como podemos observar en el ejemplo, la etiqueta &lt;code&gt;h2&lt;/code&gt; su hermano siguiente es un párrafo &lt;code&gt;p&lt;/code&gt;, a ese párrafo se estaría aplicando el &lt;code&gt;color: purple&lt;/code&gt;. También en el otro ejemplo, &lt;code&gt;#cita&lt;/code&gt; tiene un hermano siguiente que es otro párrafo &lt;code&gt;p&lt;/code&gt;, a ese párrafo se estaría aplicando el &lt;code&gt;color: cyan&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Para poder asignar estilos a un hermano siguiente se debe anteponer el elemento anterior, ósea, su hermano anterior. Deben estar a la par ambos elementos para poder usar selectores de hermano, de lo contrario no funcionaria.&lt;/p&gt;

&lt;p&gt;En caso de asignar estilos a todos los hermanos siguientes funciona de la misma manera, deben estar a la par del siguiente elemento para que funcione.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;h2 ~ p {
  color: purple;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Así todos los hermanos &lt;code&gt;p&lt;/code&gt; de &lt;code&gt;h2&lt;/code&gt; cambiarían de color. A excepción de si se encontrase una sentencia similar a esta:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#cita + p {
  color: cyan;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;El hermano de &lt;code&gt;#cita&lt;/code&gt; ese no cambiaria de color.&lt;/p&gt;

&lt;h2&gt;
  
  
  Selectores de hijo directo
&lt;/h2&gt;

&lt;p&gt;Un selector de hijo directo se refiere a todos los elementos hijos de un elemento en especifico. Para hacer referencia a los hijos directos de un elemento se usa el símbolo de &lt;code&gt;&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Veamos el siguiente codigo HTML:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;section&amp;gt;
  &amp;lt;h2&amp;gt;Titulo del parrafo&amp;lt;/h2&amp;gt;
    &amp;lt;p&amp;gt;
      Lorem ipsum dolor sit amet, consectetur adipisicing elit.
      Quaerat veritatis sint eius quasi, beatae vitae culpa 
      libero distinctio minima.
    &amp;lt;/p&amp;gt;

  &amp;lt;h2&amp;gt;Titulo del parrafo&amp;lt;/h2&amp;gt;
    &amp;lt;p&amp;gt;
      Lorem ipsum dolor sit amet, consectetur adipisicing elit.
      Quaerat veritatis sint eius quasi, beatae vitae culpa 
      libero distinctio minima.
    &amp;lt;/p&amp;gt;

  &amp;lt;h2&amp;gt;Titulo del parrafo&amp;lt;/h2&amp;gt;
    &amp;lt;p&amp;gt;
      Lorem ipsum dolor sit amet, consectetur adipisicing elit.
      Quaerat veritatis sint eius quasi, beatae vitae culpa 
      libero distinctio minima.
    &amp;lt;/p&amp;gt;
&amp;lt;/section&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para asignar estilos con selector de hijo directo, se haria de la siguiente forma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;section &amp;gt; h2, p {
  color: cadetblue;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Si queremos dar estilos a mas de un elemento que conformen hijos directos de un elemento, despues del simbolo &lt;code&gt;&amp;gt;&lt;/code&gt;,los elementos van separados por comas &lt;code&gt;,&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Tambien, en un caso particular a este, podemos jugar con selector de hijo directo y selector de hermano:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;section &amp;gt; h2 + p {
  color: cadetblue;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;En este caso, &lt;code&gt;section&lt;/code&gt; tiene como hijo directo "muchos" &lt;code&gt;h2&lt;/code&gt;, pero esos &lt;code&gt;h2&lt;/code&gt; tienen un hermano &lt;code&gt;p&lt;/code&gt;, a ese &lt;code&gt;p&lt;/code&gt; se estarían aplicando los estilos.&lt;/p&gt;

&lt;h3&gt;
  
  
  En conclusión
&lt;/h3&gt;

&lt;p&gt;Los selectores en CSS no son muy complejos, pero es necesario saber como es su comportamiento. Les invito a que puedan practicar con ejemplos muy sencillos y que no puedan olvidar estos temas, por muy sencillos que parezcan se pueden volver complejos si no practicamos de vez en cuando. &lt;/p&gt;

&lt;p&gt;Puedes practicar en &lt;a href="https://codi.link"&gt;codi.link&lt;/a&gt; es un editor de código en linea muy ligero para poder hacer practicas.&lt;/p&gt;

&lt;p&gt;Gracias por terminar hasta aquí.&lt;br&gt;
Saludos &amp;lt;3&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>html</category>
      <category>css</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>META TAG's HTML5</title>
      <dc:creator>Ulises A.F.C</dc:creator>
      <pubDate>Thu, 27 Apr 2023 23:01:09 +0000</pubDate>
      <link>https://forem.com/ulisesafcdev/meta-tags-html5-1f4k</link>
      <guid>https://forem.com/ulisesafcdev/meta-tags-html5-1f4k</guid>
      <description>&lt;p&gt;Etiquetas básicas &lt;strong&gt;META TAG&lt;/strong&gt; y su función en nuestro sitio web.&lt;/p&gt;

&lt;p&gt;Empecemos:&lt;/p&gt;

&lt;p&gt;Definimos la codificación de caracteres en nuestro sitio web.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;meta charset="UTF-8"&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Definimos la compatibilidad del navegador en que será visto nuestro sitio web. Si tu sitio web se vera en navegadores recientes no sera necesario esta &lt;strong&gt;meta tag&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;meta http-equiv="X-UA-Compatible" content="IE=edge"&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Definimos la vista gráfica de nuestro sitio web para que se acople a diferentes tamaños de pantallas. Esto nos servirá para ser responsive nuestro sitio web.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Definimos palabras claves de búsqueda en el navegador para nuestro sitio web.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;meta name="keywords" content="HTML, Curso HTML, Sintaxis HTML, HTML5"&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Definimos una descripción de nuestro sitio web.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;meta name="description" content="Curso basico y sintaxis de HTML5"&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Definimos el nombre del autor del sitio web.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;meta name="author" content="Ulises AFC"&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>webdev</category>
      <category>programming</category>
      <category>html</category>
    </item>
    <item>
      <title>Desarrollar un proyecto MVC con PHP puro.</title>
      <dc:creator>Ulises A.F.C</dc:creator>
      <pubDate>Wed, 09 Nov 2022 01:56:17 +0000</pubDate>
      <link>https://forem.com/ulisesafcdev/desarrollar-un-proyecto-mvc-con-php-puro-4akg</link>
      <guid>https://forem.com/ulisesafcdev/desarrollar-un-proyecto-mvc-con-php-puro-4akg</guid>
      <description>&lt;h3&gt;
  
  
  Si quieres desarrollar un proyecto web en PHP te presento una manera de como estructurar tu proyecto con buenas practicas y con el patron de diseño MVC.
&lt;/h3&gt;

&lt;p&gt;Empezemos primero con la estructura de carpetas en tu editor de codigo o IDE favorito:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy5o2h3f8lzjteak4leuo.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy5o2h3f8lzjteak4leuo.PNG" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se compone de dos carpetas principales: app/ &amp;amp; public/&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;En la carpeta public/:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Tendremos carpetas donde tendremos archivos estaticos, carpetas como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;css/&lt;/li&gt;
&lt;li&gt;js/&lt;/li&gt;
&lt;li&gt;img/&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;entre otras carpetas como por ejemplo puede ser:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fonts/&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Adicional un archivo llamado &lt;strong&gt;index.php&lt;/strong&gt; en el cual se va cargar lo necesario de la carpeta &lt;strong&gt;app/&lt;/strong&gt;, para mostrar las vistas del proyecto en conjunto con los modelos y controladores, que al fin y al cabo la estructura del proyecto es MVC (modelo, vista, controlador).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;En la carpeta app/:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Tendremos la logica de negocio, osea, tendremos el control de las vistas y los modelos en un controlador. &lt;br&gt;
Carpetas como: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;config/&lt;/li&gt;
&lt;li&gt;lib/&lt;/li&gt;
&lt;li&gt;helpers/&lt;/li&gt;
&lt;li&gt;models/&lt;/li&gt;
&lt;li&gt;views/&lt;/li&gt;
&lt;li&gt;controllers/&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Y adicional un archivo llamado &lt;strong&gt;init.php&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A medida que vayamos empezando iremos agregando archivos en las carpetas para explicar en que consiste cada archivo.&lt;/p&gt;

&lt;p&gt;Si pudiste observar en la imagen de arriba, hay archivos llamados &lt;strong&gt;.htaccess&lt;/strong&gt;. Estos archivos nos ayudaran mucho para evitar acceso a carpetas y mapear URL, veremos poco a poco en que consisten, pero antes te dire en donde iran ubicados estos archivos:&lt;/p&gt;

&lt;p&gt;El primer &lt;strong&gt;.htaccess&lt;/strong&gt; lo crearemos en la carpeta raiz del proyecto: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwtsb9ejsv2p8a4acf54a.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwtsb9ejsv2p8a4acf54a.PNG" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;El segundo &lt;strong&gt;.htaccess&lt;/strong&gt; lo crearemos en la carpeta &lt;strong&gt;app/&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi72xnevy2cx0fy0hdhuc.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi72xnevy2cx0fy0hdhuc.PNG" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Y el tercer &lt;strong&gt;.htaccess&lt;/strong&gt; lo crearemos en la carpeta &lt;strong&gt;public/&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn4grxnrq0bot25nn8zmd.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn4grxnrq0bot25nn8zmd.PNG" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  A continuación escribiremos las instrucciones en los archivos &lt;strong&gt;.htaccess&lt;/strong&gt;:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Empezamos por el &lt;strong&gt;.htaccess&lt;/strong&gt; de la carpeta &lt;strong&gt;app/&lt;/strong&gt; con la siguiente instruccion:&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

Options -Indexes


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Con esa instruccion haremos que no se tenga acceso a esa carpeta ya que tendremos la logica del negocio, el funcionamiento de la aplicacion web y no nos interesa que tengan acceso a dichas carpetas de personas (mal intencionadas) en caso de que asi sea.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Continuaremos por el &lt;strong&gt;.htaccess&lt;/strong&gt; de la carpeta &lt;strong&gt;public/&lt;/strong&gt;:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Antes de explicar estas instrucciones debemos saber que por defecto el primer archivo que lee el navegador es el &lt;strong&gt;index&lt;/strong&gt;. Ahora bien, sucede lo siguiente: Al nosotros digitar una url con un archivo que no existe por ejemplo &lt;strong&gt;localhost/mvc-php/about.php&lt;/strong&gt; pues el servidor nos lanza un error &lt;strong&gt;500&lt;/strong&gt; llamado &lt;strong&gt;Internal Server Error&lt;/strong&gt; ya que el archivo &lt;strong&gt;about.php&lt;/strong&gt; no lo tenemos en nuestro proyecto.&lt;/p&gt;

&lt;p&gt;Es por eso que escribimos las siguientes instrucciones:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&amp;lt;IfModule mod_rewrite.c&amp;gt;
Options -Multiviews
RewriteEngine on
RewriteBase /mvc-php/public
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]
&amp;lt;/IfModule&amp;gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Con estas instrucciones hacemos que se eviten las &lt;strong&gt;Multiviews&lt;/strong&gt; es decir que en nuestro proyecto &lt;strong&gt;/mvc-php/public&lt;/strong&gt; si no encuentra un archivo en la carpeta &lt;strong&gt;public/&lt;/strong&gt; que no existe pues, redireccionar automaticamente al &lt;strong&gt;index.php&lt;/strong&gt;, adicionalmente pasamos un argumento llamado &lt;strong&gt;?url&lt;/strong&gt; en donde mas adelante veremos como podremos mapear la URL a travez de ese argumento y extraer esos datos con la funcion &lt;strong&gt;explode()&lt;/strong&gt; de php.&lt;/p&gt;

&lt;p&gt;Recuerda que nuestra carpeta o proyecto se llama &lt;strong&gt;mvc-php&lt;/strong&gt; por eso hemos escrito ese nombre en nuestro archivo &lt;strong&gt;.htaccess&lt;/strong&gt;. Si tu proyecto o carpeta se llamara diferente debes ponerle el nombre de tu proyecto para evitar problemas a la hora de correr la web.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Terminaremos por el &lt;strong&gt;.htaccess&lt;/strong&gt; de la carpeta raiz:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Antes de explicar las instrucciones, sucede una cosa, cuando abrimos nuestro proyecto en la web a travez de un servidor local nos muestra el directorio de nuestro proyecto:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbr95hrn64ahvegwa8kvy.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbr95hrn64ahvegwa8kvy.PNG" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para evitar esto, escribiremos las siguientes instrucciones:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&amp;lt;IfModule mod_rewrite.c&amp;gt;
RewriteEngine on
RewriteRule ^$ public/ [L]
RewriteRule (.*) public/$1 [L]
&amp;lt;/IfModule&amp;gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Con estas instrucciones hacemos que nos lea de principio a fin &lt;strong&gt;(^$)&lt;/strong&gt; seguido de la carpeta &lt;strong&gt;public/&lt;/strong&gt; y nos cargue un archivo con cualquier extension &lt;strong&gt;(.*)&lt;/strong&gt;. Este archivo se lo pasamos a travez de la URL en el argumento &lt;strong&gt;?url=$1&lt;/strong&gt; del archivo &lt;strong&gt;.htaccess&lt;/strong&gt; de la carpeta &lt;strong&gt;public/&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hasta acá hemos terminado con las instrucciones de los archivos &lt;strong&gt;.htaccess&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  A continuación empezaremos a trabajar con la URL para el funcionamiento de nuestro proyecto:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Dentro de la carpeta &lt;strong&gt;app/&lt;/strong&gt; iremos a la carpeta &lt;strong&gt;lib/&lt;/strong&gt; y crearemos el archivo &lt;strong&gt;Core.php&lt;/strong&gt; y escribiremos el siguiente codigo: &lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

class Core
{

  public function __construct()
  {
    $this-&amp;gt;getUrl();
  }

  public function getUrl()
  {
    echo $_GET['url'];
  }
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Estamos obteniendo la &lt;strong&gt;url&lt;/strong&gt; del navegador, ya explicare de donde sacamos la &lt;strong&gt;url&lt;/strong&gt;, continuando, iremos al fichero &lt;strong&gt;index.php&lt;/strong&gt; de la carpeta &lt;strong&gt;public/&lt;/strong&gt; y escribiremos lo siguiente:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

require_once '../app/init.php';


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Recordemos que en el archivo &lt;strong&gt;index.php&lt;/strong&gt; de la carpeta &lt;strong&gt;public/&lt;/strong&gt; cargaremos todo lo necesario de la carpeta &lt;strong&gt;app/&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Continuando, iremos al archivo &lt;strong&gt;init.php&lt;/strong&gt; de la carpeta &lt;strong&gt;app/&lt;/strong&gt; y por el momento escribiremos lo siguiente:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

echo "&amp;lt;h1&amp;gt;HELLO WORLD!!!&amp;lt;/h1&amp;gt;";


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Abramos nuestro proyecto en el navegador por medio del servidor local y veremos el mensaje de &lt;strong&gt;HELLO WORLD&lt;/strong&gt;, si es así, vamos por buen camino.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc5lz2qf0wlctf3doau69.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc5lz2qf0wlctf3doau69.PNG" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Esto era prueba para verificar que funcione lo que tratamos de hacer, volvemos al archivo &lt;strong&gt;init.php&lt;/strong&gt; de la carpeta &lt;strong&gt;app/&lt;/strong&gt; y cargaremos los ficheros de la carpeta &lt;strong&gt;lib/&lt;/strong&gt; con las siguientes lineas de codigo: &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

spl_autoload_register(function($lib){
  require_once 'lib/' . $lib . '.php';
});


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Con esto hacemos que vayamos cargando automaticamente los ficheros de la carpeta &lt;strong&gt;lib/&lt;/strong&gt;, luego, para mapear la URL lo haremos en el fichero de &lt;strong&gt;Core.php&lt;/strong&gt;, entonces debemos instanciar la clase que tenemos en &lt;strong&gt;Core.php&lt;/strong&gt; en el archivo &lt;strong&gt;index.php&lt;/strong&gt; de la carpeta &lt;strong&gt;public/&lt;/strong&gt; con la siguiente linea de codigo:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

$init = new Core;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Ahora recargaremos en el navegador nuestro proyecto y no nos debe aparecer nada. Si es asi vamos por buen camino:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fstzm1jn6u6vw1dbn2cur.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fstzm1jn6u6vw1dbn2cur.PNG" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ahora para probar que estamos obteniendo la URL digitaremos algo en nuestra URL por ejemplo: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7wl0eketlxg5zlww7l23.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7wl0eketlxg5zlww7l23.PNG" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Podemos ver que se imprime la URL, explicaré a detalle como es que obtenemos lo que escribimos despues de &lt;strong&gt;localhost/mvc-php/&lt;/strong&gt;. Recordemos que escribimos algunas instrucciones en el archivo &lt;strong&gt;.htaccess&lt;/strong&gt; de la carpeta &lt;strong&gt;public/&lt;/strong&gt; y en pocas palabras evitabamos las Multiviews, es decir, si buscabamos un archivo que no existe en nuestro proyecto pues que nos redireccione al &lt;strong&gt;index.php&lt;/strong&gt; y a la vez indicabamos que la base de nuestro proyecto seria &lt;strong&gt;/mvc-php/public&lt;/strong&gt; ya que en esa direccion se encuentra pues valga la redundancia el &lt;strong&gt;index.php&lt;/strong&gt;, luego, pasabamos un parametro &lt;strong&gt;?url=$1&lt;/strong&gt; donde todo lo que escribamos despues de nuestra base lo obtendriamos a travez de ese parametro. Por eso es que cuando escribimos una direccion localhost/mvc-php/&lt;strong&gt;usuarios/listado.php&lt;/strong&gt; pues nos imprime justamente &lt;strong&gt;usuarios/listado.php&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Continuando, seguiremos de por lleno en el fichero &lt;strong&gt;Core.php&lt;/strong&gt;:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Recordemos que teniamos una clase con un constructor y un método donde obteniamos la URL. En el método &lt;strong&gt;getUrl()&lt;/strong&gt; borraremos lo que teniamos y escribiremos las siguientes lineas de codigo:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

public function getUrl()
{
  if(isset($_GET['url']))
  {
    $url = rtrim($_GET['url'], '/');
    $url = filter_var($url, FILTER_SANITIZE_URL);
    $url = explode('/', $url);

    return $url;
  }
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Evaluamos si existe un valor en &lt;strong&gt;url&lt;/strong&gt;, si es así entonces, obtenemos la &lt;strong&gt;url&lt;/strong&gt; y retiramos espacios en blanco al final de la cadena con la funcion &lt;strong&gt;rtrim()&lt;/strong&gt;, fijate que agregamos un parametro adicional (/), esto es para que nos elimine ese caracter también ya que una URL se separa por ese caracter.&lt;/p&gt;

&lt;p&gt;Continuando, filtramos la &lt;strong&gt;url&lt;/strong&gt; con la funcion &lt;strong&gt;filter_var()&lt;/strong&gt; y lo filtramos como &lt;strong&gt;FILTER_SANITIZE_URL&lt;/strong&gt;. Esto es para que lo considere como una URL en sí.&lt;/p&gt;

&lt;p&gt;Luego con la funcion &lt;strong&gt;explode()&lt;/strong&gt; guardamos en un array los valores de la URL separados por el caracter &lt;strong&gt;/&lt;/strong&gt;, es decir, va a recortar una cadena de texto cuando encuentre el caracter &lt;strong&gt;/&lt;/strong&gt;. Y con esto estariamos mapeando la URL.&lt;/p&gt;

&lt;p&gt;Para probar que funciona, en el constructor de la clase escribiremos lo siguiente:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

public function __construct()
{
  print_r($this-&amp;gt;getUrl());
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Ahora veamos en el navegador y escribamos algo en la URL para que nos devuelva los valores en un array:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1na4zdand6r20u9tj79d.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1na4zdand6r20u9tj79d.PNG" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Observemos que en el &lt;strong&gt;indice [0]&lt;/strong&gt; se guardo &lt;strong&gt;usuarios&lt;/strong&gt;, en el &lt;strong&gt;indice[1]&lt;/strong&gt; se guardo &lt;strong&gt;mostrar-usuarios&lt;/strong&gt;, y en el &lt;strong&gt;indice[2]&lt;/strong&gt; se guardo pues el numero &lt;strong&gt;2&lt;/strong&gt;. Ahora sí, ya tenemos mapeada la URL.&lt;/p&gt;

&lt;p&gt;Vamos a terminar de escribir las ultimas lineas de codigo en el constructor, pero antes, debemos definir unas variables, y son las siguientes:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

protected $controller;
protected $method;
protected $parameters = [];


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Tengamos en cuenta que la &lt;strong&gt;url&lt;/strong&gt; nos devuelve un array lo cual lo interpretaremos de la siguiente manera:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;indice[0] va ser igual al controlador&lt;/code&gt;&lt;br&gt;
&lt;code&gt;indice[1] va ser igual al metodo del controlador&lt;/code&gt;&lt;br&gt;
&lt;code&gt;indice[2] va ser igual a los parametros que iran como argumento en los metodos&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Luego dentro del constructor escribiremos las siguientes lineas de codigo:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

public function __construct()
{
  $url = $this-&amp;gt;getUrl();

  if(file_exists('../app/controllers/' . ucwords($url[0]) . '.php'))
  {
    $this-&amp;gt;controller = ucwords($url[0]);
    unset($url[0]);
  }

  require_once '../app/controllers/' . $this-&amp;gt;controller . '.php';
  $this-&amp;gt;controller = new $this-&amp;gt;controller;

  if(isset($url[1]))
  {
    if(method_exists($this-&amp;gt;controller, $url[1]))
    {
      $this-&amp;gt;method = $url[1];
      unset($url[1]);
    }
  }

  $this-&amp;gt;parameters = $url ? array_values($url) : [];
  call_user_func_array([$this-&amp;gt;controller, $this-&amp;gt;method], $this-&amp;gt;parameters);
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Empezemos explicando, primero evaluamos si existe un controlador en la carpeta &lt;strong&gt;controllers/&lt;/strong&gt; con la funcion &lt;strong&gt;file_exists&lt;/strong&gt; y tambien utilizamos la funcion &lt;strong&gt;ucwords()&lt;/strong&gt; para convertir en mayusculas la primer letra ya que por ende estaremos usando clases y las clases empiezan con una letra mayuscula. Entonces, si el archivo existe procedemos a asignar el valor del &lt;strong&gt;indice[0] de la url&lt;/strong&gt; a la variable &lt;strong&gt;$controller&lt;/strong&gt;, asi mismo utilizamos la funcion &lt;strong&gt;unset()&lt;/strong&gt; para destruir el valor anterior del &lt;strong&gt;indice[0]&lt;/strong&gt;. Luego lo que hacemos es requerir ese archivo y como es una clase hacemos instancia de la misma.&lt;/p&gt;

&lt;p&gt;Segundo, evaluamos si existe un valor en el &lt;strong&gt;indice[1]&lt;/strong&gt; osea, un metodo, y este metodo se encuentra dentro del controlador entonces tambien evaluamos si el metodo existe con la funcion &lt;strong&gt;method_exists&lt;/strong&gt;, si el metodo existe pues asignamos el valor del &lt;strong&gt;indice[1] de la url&lt;/strong&gt; a la variable &lt;strong&gt;$method&lt;/strong&gt;, y de igual forma utilizamos la funcion &lt;strong&gt;unset()&lt;/strong&gt; para destruir el valor anterios del &lt;strong&gt;indice[1]&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Tercero, con los parametros recordemos que le asignamos un array vacio, entonces vamos asignar a &lt;strong&gt;$parameters&lt;/strong&gt; el valor de &lt;strong&gt;$url&lt;/strong&gt; y pues &lt;strong&gt;$url&lt;/strong&gt; es otro array con valores. Si te fijas, usamos operadores ternarios, es decir si &lt;strong&gt;$parameters&lt;/strong&gt; es igual a &lt;strong&gt;url&lt;/strong&gt; entonces utilizamos la funcion &lt;strong&gt;array_values()&lt;/strong&gt; que lo que hace es devolver los valores de un array, con eso evitamos guardar un array dentro de otro array. Y si no hay nada en &lt;strong&gt;$parameters&lt;/strong&gt; pues seguira siendo un array vacio. Para finalizar utilizamos la funcion &lt;strong&gt;call_user_func_array()&lt;/strong&gt; y esta recibe dos parametros, primero, recibe un callback, segundo, el parametro a pasar a la callback es por eso que pasamos como callback un array con los valores de &lt;strong&gt;$controller&lt;/strong&gt; y &lt;strong&gt;$method&lt;/strong&gt;, y pues el parametro que se va a pasar es el de &lt;strong&gt;$parameters&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Hasta acá hemos terminado de configurar el &lt;strong&gt;Core.php&lt;/strong&gt;, ahora bien, como saber si esto funciona. Pues vamos a la carpeta &lt;strong&gt;controllers/&lt;/strong&gt; y crearemos un archivo, yo lo llamare &lt;strong&gt;Views.php&lt;/strong&gt;, recordemos que estas deben ser clases. Dentro escribiremos algunos metodos, esto lo haremos con fin de demostrar, para seguir el ejemplo puedes escribir las siguientes lineas de codigo:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

class Views
{

  public function inicio()
  {
    echo "&amp;lt;h1&amp;gt;Pagina de Inicio&amp;lt;/h1&amp;gt;";
  }

  public function update($id)
  {
    echo "Update view " . $id;
  }

}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Vayamos al navegador y escribamos la direcion indicando el controlador y el metodo que queremos que se cargue: &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flmjjx4si53k9zko1z37g.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flmjjx4si53k9zko1z37g.PNG" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Y en efecto vemos que se imprime lo que hemos indicado en el metodo &lt;strong&gt;inicio()&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Probemos con el otro metodo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkdw8adg2pp8kzg2jruaz.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkdw8adg2pp8kzg2jruaz.PNG" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Y en efecto vemos que recibe el parametro e imprime lo que hemos indicado en el metodo &lt;strong&gt;update($parametro)&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  A continuacion agregaremos otro fichero a la carpeta &lt;strong&gt;lib/&lt;/strong&gt; llamado &lt;strong&gt;Control.php&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Cual será la función de este archivo, pues, se encargará de cargar los modelos y las vistas de sus respectivas carpetas, osea, desde &lt;strong&gt;models/&lt;/strong&gt; y de &lt;strong&gt;views/pages/&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Entonces escribiremos las siguientes lineas de codigo:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

class Control
{
  public function load_model($model)
  {
    require_once '../app/models/' . $model . '.php';

    return new $model;
  }

  public function load_view($view, $datos = [])
  {
    if(file_exists('../app/views/pages/' . $view . '.php'))
    {
      require_once '../app/views/pages/' . $view . '.php';
    }
    else
    {
      die("404 NOT FOUND");
    }
  }
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Explicando, pues el metodo &lt;strong&gt;load_model($model)&lt;/strong&gt; se encarga de requerir el modelo que vamos a utilizar en el controlador. Y el metodo &lt;strong&gt;load_view($view, $datos = [])&lt;/strong&gt; se encarga de requerir la vista que queremos que se cargue en el controlador, adicional podemos mandar un array de datos para mostrarlo en la vista.&lt;/p&gt;

&lt;p&gt;Ya una vez teniendo esta clase con los metodos que nos ayudaran a cargar los modelos y las vistas, haremos que la clase &lt;strong&gt;View.php&lt;/strong&gt; herede de &lt;strong&gt;Control.php&lt;/strong&gt; para tener acceso a esos metodos, y eso se hace de la siguiente manera:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;class Views extends Control&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Ahora, antes de probar esos metodos debemos de terminar de configurar nuestro proyecto.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;En la carpeta &lt;strong&gt;config/&lt;/strong&gt; crearemos un fichero llamado &lt;strong&gt;config.php&lt;/strong&gt;, y escribiremos lo siguiente:&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

define('APP', dirname(dirname(__FILE__)));
define('URL', 'http://localhost/mvc-php');


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;En pocas palabras estamos definiendo dos constantes y como valor estamos asignando una ruta, en el caso de la constante &lt;strong&gt;APP&lt;/strong&gt; la ruta es hacia las carpetas dentro de &lt;strong&gt;APP&lt;/strong&gt;, y en el caso de &lt;strong&gt;URL&lt;/strong&gt; estamos definiendo la url del proyecto, esto nos ayudara a tener acceso de archivos de ambas carpetas.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Para que este archivo nos funcione, lo vamos a requerir en &lt;strong&gt;init.php&lt;/strong&gt; y vamos a escribir lo siguiente:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;require_once 'config/config.php';&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Luego nos iremos a la carpeta de &lt;strong&gt;views/&lt;/strong&gt; y a la carpeta de &lt;strong&gt;inc/&lt;/strong&gt; donde crearemos dos archivos llamados &lt;strong&gt;header.php&lt;/strong&gt; y &lt;strong&gt;footer.php&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Primero editaremos el fichero de &lt;strong&gt;header.php&lt;/strong&gt; y escribiremos lo siguiente:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html lang="es"&amp;gt;
&amp;lt;head&amp;gt;
  &amp;lt;meta charset="UTF-8"&amp;gt;
  &amp;lt;meta http-equiv="X-UA-Compatible" content="IE=edge"&amp;gt;
  &amp;lt;meta name="viewport" content="width=device-width, initial-scale=1.0"&amp;gt;
  &amp;lt;link rel="stylesheet" href="&amp;lt;?= URL . '/css/bootstrap.min.css' ?&amp;gt;"&amp;gt;
  &amp;lt;title&amp;gt;&amp;lt;?= $datos['title'] ?&amp;gt;&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Simplemente es codigo HTML5 con la diferencia que estamos cargando estilos CSS3, en este caso pues de Bootstrap. Ademas, fijate que en &lt;strong&gt;title&lt;/strong&gt; tenemos codigo PHP, esto es porque cuando vayamos a cargar una vista desde el controlador le podemos pasar parametros en un array, y cuando le demos un valor a title se imprimira automaticamente ahí.&lt;/p&gt;

&lt;p&gt;Ahora en &lt;strong&gt;footer.php&lt;/strong&gt; escribiremos lo siguiente:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

  &amp;lt;script src="&amp;lt;?= URL . '/js/bootstrap.bundle.min.js' ?&amp;gt;"&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Y pues, es codigo HTML5, estamos cargando el archivo JavaScript de Bootstrap, y a la vez estamos cerrando las etiquetas de &lt;strong&gt;body&lt;/strong&gt; y &lt;strong&gt;html&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Estos archivos son repetitivos, por lo tanto con esto nos ahorramos escribir en cada vista este codigo.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ahora vayamos a la carpeta de &lt;strong&gt;views/&lt;/strong&gt; y a la carpeta de &lt;strong&gt;pages/&lt;/strong&gt; y crearemos un fichero llamado &lt;strong&gt;inicio.php&lt;/strong&gt; y escribiremos lo siguiente:&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&amp;lt;?php require_once APP . '/views/inc/header.php' ?&amp;gt;

&amp;lt;div class="container-fluid bg-light py-5"&amp;gt;
  &amp;lt;div class="container"&amp;gt;
    &amp;lt;h1 class="display-4"&amp;gt;Welcome!!!&amp;lt;/h1&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;

&amp;lt;?php require_once APP . '/views/inc/footer.php' ?&amp;gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Fijate que estamos cargando &lt;strong&gt;header.php&lt;/strong&gt; al inicio, y tambien estamos cargando &lt;strong&gt;footer.php&lt;/strong&gt; al final. Con esto, cada vez que vayamos a escribir codigo HTML5 ya tendremos el codigo reutlizable y solo lo tendremos que requerir con &lt;strong&gt;require()&lt;/strong&gt;. Esto nos ayudara a optimizar un poco el codigo en estos archivos.&lt;/p&gt;

&lt;p&gt;También estamos mostrando pues un mensaje &lt;strong&gt;Welcome&lt;/strong&gt; con algunas clases de bootstrap para darle estilos a nuestras paginas.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ya teniendo esto, hoy si vayamos a &lt;strong&gt;Views.php&lt;/strong&gt; dentro de &lt;strong&gt;controllers/&lt;/strong&gt; y editaremos el metodo llamado &lt;strong&gt;inicio()&lt;/strong&gt;:&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

public function inicio()
{
  $datos = [
    "title" =&amp;gt; "Inicio"
  ];
  $this-&amp;gt;load_view('inicio', $datos);
}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Fijate que en el metodo &lt;strong&gt;inicio()&lt;/strong&gt;, primero, asignamos un array llamado &lt;strong&gt;$datos&lt;/strong&gt; y creamos un &lt;strong&gt;key&lt;/strong&gt; llamado &lt;strong&gt;title&lt;/strong&gt;, el valor que este obtenga se mostrara en la etiqueta &lt;strong&gt;&lt;/strong&gt; de cada pagina. Luego hacemos uso del metodo que nos ayuda a cargar las &lt;strong&gt;views/pages&lt;/strong&gt; que queremos mostrar, solamente indicamos el nombre de la vista, y le pasamos el array de &lt;strong&gt;$datos&lt;/strong&gt; para que tambien muestre el titulo de la pagina.&lt;/p&gt;

&lt;h3&gt;
  
  
  Finalmente, probemos como es que va terminar funcionando:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Vayamos al navegador y nos dirigimos a la URL de nuestro proyecto:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd853x8k2yrru2jm5bsxv.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd853x8k2yrru2jm5bsxv.PNG" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No nos aparecera nada, pero si en la URL indicamos el controlador y el metodo que queremos ver, nos muestra lo siguiente:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F53hypgh31loayvmort2w.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F53hypgh31loayvmort2w.PNG" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Y vemos que se carga la pagina de inicio que habiamos creado en &lt;strong&gt;pages/views/inicio.php&lt;/strong&gt; por medio del controlador y el metodo dentro del cual requerimos esa vista con el metodo &lt;strong&gt;load_view()&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  CONCLUSIONES:
&lt;/h3&gt;

&lt;p&gt;Hasta aquí hemos terminado de cierta manera el funcionamiento del proyecto, el cual consiste en aplicar el patron de diseño MVC (modelo, vista, controlador) y a la vez aplicar POO (programacion orientada a objetos). También decir que, consideraría este proyecto como un &lt;strong&gt;template&lt;/strong&gt; donde puedes usarlo para crear un proyecto para desarrollar un &lt;strong&gt;CRUD&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hasta acá dejaré desarrollado este proyecto, y posteriormente subiré otra nota donde usaremos este mismo proyecto pero realizando un CRUD y como poder desarrollarlo.&lt;/strong&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Te dejo el link del repositorio en GITHUB y puedas usar este template para desarrollar un proyecto.
&lt;/h4&gt;

&lt;p&gt;Si puedes deja una estrella al repositorio :p&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/ulisesafcdev/mvc-php" rel="noopener noreferrer"&gt;template-mvc-php&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>php</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
