由于字符串字符无效,Fontawesome 无法更改 class
Fontawesome can't change the class because of invalid string characters
const toggleDarkOrLight = document.getElementsByTagName('i')[0];
var toggled = false;
const toggle = () => {
if (toggled === false) {
toggleDarkOrLight.classList.remove('fa fa-toggle-off');
toggleDarkOrLight.classList.add('fa fa-toggle-on');
} else {
toggleDarkOrLight.classList.remove('fa fa-toggle-on');
toggleDarkOrLight.classList.add('fa fa-toggle-off');
}
}
<html>
<head>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
</head>
<body>
<i class="fa fa-toggle-off" onclick="toggle()"></i>
</body>
<html>
为什么我不能更改 class?是不是因为“-”字
那我应该尝试什么?
此外,我怎样才能像流畅的动画一样打开和关闭开关(或者我不能?)
不,是 space。 classList.add
/.remove
期望单个 class 名称和 class 名称可能不包含 space。为了 add/remove 多个 classes,但它们在不同的参数中:
toggleDarkOrLight.classList.remove('fa', 'fa-toggle-off');
toggleDarkOrLight.classList.add('fa', 'fa-toggle-on');
(或者只留下 fa
,因为您既要添加又要删除它。)
干扰的是 space(
)!
既然你添加和删除了 fa
class,那就顺其自然吧。
也就是说,考虑使用 classList.contains
来检查 class 您想要切换。
const toggleDarkOrLight = document.getElementsByTagName('i')[0];
const toggle = () => {
if (toggleDarkOrLight.classList.contains('fa-toggle-off')) {
toggleDarkOrLight.classList.remove('fa-toggle-off');
toggleDarkOrLight.classList.add('fa-toggle-on');
} else {
toggleDarkOrLight.classList.remove('fa-toggle-on');
toggleDarkOrLight.classList.add('fa-toggle-off');
}
}
<html>
<head>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
</head>
<body>
<i class="fa fa-toggle-off" onclick="toggle()"></i>
</body>
<html>
您实际上根本不想切换 fa
部分。您只想切换 fa-toggle-off/on
部分。您的代码应如下所示:
const toggleDarkOrLight = document.getElementsByTagName("i")[0];
var toggled = false;
const toggle = () => {
if (toggled === false) {
toggleDarkOrLight.classList.remove("fa-toggle-off");
toggleDarkOrLight.classList.add("fa-toggle-on");
toggled = true;
} else {
toggleDarkOrLight.classList.remove("fa-toggle-on");
toggleDarkOrLight.classList.add("fa-toggle-off");
toggled = false;
}
};
<html>
<head>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
</head>
<body>
<i class="fa fa-toggle-off" onclick="toggle()"></i>
</body>
<html>
const toggleDarkOrLight = document.getElementsByTagName('i')[0];
var toggled = false;
const toggle = () => {
if (toggled === false) {
toggleDarkOrLight.classList.remove('fa fa-toggle-off');
toggleDarkOrLight.classList.add('fa fa-toggle-on');
} else {
toggleDarkOrLight.classList.remove('fa fa-toggle-on');
toggleDarkOrLight.classList.add('fa fa-toggle-off');
}
}
<html>
<head>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
</head>
<body>
<i class="fa fa-toggle-off" onclick="toggle()"></i>
</body>
<html>
为什么我不能更改 class?是不是因为“-”字
那我应该尝试什么?
此外,我怎样才能像流畅的动画一样打开和关闭开关(或者我不能?)
不,是 space。 classList.add
/.remove
期望单个 class 名称和 class 名称可能不包含 space。为了 add/remove 多个 classes,但它们在不同的参数中:
toggleDarkOrLight.classList.remove('fa', 'fa-toggle-off');
toggleDarkOrLight.classList.add('fa', 'fa-toggle-on');
(或者只留下 fa
,因为您既要添加又要删除它。)
干扰的是 space(
)!
既然你添加和删除了 fa
class,那就顺其自然吧。
也就是说,考虑使用 classList.contains
来检查 class 您想要切换。
const toggleDarkOrLight = document.getElementsByTagName('i')[0];
const toggle = () => {
if (toggleDarkOrLight.classList.contains('fa-toggle-off')) {
toggleDarkOrLight.classList.remove('fa-toggle-off');
toggleDarkOrLight.classList.add('fa-toggle-on');
} else {
toggleDarkOrLight.classList.remove('fa-toggle-on');
toggleDarkOrLight.classList.add('fa-toggle-off');
}
}
<html>
<head>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
</head>
<body>
<i class="fa fa-toggle-off" onclick="toggle()"></i>
</body>
<html>
您实际上根本不想切换 fa
部分。您只想切换 fa-toggle-off/on
部分。您的代码应如下所示:
const toggleDarkOrLight = document.getElementsByTagName("i")[0];
var toggled = false;
const toggle = () => {
if (toggled === false) {
toggleDarkOrLight.classList.remove("fa-toggle-off");
toggleDarkOrLight.classList.add("fa-toggle-on");
toggled = true;
} else {
toggleDarkOrLight.classList.remove("fa-toggle-on");
toggleDarkOrLight.classList.add("fa-toggle-off");
toggled = false;
}
};
<html>
<head>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
</head>
<body>
<i class="fa fa-toggle-off" onclick="toggle()"></i>
</body>
<html>