Toggle font awesome class on button click

后端 未结 7 669
心在旅途
心在旅途 2020-12-31 22:37

I have the code as here in this jsfiddle, I want the font awesome icon to change on button click using javascript, but it does\'nt seem to work. I\'m new to javascript so pl

7条回答
  •  青春惊慌失措
    2020-12-31 23:26

    When using jQuery you never need to use an inline attribute eventHandler.

    onclick=

    • Demo 1 uses jQuery .toggleClass()

    • Demo 2 uses JavaScript .classList.toggle()

    • Demo 3 uses CSS :checked pseudo-class

    Update v4 to v5: Go to Start | Font Awesome. There are some class changes as well. See Demo 4.

    Demo 1 -- jQuery

    $('button').on('click', fav);
    
    function fav(e) {
      $(this).find('.fa').toggleClass('fa-star-o fa-star');
    }
    :root {
      font: 400 16px/1.5 Verdana;
    }
    
    button {
      display: inline-block;
      font: inherit;
      padding: 0px 5px;
      cursor: pointer;
    }
    
    button::after {
      content: ' Favorite'
    }
    
    
    
    
    

    Demo 2 -- Plain JavaScript

    document.querySelector('button').addEventListener('click', fav);
    
    function fav(e) {
      const tgt = e.target.firstElementChild;
      tgt.classList.toggle('fa-star');
      tgt.classList.toggle('fa-star-o');
    }
    :root {
      font: 400 16px/1.5 Verdana;
    }
    
    button {
      display: inline-block;
      font: inherit;
      padding: 0px 5px;
      cursor: pointer;
    }
    
    button::after {
      content: ' Favorite'
    }
    
    
    

    Demo 3 -- Pure CSS

    :root {
      font: 400 16px/1.5 Verdana;
    }
    
    #fav {
      display: none
    }
    
    #fav+label {
      display: inline-block;
      border: 2px outset grey;
      padding: 0px 5px;
      cursor: pointer;
      -webkit-appearance: button;
      -moz-appearance: button;
      appearance: button;
    }
    
    #fav+label::after {
      content: ' Favorite'
    }
    
    #fav+label>.fa-star-o {
      display: inline-block
    }
    
    #fav+label>.fa-star {
      display: none;
    }
    
    #fav:checked+label>.fa-star-o {
      display: none;
    }
    
    #fav:checked+label>.fa-star {
      display: inline-block
    }
    
    
    
    

    Demo 4 -- Font Awesome 5

    jQuery / JavaScript / CSS

    /* #1 jQuery */
    $('button.jq').on('click', jQFav);
    function jQFav(e) {
      $(this).find('.fa-star').toggleClass('fas far');
    }
    
    /* #2 JavaScript */
    document.querySelector('button.js').addEventListener('click', JSFav);
    function JSFav(e) {
      const tgt = e.target.firstElementChild;
      tgt.classList.toggle('far');
      tgt.classList.toggle('fas');
    }
    /* #1 JS / #2 jQ */
    :root {
      font: 400 16px/1.5 Verdana;
    }
    
    button {
      display: inline-block;
      font: inherit;
      padding: 0px 5px;
      cursor: pointer;
    }
    
    button::after {
      content: ' Favorite'
    }
    
    /* #3 CSS */
    
    #fav {
      display: none
    }
    
    #fav+label {
      display:inline-block;
      border: 2px outset grey;
      padding: 0px 5px;
      cursor: pointer;
      -webkit-appearance: button;
      -moz-appearance: button;
      appearance: button;
    }
    
    #fav+label::after {
      content: ' Favorite'
    }
    
    #fav+label>.far {
      display: inline-block;
    }
    
    #fav+label>.fas {
      display: none;
    }
    
    #fav:checked+label>.far {
      display: none;
    }
    
    #fav:checked+label>.fas {
      display: inline-block
    }
    
    
    
    1. jQuery
    2. Plain JavaScript
    3. Pure CSS

提交回复
热议问题