Artículos
DOM

Ejecutar un evento una única vez

Creado: 31/Oct/2023 Actualizado: 03/Dic/2023

Cuando registramos un eventos tenemos múltiples opciones gestionar ese registro. Por ejemplo hemos visto cómo podemos abortar la ejecución de un evento enviando una señal. En este caso vamos a ver cómo podemos ejecutar un evento una única vez.

La idea es sencilla, lo que haremos será registrar un evento, por ejemplo el click sobre un botón y vamos a configurar para que cuando volvamos a pulsarlo el evento ya no esté disponible, ya que solo se ejecutará una vez.

En el ejemplo lo que vamos a hacer es poner 3 botones y registrar el mismo evento. De esta forma solo dejaremos que se pulse en uno de los botones y sabremos cual es el que se ha pulsado. A modo de opciones para el usuario.

Así que manos a la obra. Lo primero será poner los botones en nuestra página mediante un elemento button.

<button id="uno">Uno</button>
<button id="dos">Dos</button>
<button id="tres">Tres</button>

Ahora vamos a registrar el evento que asociaremos a los tres botones. Para ello crearemos un objeto que tenga un método .handleEvent().

const controlador = {
  handleEvent: function(ev) {
    elegido.value = ev.target.id;
  }
}

El método .handleEvent() recibe la información del evento, es por ello que en el atributo Event.target podremos acceder al objeto que inicio el lanzamiento del evento y podremos recuperar, como podemos ver el código, el identificador del elemento mediante su atributo id.

Con el controlador diseñado lo que haremos, mediante el método .addEventListener() es asociar dicho controlador a los tres botones.

const b1 = document.getElementById("uno");
const b2 = document.getElementById("dos");
const b3 = document.getElementById("tres");

const controlador = {
    handleEvent: function(ev) {
        elegido.value = ev.target.id;
    }
}

b1.addEventListener("click",controlador);
b2.addEventListener("click",controlador);
b3.addEventListener("click",controlador);

Lo siguiente será hacer que solo pueda lanzar una vez el evento. Para ello podríamos gestionar una señal que eliminase el lanzamiento del evento, pero hay una forma más sencilla y es que si miramos la sintaxis del método .addEventListener() vemos que hay una propiedad de opciones que nos permite gestionar que el evento solo se lance una única vez.

Esta propiedad es el valor once, lo cual podemos pasar como opciones dentro del método .addEventListener().

addEventListener(type, listener, options)

Simplemente tendremos que asociar el valor de true a dicha opción once. De esta manera nuestros gestores de eventos quedaría con el método .addEventListener() de la siguiente manera:

b1.addEventListener("click",controlador, { once: true });
b2.addEventListener("click",controlador, { once: true });
b3.addEventListener("click",controlador, { once: true });

Así ya tendremos nuestro código fuente para que tengamos el control para ejecutar un evento una única vez. ¿Te has dado cuenta que con el código sabremos qué botón fue pulsado?

Código Fuente

Descárgate el código fuente de Ejecutar un evento una única vez
Y si te ha gustado nuestro código fuente puedes regalarnos una estrella Star
Ejecutar un evento una única vez
Artículos
HTML5

Formulario en Ventana Dialogo con HTML5

Creado: 30/Oct/2023 Actualizado: 28/Oct/2023

En ciertas circunstancias de diseño de nuestra web necesitamos que el usuario tenga foco en los datos que tiene que introducir, y es por ello que vamos a ver cómo podemos mostrar un formulario en ventana dialogo con HTML5. De esta forma mostraremos el formulario dentro de una ventana de dialogo dejando bloqueado todo lo que hay detrás de la página y así consiguiendo que el usuario haga foco.

Pero lo primero de todo es saber, ¿cómo se genera una ventana modal en HTML5? Pues para ello hay que conocer el elemento dialog. El elemento dialog nos permite definir el contenido de una ventana modal, de tal manera que los elementos que incluyamos dentro del elemento dialog no se mostrarán hasta que no carguemos la ventana modal.

La estructura del elemento dialog es la siguiente:

<dialog open>...</dialog>

Ahora lo que tenemos que hacer es insertar los elementos dentro del elemento dialog. Ya que vamos a crear un formulario, un formulario de búsqueda, lo que insertaremos será lo siguiente:

<dialog id="buscador">
	<form action="<https://lineadecodigo.com/search>" method="dialog">
	  <label for="busqueda">¿Qué quieres buscar?</label>
	  <input type="search" id="busqueda" name="q"/>
	  <input type="submit" value="Buscar"/>
	  <input id="cancelar" type="submit" value="Cancelar"/>
	</form>
</dialog>

Vemos que hemos utilizado un elemento form que representa un formulario y los típicos elementos input para poder poner un cuadro de texto de búsqueda, así como un par de botones de envío y cancelación.

Una de la cosa que habrás notado en el código es que el formulario, dentro de su campo method, sitio dónde típicamente se indica el tipo de envío del formulario por si es GET o si es POST, es que tiene un valor de “dialog”. Y es que el valor “dialog” aparece en HTML5 para cuando el formulario se encuentra dentro de un elemento dialog. Indicando este valor lo que sucede es que se cierra la ventana de dialogo y se genera un evento de envío de información, pero sin enviar los datos. Es decir, nos tenemos que preocupar de enviar los datos, si es lo que queremos.

Ahora lo que tendremos que hacer será controlar este formulario dentro del elemento dialog. En primer lugar lo que tendremos que hacer será el mostrar la ventana modal. Para ello lo que hacemos es invocar el método .showModal() del elemento dialog.

var mostrarBuscador = document.getElementById('mostrarBuscador');

// Mostramos el buscador
mostrarBuscador.addEventListener('click', function() {
  dialogo.showModal();
});

El método .showModal() se encuentra definido dentro del interface HTMLDialogElement, el cual contiene los métodos y propiedades para poder interactuar con el elemento dialog mediante código Javascript.

Lo siguiente será gestionar el cierre de la ventana modal. Esta la podemos cerrar programáticamente mediante la invocación al método .close() del HTMLDialogElement o cuando se produce el submit del formulario.

Así, sobre el elemento dialog gestionamos un evento “close” el cual asociamos utilizando un método .addEventListener().

var dialogo = document.getElementById('buscador');
var busqueda = document.getElementById('busqueda');

dialogo.addEventListener('close', function(){
	if (dialogo.returnValue == "Buscar")       
	  console.log('Quieres buscar ' + busqueda.value);
	else
	  console.log('Parece que no quieres buscar nada');
})

Cuando se cierre la ventana modal podremos, por un lado, el poder acceder a los elementos que la conformaban, es por ello que vemos en el código que accedemos al campo de texto para ver el valor que ha introducido el usuario para su búsqueda. Pero, por otro, podemos ver el valor que devuelve la ventana modal. Y es que el atributo returnValue contiene el valor del botón que se pulsó para salir de la ventana. Así sabremos su el usuario pulsó sobre el botón “Buscar” o sobre el botón “Cancelar”.

De esta forma ya sabremos cómo podemos mostrar un formulario en ventana dialogo con HTML5 y cómo gestionar la respuesta del mismo.

Código Fuente

Descárgate el código fuente de Formulario en Ventana Dialogo con HTML5
Y si te ha gustado nuestro código fuente puedes regalarnos una estrella Star
Formulario en Ventana Dialogo con HTML5

Vídeos sobre HTML5

Disfruta también de nuestros artículos sobre HTML5 en formato vídeo. Aprovecha y suscribete a nuestro canal.

Test HTML5

¿Te atreves a probar tus habilidades y conocimiento en HTML5 con nuestro test?

Test HTML5
Artículos
DOM

Hacer foco en un elemento sin scroll

Creado: 29/Oct/2023 Actualizado: 03/Dic/2023

Cuando hacemos un foco sobre un elemento de la página, el navegador, busca el elemento del foco y se posiciona sobre él realizando un scroll sobre el documento si el elemento no está dentro del área actual. Pero, cómo podemos diseñar nuestra web si queremos hacer foco en un elemento sin scroll, es decir, posicionarnos en el elemento sin que el navegador mueva el scroll. La idea es no generar una sensación de cambio al usuario por el mero hecho de hacer foco sobre un elemento. Para ello vamos a utilizar algo de Javascript y métodos del DOM.

Lo primero será construir una página web que tenga muchos elementos. El primero será un botón que nos ayude a simular el foco sobre un elemento y que crearemos mediante un elemento button, luego crearemos muchos saltos de línea mediante un elemento br y por último crearemos, mediante un elemento form, un formulario con los elementos sobre los que haremos foco.

Veamos el código que representa esto:

<h1>Foco sin Scroll</h1>
  
<button id="hacerFoco">Hacer Foco Sin Scroll</button>

<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>

<form id="myform">
	<label for="nombre">Nombre: </label>
	<input type="text" id="nombre"/>
</form>

Ahora vamos a generar el foco sobre el campo del formulario. Para ello tenemos que registrar un evento sobre el botón utilizando un método .addEventListener()

let boton = document.getElementById("hacerFoco");
boton.addEventListener("click", function() { ... });

Este evento disparará el lanzar un foco sobre el campo de texto. Para poder hacer foco sobre dicho elemento simplemente tendremos que ejecutar el método .focus(). Así que utilizamos el método .getDocumentById() para obtener acceso al campo y ya sobre él ejecutamos el método .focus().

let boton = document.getElementById("hacerFoco");
boton.addEventListener("click", function() {
  let campo = document.getElementById("nombre");
  campo.focus();
});

Si bien, el método .focus(), si no le decimos nada, hace el scroll sobre la página. Así que tenemos que echar un ojo a su sintaxis:

Element.focus(options)

En estas opciones tenemos dos valores, por un lado preventScroll que nos permite evitar ejecutar el scroll y que será lo que utilicemos para nuestro ejemplo y focusVisible para decidir si se muestra o no la marca visible sobre el elemento al que hacemos foco.

Por lo tanto el código con la propiedad preventScroll con un valor true quedará de la siguiente forma:

let boton = document.getElementById("hacerFoco");
boton.addEventListener("click", function() {
  let campo = document.getElementById("nombre");
  campo.focus({preventScroll: true});
});

Así ya podremos posicionarnos en el elemento sin que el navegador mueva el scroll con este sencillo código Javascript que manipula los métodos del DOM.

Código Fuente

Descárgate el código fuente de Hacer foco en un elemento sin scroll
Y si te ha gustado nuestro código fuente puedes regalarnos una estrella Star
Hacer foco en un elemento sin scroll
Artículos
DOM

Abortar Eventos con Señales

Creado: 28/Oct/2023 Actualizado: 29/Oct/2023

Las páginas web que construimos a día de hoy funcionan en base a eventos que se van produciendo y sobre los que vamos reaccionando. Si no hacemos nada, mientras estemos en la página, los eventos se seguirán produciendo, o bien existirán eventos de larga duración como podría ser la descarga de un elemento. Es por ello que es bueno el saber cómo podemos abortar eventos con señales para que estos eventos dejen de producirse.

Para poder explicar cómo podemos abortar eventos con señales en nuestra web manipulando los elementos DOM vamos a realizar un ejemplo sencillo que nos ayude a entenderlo. La idea es tener una página web en la que capturemos un sencillo evento de pulsación de un botón o elemento button registrando el evento onclick. Y dicho evento onclick lo pararemos mediante una señal cuando se produzcan 3 clicks sobre el botón.

Así que lo primero será crear un botón mediante el elemento button:

<button id="inc">Incrementar valor</button>

Y ahora registramos el evento onclick ayudándonos del método .getElementById() para acceder a él:

const boton = document.getElementById("inc");

boton.addEventListener("click", ()=>{
  console.log("Capturo Evento") 
});

Lo que tiene el método .addEventListener() es que a parte del controlador podemos indicarle una serie de opciones adicionales que nos permitan, por ejemplo, controlar que solo se llame al evento una vez, o que no se invoque al método .preventDefault(). Una de estas opciones es poder asignarle una señal que nos permita abortar el evento y que no se vuelva a ejecutar dicho evento.

Para ello lo primero que tenemos que hacer es crear un controlador de señal. En este caso un AbortController.

const controller = new AbortController();

Y ese controlador, asignárselo como señal al método .addEventListener() mediante el atributo AbortController.signal

boton.addEventListener("click", ()=>{
  console.log("Capturo Evento")
}, {
  signal: controller.signal
});

Ahora ya tenemos asignado el controlador mediante la señal al evento. Pero lo que nos quedará será decidir en qué momento mandamos una señal para que se aborte el evento.

Lo que vamos a hacer es controlar el número de veces que se pulsa el botón. Para ello creamos una variable valor que contiene dicho contador. En el caso de que el contador llegue a 3 lanzaremos la señal que aborte el evento mediante el método AbortController.abort().

boton.addEventListener("click", ()=>{

  console.log("Capturo Evento")
  let valor = parseInt(mensaje.value) + 1;
  mensaje.value = valor;

  // La tercera vez que hayamos capturado el evento lo eliminamos
  if (valor == 3)
    controller.abort();
}, {
  signal: controller.signal
});

De esta manera el evento click ya no volverá a ser lanzado y se dejará de contar. Así ya hemos aprendido cómo podemos abortar eventos con señales utilizando nuestro método .addEventListener() y mediante un controlador AbortController. Todo ello manipulando el árbol DOM y con un poquito de Javascript.

Código Fuente

Descárgate el código fuente de Abortar Eventos con Señales
Y si te ha gustado nuestro código fuente puedes regalarnos una estrella Star
Abortar Eventos con Señales
Artículos
DOM

Pasar datos a un listener

Creado: 24/Oct/2023 Actualizado: 03/Dic/2023

Seguro que si has manejado eventos dentro de una página web mediante un método .addEventListener() te has preguntado cómo puedes pasar datos a un listener. Es decir, que registrar un evento es sencillo y acceder al objeto que lo ha lanzado es fácil si accedemos a la propiedad Event.target. Pero, qué hacer si queremos pasarle más información del contexto.

Lo que vamos a realizar en este código es el crear un botón, que al pulsarlo, nos emita un saludo en algún campo de la página web. Pero este saludo tendrá un nombre el cual pasaremos como dato adicional a nuestro gestor de eventos.

Lo primero, como no, crear nuestro botón para el saludo mediante el elemento button y un área de texto para poner el saludo que conseguiremos mediante un elemento span.

<button id="saludar">Saludar</button>
<span id="mensaje"></span>

Recuerda siempre utilizar el atributo id de los elementos HTML para poder acceder de forma sencilla en nuestro código Javascript mediante el método .getElementById()

Ahora pasamos a registrar el evento click mediante el método .addEventListener(). Lo que hacemos el utilizar la propiedad innerHTML para poder volcar un texto sobre el elemento span.

const boton = document.getElementById("saludar");
const mensaje = document.getElementById("mensaje");

boton.addEventListener("click", function () {
    mensaje.innerHTML = "Hola";
});

El siguiente paso será definir una variable que contendrá el valor externo el cual queremos pasar a nuestro método .addEventListener(). Para conseguir pasarle esta variable externa recurrimos al método .bind() que llevan asociado todas las funciones.

La idea del método .bind() es que el valor que pasemos como primer parámetro será el valor de this dentro de la función. Así que pasaremos la variable como parámetro del método .bind()

let nombre = "Víctor";
const boton = document.getElementById("saludar");
const mensaje = document.getElementById("mensaje");

boton.addEventListener("click", function () {...}.bind(nombre)
);

En este caso solo hemos pasado un primer parámetro que funciona como valor this dentro de la función. Si bien, al método .bind() le podemos pasar más parámetros, como podemos consultar en la explicación de su sintaxis.

Ahora lo que tenemos que hacer es utilizar es el valor this dentro del método .addEventListener() para poder componer el mensaje de saludo.

let nombre = "Víctor";
const boton = document.getElementById("saludar");
const mensaje = document.getElementById("mensaje");

boton.addEventListener("click", function () {
    console.log(this);
    mensaje.innerHTML = "Hola " + this;
}.bind(nombre)
);

Con todo esto ya habremos conseguido pasar datos a un listener mediante el método .bind() a nuestro registro de eventos definido en el .addEventListener().

Código Fuente

Descárgate el código fuente de Pasar datos a un listener
Y si te ha gustado nuestro código fuente puedes regalarnos una estrella Star
Pasar datos a un listener
Artículos
DOM

Evitar el envío de un formulario

Creado: 23/Oct/2023 Actualizado: 03/Dic/2023

Si estamos controlando datos en un formulario HTML se puede dar el caso de que si incluimos un botón se produzca el envío de la información a la hora de pulsarlo. Cuando quizás solo queramos realizar algún cálculo en el formulario antes de enviarlo. Es, en este caso, cuando tendremos que evitar el envío de un formulario al pulsar el botón.

Lo primero será crear el formulario HTML mediante el elemento form:

<form>
  <label for="mensaje">Valor: </label>
  <input id="mensaje" type="text" value="0"/>
  <button id="inc">+1</button>
</form>

En este formulario hemos incluido un campo de texto mediante el elemento input dónde podemos incluir un número de texto. Y un botón, mediante el elemento button el cual nos permitirá ir incrementando el valor del campo de texto en el que pusimos el número.

Ahora pasaremos a codificar la parte en Javascript para poder dar el comportamiento de incremento de valores del formulario.

Para ello tendremos que obtener una referencia tanto al botón como al campo de texto mediante su id. Este id lo utilizaremos para recuperar la referencia con el método .getElementById(). Una vez tenemos la referencia lo que haremos será asociar un evento click al botón mediante un método .addEventListener().

const boton = document.getElementById("inc");
const mensaje = document.getElementById("mensaje");

boton.addEventListener("click", function (ev) {...});

Dentro de la codificación del método .addEventListener() vamos a hacer el proceso sencillo de incrementar el valor del campo de texto. Para ello recuperamos el valor que tiene el elemento input y lo incrementamos en una unidad. Esto lo hacemos accediendo a su atributo value.

const boton = document.getElementById("inc");
const mensaje = document.getElementById("mensaje");

boton.addEventListener("click", function (ev) {
  let valor = parseInt(mensaje.value) + 1;
  mensaje.value = valor;
});

Como el campo del elemento input es texto, tendremos que apoyarnos en la función Javascript que convierte un texto en número, esta es la función .parseInt().

Con este código tendremos el comportamiento que al pulsar el botón se ejecutará el código, pero automáticamente se enviará el formulario, por lo cual no podremos tener el efecto esperado y es dónde tenemos que saber cómo evitar el envío de un formulario al pulsar el botón.

Para ello hay que apoyarnos en el método .preventDefault() el cual va asociado al evento definido por el interface Event y que se obtiene como parámetro a la hora de registrar el evento.

El código quedaría de la siguiente forma al invocar al método .preventDefault()

const boton = document.getElementById("inc");
const mensaje = document.getElementById("mensaje");

boton.addEventListener("click", function (ev) {
  let valor = parseInt(mensaje.value) + 1;
  mensaje.value = valor;
  ev.preventDefault();
});

De esta forma ya habremos conseguido evitar el envío de un formulario al pulsar el botón manipulando los eventos de nuestro árbol DOM.

Código Fuente

Descárgate el código fuente de Evitar el envío de un formulario
Y si te ha gustado nuestro código fuente puedes regalarnos una estrella Star
Evitar el envío de un formulario
Artículos
Python

Último punto de una frase

Creado: 17/Oct/2023 Actualizado: 12/Oct/2023

Un problema que te puedes encontrar cuando queremos generar un extracto de un texto para ponerlo como resumen es el de ¿por dónde corto el texto? Una de las ideas es encontrar el último punto de una frase con Python para poder realizar el corte en ese punto y de esa manera no dejar el texto cortado por un punto que lo deje sin sentido.

Es decir, si tengo el siguiente texto:

cadena = 'Estaba escribiendo un texto. Porque tenía que publicarlo. Era un texto demasiado largo.'

Y queremos generar un texto de resumen de 40 caracteres haríamos lo siguiente:

# Cortamos una parte para un resumen
cadena = cadena[0:40]
print (cadena)

Como podemos comprobar utilizamos el corte de Python que nos ofrece una subcadena de una cadena dada. Para ello hemos utilizado el operador corchete indicando la posición de inicio y de fin de la subcadena, separados por dos puntos.

En este momento el texto que veremos por consola será el siguiente:

💡 Estaba escribiendo un texto. Porque tení

Como podemos observar el contenido del corte, al ser por tamaño, queda de una forma con poco sentido.

Es por eso que la idea del ejemplo es buscar el último punto de una frase para realizar el corte desde esa posición y que así, el resultado quede más coherente.

Para poder buscar un punto dentro de una frase nos vamos a apoyar en el método .rfind() y es que el método .rfind() nos permite empezar a buscar una subacdena empezando a buscar por la derecha de la cadena.

cadena.rfind('.')

De esta manera, volveremos a utilizar el operador de corchete para realizar otro corte sobre nuestra cadena y quedarnos realmente con el último punto de una frase con Python.

cadena[0:cadena.rfind('.')+1]

Es importante ver que el corte lo hacemos por la siguiente posición en la que se encuentra el punto, por salvaguardar su valor, es por eso por lo que le sumamos el valor de 1.

Ahora, ya sí, nuestra cadena con el resumen del texto devolverá el siguiente contenido por consola.

💡 Estaba escribiendo un texto.

De esta manera tan sencilla y útil habremos conseguir obtener el último punto de una frase con Python.

Último punto de una frase
Artículos
HTML5

Cargar un iframe de forma asíncrona

Creado: 16/Oct/2023 Actualizado: 12/Oct/2023

Una buena pregunta para hacernos es por qué deberíamos de cargar un iframe de forma asíncrona dentro de nuestras páginas. El beneficio principal es que utilizar una carga diferida de los iframe nos permite evitar la descarga de un contenido a no ser que sea estrictamente necesario.

Los iframe los utilizamos para cargar contenido de otras páginas, dónde los casos más generales son cargar un vídeo, información de redes sociales,… es decir, contenido incrustado. Si nuestro usuario no llega a esa zona de visualización del iframe podremos diferir e incluso evitar su carga. De esta forma podemos llegar a evitar la descarga de mucha información y contenido en el navegador de nuestros usuarios. Algo a tener muy en cuenta con las aplicaciones móviles.

Hasta que llegó el estándar HTML5 teníamos que hacer uso del lenguaje Javascript para poder conseguir este efecto. Si bien desde HTML5 disponemos de un atributo que nos ayuda a realizar esta carga en diferido, este es el atributo loading, cuya sintaxis es la siguiente:

<iframe src="iframe.html" loading="valor"></iframe>

Los valores que puede tener el atributo loading son:

  • eager, este valor indica que el iframe se debe de cargar inmediatamente, independientemente de que el iframe este en el foco del navegador o no.
  • lazy, mediante este otro valor se podrá diferir la carga del iframe hasta que este esté a a una distancia cercana de entrar en el foco del navegador.

Es por ello que si queremos cargar un iframe de forma asíncrona dentro de nuestras páginas deberemos de utilizar el atributo loading y su valor “lazy”. De esta forma el código quedaría de la siguiente forma:

<iframe loading="lazy" src="<https://lineadecodigo.com>"></iframe>

En este caso hemos cargado de forma asíncrona la página de Línea de Código. Ahora ya solo te queda dar el paso para optimizar tus páginas web mediante el uso d este atributo loading.

Código Fuente

Descárgate el código fuente de Cargar un iframe de forma asíncrona
Y si te ha gustado nuestro código fuente puedes regalarnos una estrella Star
Cargar un iframe de forma asíncrona

Vídeos sobre HTML5

Disfruta también de nuestros artículos sobre HTML5 en formato vídeo. Aprovecha y suscribete a nuestro canal.

Test HTML5

¿Te atreves a probar tus habilidades y conocimiento en HTML5 con nuestro test?

Test HTML5
Artículos
Python

Reemplazar texto con Python

Creado: 15/Oct/2023 Actualizado: 03/Dic/2023

En este ejemplo vamos a ver cómo podemos reemplazar texto con Python. La idea es buscar un texto de una frase y sustituirlo por otro. Lo que haremos será decidir cuántas veces podemos reemplazar una subcadena, es decir, si queremos reemplazar solo la primera ocurrencia que aparezca el texto dentro de la frase o si queremos reemplazarlo más veces.

Lo primero será definir una cadena de texto en Python:

cadena = "Hola Víctor, ¿Cómo estás?. Quería comentarte Víctor"

Ahora lo que haremos será apoyarnos en el método .replace() el cual recibe el texto a buscar para reemplazar y el valor nuevo que queremos asignarle. La sintaxis del método .replace() es la siguiente:

string.replace(valo_antiguo, valor_nuevo, numero_veces)

Dónde valor_antiguo es el valor el cual queremos reemplazar y valor_nuevo el valor nuevo que queremos poner. Además podemos ver que el método se aplica directamente sobre una cadena.

De esa manera, si queremos sustituir todas las veces que aparece el texto “Víctor” dentro de la cadena, ejecutaremos el siguiente código:

cadena.replace("Víctor","Marta")

Lo que hemos conseguido mediante este código Python es que se sustituyan todas las ocurrencias que se hayan encontrado del texto “Víctor” dentro de la cadena por el valor “Marta” obteniendo el siguiente resultado si volcamos la cadena por pantalla.

💡 Hola Marta, ¿Cómo estás?. Quería comentarte Marta

Pero si has revisado la sintaxis del método .replace() también podemos ver que nos ofrece otras alternativas a la hora de reemplazar cadenas de texto de tal manera que podremos limitar las veces que queremos que se reemplace un texto por otro. Esto lo conseguimos con el atributo numero_veces, el cual es un parámetro opcional. Así, si no indicamos nada se reemplazan todas las ocurrencias que se encuentren y si indicamos un valor podemos limitar el número de reemplazos que ejecute el método .replace()

Por lo tanto, si queremos reemplazar solo la primera ocurrencia, escribiremos lo siguiente línea de código en Python:

cadena.replace("Víctor","Marta",1)

En este caso, el resultado que obtendremos por consola si volcamos el contenido de la cadena, será:

💡 Hola Marta, ¿Cómo estás?. Quería comentarte Víctor

Vemos que solo se ha reemplazado la primera ocurrencia del texto que buscamos reemplazar.

Así que ya sabes como puedes reemplazar texto con Python. ¿Se te ocurre cómo podemos reemplazar la última ocurrencia que aparezca en la cadena? Cuéntanos en los comentarios.

Código Fuente

Descárgate el código fuente de Reemplazar texto con Python
Y si te ha gustado nuestro código fuente puedes regalarnos una estrella Star
Reemplazar texto con Python
Artículos
Python

Eliminar etiquetas HTML con Python

Creado: 14/Oct/2023 Actualizado: 12/Oct/2023

Seguro que más de una vez te has encontrado una cadena de texto con código HTML de la que quieres extraer las etiquetas HTML para quedarte solo con el contenido y así poder procesarlo. Pues aquí llega Python al rescate, ya que eliminar etiquetas HTML con Python es algo realmente sencillo.

La idea es la siguiente, imagina que partimos de la siguiente cadena con texto y elementos HTML:

codigo_html = "<div><span>Esto es una cadena en <strong>negrita</strong></span></div>"

Lo primero será saber cómo puedo localizar las etiquetas HTML dentro de la cadena y luego eliminarlas. Como las etiquetas HTML se identifican claramente por delimitarse entre los símbolos de menor < y mayor > vamos a recurrir a un módulo que trabaje con expresiones regulares, en este caso el módulo re de Python.

Y es que el módulo re de Python tiene un método que se llama .sub() el cual permite realizar reemplazos de cadenas buscando un patron. La sintaxis del método .sub() es la siguiente:

re.sub(pattern, repl, string, count=0, flags=0)

Lo que vemos es que los parámetros que espera son pattern que contendrá la expresión regular de la búsqueda, repl que es el texto con el que queremos sustituir el patrón y string que es la cadena sobre la cual queremos realizar la búsqueda y sustitución.

Así que la idea será utilizar este método .sub() para poder realizar la búsqueda de las etiquetas HTML y reemplazarlo por una cadena vacía, lo cual implicará su eliminación.

Pero, ¿cuál es el patrón para poder detectar un elemento HTML? Pues ya hemos dicho que los elementos HTML se caracterizan por empezar por un símbolo menor y acabar con un símbolo mayor, con cualquier contenido dentro de ellos, ya que la verdad no nos importa saber qué tipo de elemento es. Por lo tanto podemos definir el patrón para poder buscar elementos HTML de la siguiente manera:

<.*?>

En esta expresión regular vemos los símbolos de menos y mayor pero dentro utilizamos otros símbolos como son: el punto (.) para indicar que puede ser cualquier carácter, el asterisco (*) Para indicar que ese carácter puede aparecer 0 o n veces y el símbolo de cierre de interrogación (?) para soportar si hay una o más repeticiones de la misma cadena.

Con todo esto ya podemos invocar a nuestro método .sub() con el patrón descrito anteriormente y sustituyéndolo con una cadena vacía. El código sería el que vemos a continuación:

re.sub('<.*?>','',codigo_html)

De esta manera, el resultado de la operación será el siguiente:

💡 Esto es una cadena en negrita

Una línea de código muy sencilla, la cual estoy convencido que utilizarás muchas veces para poder eliminar etiquetas HTML con Python.

Código Fuente

Descárgate el código fuente de Eliminar etiquetas HTML con Python
Y si te ha gustado nuestro código fuente puedes regalarnos una estrella Star
Eliminar etiquetas HTML con Python