Manejo Del Dom Desde Javascript
Manejo Del Dom Desde Javascript
Mayo de 2022
1
Este uso aparece en los años 1950, cuando los helados con sabor vainilla
(artificial), se convierten en los más habituales por ser los más baratos
GSyC - 2022 DOM en JavaScript 4
DOM Introducción
Formularios mejorados
Ejemplos
Una entrada donde el usuario indica un porcentaje desplazando
una barra, no introduciendo un número
Una entrada que inmediatamente actualiza otra información.
Si gasta 20 entonces le quedan 80
Información sobre el progreso de lo que el usuario ha pedido.
P.e progress bar en porcentaje, o en unidades de tiempo. O
estimaciones del tiempo restante
Información en tiempo real sobre sucesos diversos
...
2
Aunque esto se puede alterar con async y defer
GSyC - 2022 DOM en JavaScript 11
DOM Introducción
Objetos Globales
Objeto Window
El código JavaScript que se ejecuta en el navegador tiene un
objeto global llamado Window
Hay uno por cada ventana (o pestaña) del navegador,
compartido por todos los scripts y todos los módulos (pero no
los WebWorkers) 3
Objeto document
Cuando el navegador procesa el HTML, crea un objeto
document
Es el objeto principal del DOM, en él se insertan todos los
objetos Element y todos los nodos de texto
3
En node.js este objeto se llama global. En los WebWorkers este objeto se
llama WorkerGlobalScope
GSyC - 2022 DOM en JavaScript 14
Eventos
Eventos
let b = document.querySelector("#boton01");
// Atención a la almohadilla, es imprescindible
b.addEventListener("click", manej_boton01);
// Atajo para ver los log: Ctr Shift I
</script>
http://ortuno.es/hola_js_01.html
Todo manejador recibe un objeto event con los detalles del evento
Como en el ejemplo anterior, tal vez no lo necesitemos. En ese
caso no hace falta declararlo
En esta versión del ejemplo anterior, sı́ lo declaramos y lo
usamos (para trazarlo)
<button id="boton01">Dame un clic</button>
<script>
'use strict'
function manej_boton01(event) {
console.log("Clic recibido.");
console.log(event);
}
let b = document.querySelector("#boton01");
b.addEventListener("click", manej_boton01);
</script>
http://ortuno.es/hola_js_02.html
Depuración
Técnicas obsoletas
Texto de un elemento
<script>
'use strict'
function manej_boton01(event) {
let parrafo01 = document.querySelector("#parrafo01");
let fecha = new Date();
parrafo01.textContent = fecha;
}
let boton01 = document.querySelector("#boton01");
boton01.addEventListener("click", manej_boton01);
</script>
http://ortuno.es/texto.html
Atributos inexistentes
function manej_boton01(event) {
console.log("manej_boton01");
let parrafo01 = document.querySelector("#parrafo01");
console.log(parrafo01);
let fecha = new Date();
console.log("Valor de la fecha:"+fecha);
parrafo01.textContent = fecha;
}
let boton01 = document.querySelector("#boton01");
console.log(boton01);
boton01.addEventListener("click", manej_boton01);
http://ortuno.es/texto.trazas.html
console.log(v_out);
let v_out_div = document.querySelector("#v_out");
v_out_div.textContent = v_out;
}
http://ortuno.es/calculo_mal.html
Variables globales
<script>
use 'strict'
function manej_boton01() {
x = x + 1;
actualiza_valor();
}
function manej_boton02() {
x = x + 5;
actualiza_valor();
}
<body>
<button id="boton01">Registrar hora </button>
<div id="div01">--</div>
<script>
'use strict'
function manej_boton01(event){
let div01 = document.querySelector("#div01");
let fecha = new Date();
let parrafo = document.createElement("p");
parrafo.textContent = fecha;
div01.append(parrafo);
}
let boton01 = document.querySelector("#boton01");
boton01.addEventListener("click", manej_boton01);
</script>
</body>
http://ortuno.es/nuevo_p.html
textContent
Es una propiedad
parrafo.textContent = fecha;
div01.append(parrafo);
<button id="boton01">append</button>
<button id="boton02">textContent</button>
<br>
<div id="div01"></>
<script>
'use strict'
function usa_append(event){
let div = document.querySelector("#div01");
div.append("hola");
}
function usa_textContent(event){
let div = document.querySelector("#div01");
div.textContent = "hola";
}
<script>
'use strict'
function manej_boton01(event){
// Seleccionamos la tabla
let tabla_horas = document.querySelector("#tabla_horas");
http://ortuno.es/nueva_fila.html
let contador_clics = 0;
function manej_boton01(event){
let tabla_horas = document.querySelector("#tabla_horas");
contador_clics = contador_clics + 1;
let tr = document.createElement("tr"); // Creamos fila
http://ortuno.es/nueva_fila_celdas.html
Añadir contenido
let contador_gatos = 0;
function crear_gato(event){
let div01 = document.querySelector("#div01");
// Añadimos un id a la imagen
contador_gatos = contador_gatos + 1;
let id = "gato_" + String(contador_gatos) ;
img.id = id;
function identifica_foto(event){
let id_foto = event.target.id;
let span01 = document.querySelector("#span01");
span01.textContent = id_foto;
}
http://ortuno.es/identifica_imagen.html
Modificación de un elemento
Podemos cambiar cualquier elemento dinámicamente, modificando
sus atributos
<script>
'use strict'
pon_gato(); // Empezamos poniendo una imagen para que no quede
// en la página una foto vacı́a, incorrecta
function pon_gato(event){
let img = document.querySelector("#foto");
img.src = "images/gato.jpg";
img.alt = "Gato común europeo de color naranja";
img.width="300";
}
function pon_periquito(event){
let img = document.querySelector("#foto");
img.src = "images/periquito.jpg";
img.alt = "Periquito azul";
img.width="300";
}
</script>
<script>
let boton01 = document.querySelector("#boton01");
boton01.addEventListener("click", pon_gato);
<style>
.oculto {
display: none;
}
</style>
4
De la misma forma que en un procesador de texto podemos modificar el
formato de un párrafo directamente, pero en general es preferible asignar un
estilo al párrafo, y modificar el formato del estilo
GSyC - 2022 DOM en JavaScript 54
Modificación de un elemento
function pon_clase() {
console.log("pon_clase");
let marco = document.querySelector('#marco_foto');
marco.classList.add("oculto");
};
y esto
<div id="marco_foto">
<img src="images/plaza_espana.jpg" alt="Plaza de España, Madrid">
</div>
marco.classList.add("oculto");
marco.classList.remove("oculto");
function alterna_clase() {
let marco = document.querySelector('#marco_foto');
marco.classList.toggle("oculto");
};
http://ortuno.es/quita_pon_02.html
querySelectorAll
En todos los ejemplos anteriores, seleccionábamos un elemento del
DOM (y solo uno) por su identificador. Pero habrá ocasiones en las
que necesitamos seleccionar una serie de elementos.
Para ello disponemos del método document.querySelectorAll
No es exactamente un array, sino un objeto similar, NodeList
Si esta lista está vacı́a, su atributo length valdrá 0
En este ejemplo, seleccionamos todos elementos que contengan la
clase gato, para eliminarlos
function borra_gatos(event){
let gatos = document.querySelectorAll(".gato");
for (let gato of gatos){
gato.remove();
}
}
http://ortuno.es/elimina.html
display / visibility
<style>
.sin_display {
display: none;
}
.invisible {
visibility: hidden;
}
</style>
...
<script>
for (let gato of gatos){
if (usa_display)
gato.classList.toggle("sin_display");
else
gato.classList.toggle("invisible");
}
</script>
http://ortuno.es/selecciona.html
function manej_boton01(event) {
let p01 = document.querySelector("#span01");
p01.style.backgroundColor="LightSkyBlue";
}
function manej_boton02(event) {
let p01 = document.querySelector("#span01");
p01.style.backgroundColor="LightSalmon";
}
http://ortuno.es/css_js.html
Eventos de ratón
mouseover
Se recibe cuando el ratón se coloca sobre el elemento
mouseleave
Se recibe cuando el ratón abandona el elemento seleccionado
mouseout
Se recibe cuando el ratón abandona el elemento o cualquiera
de sus descendentes
https://www.w3schools.com/jquery/tryit.asp?filename=tryjquery_event_mouseleave_mouseout
function manej01(event) {
event.target.classList.add("destacado");
}
function manej02(event) {
event.target.classList.remove("destacado");
}
http://ortuno.es/eventos_01.html
function crea_parrafos(){
for(let i=0; i<3; ++i){
let div01 = document.querySelector("#div01");
let p = document.createElement("p");
p.textContent = "Lorem ipsum dolor sit amet";
p.addEventListener("mouseover", manej01);
p.addEventListener("mouseout", manej02);
div01.append(p);
}
}
http://ortuno.es/eventos_02.html
<div id=div01>
<p id=p01>Lorem ipsum dolor sit amet.</p>
<p id=p02>Lorem ipsum dolor sit amet.</p>
<p id=p03>Lorem ipsum dolor sit amet.</p>
</div>
<script>
function manej01(event) {
event.target.classList.add("destacado");
}
function manej02(event) {
event.target.classList.remove("destacado");
}
http://ortuno.es/eventos_03.html
Formularios (1)
Formularios (2)
input[name=figura]:checked
http://ortuno.es/formulario_02.html
Validación de un formulario
let contrasenia_minima = 8;
function manej01(event) {
let display = document.querySelector("#validacion");
let contrasenia = document.querySelector("#contrasenia").value;
if (contrasenia.length >= contrasenia_minima) {
display.textContent = "Contraseña aceptable";
} else {
display.textContent = "Contraseña muy corta";
}
};
let campo_contra = document.querySelector("#contrasenia");
campo_contra.addEventListener("change", manej01);
http://ortuno.es/validacion_01.html
function manej01(event) {
let contrasenia = document.querySelector("#contrasenia").value;
valida_contrasenia(contrasenia);
};
let campo_contra = document.querySelector("#contrasenia");
campo_contra.addEventListener("change", manej01);
campo_contra.addEventListener("keyup", manej01);
campo_contra.addEventListener("paste", manej01);
campo_contra.addEventListener("mouseup", manej01);
http://ortuno.es/validacion_02.html