如何通过class(纯CSS)切换字体真棒图标

How to toggle font awesome icon via class (pure CSS)

我正在做一个小项目,该项目将有一个 light/dark 模式切换,但我正在努力切换标签上的 class。

所以我为图标使用了很棒的字体这是我的代码:

HTML:

<i class="fas fa-moon" id="toggle"></i>

JS:

    function classToggle() {
        document.getElementById("toggle").classList.toggle('fas fa-moon');
        document.getElementById("toggle").classList.toggle('fas fa-sun');
    }

    document.querySelector('#toggle').addEventListener('click', classToggle);

上面的代码给我报错:

InvalidCharacterError: The string contains invalid characters.

JS我也试过:

    function classToggle() {
        this.classList.toggle('fas fa-moon');
        this.classList.toggle('fas fa-sun');
    }

    document.querySelector('#toggle').addEventListener('click', classToggle);

但这也不起作用并给我错误:

TypeError: undefined is not an object (evaluating 'this.classList.toggle')

我从 https://codepen.io/jacknifey/pen/XWJaKZr 那里得到了上面的代码并且它工作得很好,但是当我将 class 名称更改为很棒的字体后它就停止工作了。也许这与 SVG 相关。如果是这样,谁能建议一种替代方法。

保持安全 谢谢,杰米 :)

您不需要将 fas 放入 classList.toggle 方法。

function classToggle() {
  document.getElementById("toggle").classList.toggle('fa-moon');
  document.getElementById("toggle").classList.toggle('fa-sun');
}

document.querySelector('#toggle').addEventListener('click', classToggle);
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.13.0/css/all.min.css" rel="stylesheet" />
<i class="fas fa-moon" id="toggle"></i>