viernes, 23 de agosto de 2019

jQuery: hasClass, addClass, removeClass

Podemos trabajar con clases en jQuery con estos tres métodos.
  • hasClass   devuelve true o false según exista o no la clase sobre la que estamos preguntando
  • addClass   añade la clase que indiquemos
  • revomeClass elimina la clase que indiquemos
En el siguiente enlace se encuentra el caso práctico disponible.

HTML

Comenzamos con una página con dos h1, dos párrafos y un botón.
antes de pulsar el botón
Tenemos dos h1 con id diferentes como es lógico y con una clase común denominada 'mititulo'.

 <!DOCTYPE html>  
 <html>  
  <head>  
   <meta charset="utf-8">  
   <title>jQuery seleccionando</title>  
   <script src="https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>  
   <script type="text/javascript" src="script.js"></script>  
  </head>  
  <body>  
   <h1 id="titulo1" class="mititulo">Congreso</h1>  
   <p id="parrafo1">Párrafo uno.</p>  
   <h1 id="titulo2" class="mititulo">Senado</h1>  
   <p id="parrafo2">Párrafo dos.</p>  
   <hr>  
   <br>  
   <button id="boton">Púlsame</button>  
  </body>  
 </html>  

JavaScript + jQuery

Al pulsar el botón cambia el CSS de la página y en consola vemos algunas frases.

después de pulsar el botón

Consola después de pulsar el botón
En la línea 7 tenemos un código que permite centrar y poner con fondo amarillo aquellos elementos cuya clase sea 'mititulo'. Estos elementos son los dos h1: Congreso y Senado.

Nos metemos en un condicional if en el que la condición se cumple si el elementos que tiene el id='titulo1' tiene además la clase 'mititulo'. Este elemento es el primer h1 si si cumple ambos requisitos.

Al ser la condición true lo que se produce es que removemos la clase 'mititulo' del elemento cuyo id es 'titulo1'. Esto es, eliminamos la clase del primer h1

 // hasClass   devuelve true o false según tenga o no cierta clase  
 // addClass   añade un clase  
 // removeClass elimina una clase  
 'use strict'  
 $(function(){   
  $("#boton").click( function() {  
   $('.mititulo').css({'background':'yellow','text-align':'center'})  
   if ($('#titulo1').hasClass('mititulo')){  
    console.log("Si tiene la clase mititulo");  
    $('#titulo1').removeClass('mititulo');  
    console.log("Comprobemos que hemos eliminado la clase del primer h1");  
    console.log("La clase del 1º h1 es: "+$('h1').eq(0).attr('class'));  
    console.log("La clase del 2º h1 es: "+$('h1').eq(1).attr('class'));  
    console.log("Comprobado: la clase del 1er h1 ha sido removida.");  
   }else{  
    console.log("No tiene la clase mititulo");  
    $('#titulo1').removeClass();  
    $('#titulo1').addClass('tituloprincipal');  
    console.log("La clase del 1er h1 es: "+$('h1').eq(0).attr('class'));  
   }  
  });  
 });  

Como el condicional if también tiene un else y queremos ver que sucede cuando la condición no se cumple, lo que haremos es añadir una x a la clase del primer h1, suponiendo que hos hemos equivocado al escribir su clase en el código html. En la siguiente imagen se ve cómo nos hemos equivocado añadiendo esa x adicional a la clase del primer h1.


En este caso lo que vemos por pantalla al pulsar el botón es la siguiente imagen.

Cometiendo un error en la clase del primer h1
y después de pulsar el botón
En este caso únicamente el Senado queda señalado en amarillo y centrado ya que la clase del primer h1 no es 'mititulo' sino 'mititulox' al haber cometido un error en el código html.

Lo que vemos ahora es que por consola se arrojan la siguientes líneas.


Añadir una clase sin haber removido la previa

¿Qué sucede si ya existe una clase previa en el h1 y sin removerla añadimos otra?

He realizado esta comprobación y lo que se obtiene es que la nueva clase esta formada por la siguiente expresión:

clase original + un espacio vacio + nueva clase

Veamos una imagen con el resultado.

pulsando F12 vemos el Inspector de Firefox
Lo que está sucediendo es que se pueden tener dos o más clases, como en CSS donde se pueden aplicar varias clases. Vea, por ejemplo, esta entrada: Añadir varias clases CSS en un solo elemento HTML.

Ejercicio propuesto


  • En el código html indique la clase del primer h1 es 'mititulox'. Esto supone, que nos hemos equivocado al escribir la clase y que hemos añadido la x final.
  • En el código JS después del else comente la línea que remueve la clase.
  • Muestre en consola tres líneas donde se pregunte si en el primer h1 existen las clases:

    • .mititulo
    • .mititulox
    • .tituloprincipal
La respuesta que verá en consola debería ser la siguiente.


¿Lo ha resuelto empleando .hasClass?

No hay comentarios:

Publicar un comentario