html - ¿Cómo puedo agregar y eliminar un ícono de Font Awesome en un evento de clic (Javascript)?

CorePress2024-01-25  9

Estoy intentando escribir código JavaScript que aplicará un ícono de marca FA a un día cuando se haga clic si aún no hay una marca allí, y eliminará la marca si la hay. He escrito un código que añade el icono pero no sé cómo eliminarlo

esto es lo que tengo

HTML y JS:

const days = document.getElementsByClassName('day')
for (let i = 0; i < days.length; i++) {
    days[i].addEventListener('click', function(e){
        const tick = document.createElement('i');
        tick.classList = 'fas fa-check-square fa-4x'
        this.append(tick);
    });    
}
<div class="day">1</div>
<div class="day">2</div>
<div class="day">3</div>
<div class="day">4</div>
<div class="day">5</div>
<div class="day">6</div>
<div class="day">7</div>
<div class="day">8</div>
<div class="day">9</div>
<div class="day">10</div>

Echa un vistazo a toggleCLass()`, se encargará de agregar y eliminar las clases por ti.

 necesita_saber_ahora

28 de marzo de2021 a las 13:40

Vale, ¿sabes cómo puedo seleccionar el icono anidado del objetivo del evento?

- Robin Bell

28/03/2021 a las 13:49

¿Puedes actualizar tu código en los lugares relevantes para que pueda tener una mejor idea de lo que estás preguntando?

 necesita_saber_ahora

28 de marzo de 2021 at 13:53



------------------------------------

Puede verificar si el elemento i ya existe o no; si no existe, cree el elemento y agregue las clases al elemento. Si está presente, elimine el elemento.

Puedes intentarlo de la siguiente manera:

const days = document.getElementsByClassName('day')
for (let i = 0; i < days.length; i++) {
    days[i].addEventListener('click', function(e){        
        if(!this.querySelectorAll('i').length){ // check if i is not exist
          const tick = document.createElement('i');
          this.append(tick);
          tick.classList.add('fas', 'fa-check-square', 'fa-4x'); // add classes
        }
        else{
          var elem = this.querySelector('i');
          elem.parentNode.removeChild(elem); // remove i
        }
        
    })    
}
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
<div class="day">1</div>
<div class="day">2</div>
<div class="day">3</div>
<div class="day">4</div>
<div class="day">5</div>
<div class="day">6</div>
<div class="day">7</div>
<div class="day">8</div>
<div class="day">9</div>
<div class="day">10</div>

0



------------------------------------

Puedes intentar agregar la identificación a tu ícono & verifique la identificación para determinar si existe o no.

const days = document.getElementsByClassName('day')
for (let i = 0; i < days.length; i++) {
  days[i].addEventListener('click', function(e){
    const check_square_icon = `check-square-icon-${i}`
    if(document.contains(document.getElementById(check_square_icon))) {
        document.getElementById(check_square_icon).remove();
    } else {
      const tick = document.createElement('i');
      tick.id = `check-square-icon-${i}`
      tick.classList = 'fas fa-check-square fa-4x'
      this.append(tick);
    }
    
  })    
}

0



------------------------------------

Según tengo entendido, es necesario eliminar la etiqueta <i> si ya se ha agregado. Para hacer esto, verifique la presencia de la etiqueta <div> en la clase actual .día:

if (!this.getElementsByTagName("i").length > 0) { ... }

Si la etiqueta existe, elimínela usando el método removeChild():

this.removeChild(this.getElementsByTagName("i")[0]);

const days = document.getElementsByClassName("day");
for (let i = 0; i < days.length; i++) {
    days[i].addEventListener("click", function (e) {
        if (!this.getElementsByTagName("i").length > 0) {
            const tick = document.createElement("i");
            tick.classList = "fas fa-check-square fa-4x";
            this.append(tick);
        } else {
            this.removeChild(this.getElementsByTagName("i")[0]);
        }
    });
}
<div class="day">1</div>
<div class="day">2</div>
<div class="day">3</div>
<div class="day">4</div>
<div class="day">5</div>
<div class="day">6</div>
<div class="day">7</div>
<div class="day">8</div>
<div class="day">9</div>
<div class="day">10</div>

Su guía para un futuro mejor - libreflare
Su guía para un futuro mejor - libreflare