JAVASCRIPT 5
JAVASCRIPT 5
Python
Codo a Codo 4.0
JavaScript
Parte 5
Páginas estáticas vs. Páginas dinámicas
Cuando comenzamos en el mundo del desarrollo web, normalmente empezamos a
aprender a escribir etiquetado o marcado HTML y además, añadir estilos CSS para darle
color, forma y algo de interacción. Sin embargo, a medida que avanzamos, nos damos cuenta
que en cierta forma podemos estar bastante limitados.
Si únicamente utilizamos HTML/CSS, sólo podremos crear páginas «estáticas» (no
responden al comportamiento del usuario), pero si añadimos Javascript, podremos crear
páginas «dinámicas». Cuando hablamos de páginas dinámicas, nos referimos a que
podemos dotar de la potencia y flexibilidad que nos da un lenguaje de programación para
crear documentos y páginas mucho más ricas, que brinden una experiencia más completa y
con el que se puedan automatizar un gran abanico de tareas y acciones.
La forma de crear páginas dinámicas es dotar de código de programación a nuestro
documento HTML, a través de la manipulación de sus componentes, lo que se conoce
como DOM (Document Object Model)
Recordemos que la estructura HTML está compuesta por etiquetas y que las etiquetas están anidadas
dentro de otras (ejemplo: dentro del body puedo tener un div y adentro del div otro div y a su vez un
párrafo). A esto se lo denomina el árbol DOM o simplemente DOM. Es un árbol porque hay una
jerarquía, hay ramas que se abren, que las vemos cuando utilizamos Visual Studio Code que nos permite
ver la estructura, las indentaciones, las tabulaciones.
DOM: Estructura jerárquica
Fuente:
https://simplesnippets.tech/what-is-document-object-modeldom-how-js-interacts-wit
Manipulando el DOM
Para manipular el DOM vamos a hacerlo a través de objetos, llamando al objeto document
(algo habíamos visto con document.write).
En el interior del DOM vamos a tener elementos y nodos. El elemento es la representación
de una etiqueta HTML y el nodo es una unidad más básica todavía que el elemento
propiamente dicho.
Todos los elementos HTML, dependiendo del elemento que sean, tendrán un tipo de dato
específico. Algunos ejemplos:
Modificar elementos
Si nos encontramos en nuestro código Javascript y queremos hacer modificaciones en un
elemento de la página HTML, lo primero que debemos hacer es buscar dicho elemento.
Para ello identificamos al elemento a través de alguno de sus atributos más utilizados,
generalmente el id o la clase.
Métodos tradicionales
Uno de los métodos tradicionales para realizar búsquedas de elementos en el documento es
getElementById(), que busca un documento específico. También tenemos otros tres
métodos que nos devolverán un array donde tendremos que elegir el elemento en cuestión
posteriormente:
Métodos tradicionales
Los métodos que comienzan con la palabra clave get nos van a devolver un valor. El set va a
modificar un valor.
Los gets (getters) van a obtener un valor en función de un criterio de búsqueda. Si yo a un
elemento le digo “tráeme un elemento según el ID” le tengo que pasar el ID. El ID era la
propiedad que podía tener cada elemento del documento HTML. Puedo localizarlo a través de
ese ID y si no lo encuentra devuelve null.
Lo que traigo por ID es un objeto que lo puedo almacenar en una variable.
Con innerHTML puedo pasarle un HTML para que reemplace su contenido por lo que le estoy
pasando. Podemos utilizar comillas invertidas ` (se colocan con ALT+96) que permiten que los
saltos de línea sean considerados.
También lo puedo buscar por su nombre de clase si un elemento HTML pertenece una clase
de CSS. Pero el getElementsByClassName me va a devolver un array de elementos (array de
objetos) porque podemos tener más de un elemento con la misma clase aplicada, con el ID
solo se podía aplicar a un único elemento. Entonces podré acceder a una posición de ese array
de elementos que es un único elemento.
Métodos tradicionales
<script> JS
function cambiarTexto() {
var x = document.getElementsByClassName("ejemplo");
x[0].innerHTML = "Hola Codo a Codo!";
}
</script>
En este caso modifica el elemento 0 de la colección de elementos cuya clase
sea “ejemplo”.
Fuente (ejemplo):
https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_document_getelementsbycl
assname
En este ejemplo se obtienen los elementos de la clase=“example” y se guardan en un array al cual
luego se accede por su posición (0) y con innerHTML se cambia en el documento HTML.
getElementsByClassName()
El método .getElementsByClassName(class) permite buscar los elementos con la clase
especificada en class. Es importante darse cuenta de que el método tiene getElements en
plural, y esto es porque al devolver clases (al contrario que los id) se pueden repetir, y por lo
tanto, devolvernos varios elementos, no sólo uno.
const items = document.getElementsByClassName("item"); // [div, div, div] JS
Con estos dos métodos podemos realizar todo lo que hacíamos con los métodos
tradicionales mencionados anteriormente e incluso muchas más cosas (en menos código),
ya que son muy flexibles y potentes gracias a los selectores CSS.
querySelector()
El primero, .querySelector(selector) devuelve el primer elemento que encuentra que encaja
con el selector CSS suministrado en selector. Al igual que su «equivalente»
.getElementById(), devuelve un solo elemento y en caso de no coincidir con ninguno,
devuelve null:
En este ejemplo lo que hacemos es localizar la clase .example y modificar el color de fondo a rojo, al
primer elemento que va a aparecer (en este caso el elemento h2). Lo busco, lo traigo y le hago la
modificación de la nueva propiedad del backgroundColor.
Para hacer esto aplica un for, itera sobre los elementos que le devuelve el método y a todos les modifica el estilo.
Node .createComment(text) Crea y devuelve un nodo de comentarios HTML <!-- text -->.
Clona el nodo HTML y devuelve una copia. deep es false por defecto. Ej:
Node .cloneNode(deep)
https://www.w3schools.com/jsref/met_node_clonenode.asp
Tip: Cambiar en la última línea del ejemplo la variable h por t: ¿por qué me lo crea al lado del
botón y el texto es más pequeño?
Create element
Creación de listas clonando un elemento (cloneNode):
https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_node_clonenode
Más información:
https://developer.mozilla.org/es/docs/Web/API/Document/createElement
http://www.codexexempla.org/curso/curso_4_3_c.php
Ver ejemplo DOM-createElement.html
Modificar atributos de un elemento
Hasta ahora, hemos visto cómo crear elementos HTML con JavaScript, pero no hemos visto cómo modificar
los atributos HTML de dichas etiquetas creadas. En general, una vez que tenemos un elemento sobre el que
vamos a crear algunos atributos, lo más sencillo es asignarle valores como propiedades de objetos:
Propiedades Descripción
Devuelve el contenido de texto del elemento. Se puede asignar para modificar. Ej:
.textContent
https://www.w3schools.com/jsref/prop_node_textcontent.asp
Devuelve el contenido HTML del elemento. Se puede usar asignar para modificar. Ej:
.innerHTML
https://www.w3schools.com/jsref/prop_html_innerhtml.asp
La propiedad textContent es útil para obtener (o modificar) sólo el texto dentro de un elemento, obviando el
etiquetado HTML:
const div = document.querySelector("div"); // <div></div> JS
div.textContent = "Hola a todos"; // <div>Hola a todos</div>
div.textContent; // "Hola a todos"
La propiedad innerHTML nos permite hacer lo mismo, pero interpretando el código HTML indicado y
renderizando sus elementos:
const div = document.querySelector(".info"); // <div class="info"></div> JS
div.innerHTML = "<strong>Importante</strong>"; // Interpreta el HTML
div.innerHTML; // "<strong>Importante</strong>"
div.textContent; // "Importante”
Reemplazar contenido
Se logra con innerHTML:
https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_node_textcontent2
Explicación del ejemplo:
A esta función la estoy llamando con un evento onclick y lo que hace es obtener el contenido
del texto de la lista (textContent) y con el innerHTML copio el texto de esa lista, guardado en
la variable x y lo inserto dentro del párrafo que tiene el id “demo”.
Otro ejemplo:
https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_element_innerhtml
Explicación del ejemplo:
En este caso al evento onclick se lo damos a un párrafo. Es decir que cuando hagamos clic
en él se va a modificar el texto a través del id “demo”, se dispara ese evento.
Este ejemplo se puede ver en los posteos de Facebook cuando uno toca en “ver más” y se
despliega el resto del texto.
Insertar una imagen (ejemplo)
const img = document.createElement("img");
img.src = "https://lenguajejs.com/assets/logo.svg";
img.alt = "Logo Javascript";
document.body.appendChild(img);
Eliminar el contenido
Con el método remove() quitamos un elemento del documento:
https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_node_remove
API nativa de Javascript
Javascript nos proporciona un conjunto de herramientas para trabajar de forma nativa con el
DOM de la página, entre las que se encuentran:
Videotutoriales y cursos:
Estrategia Ejemplo
Desde propiedades JS
Otra forma interesante que podemos contemplar, es haciendo uso de las propiedades de
Javascript. Por cada evento, existe una propiedad disponible en el elemento en cuestión: