javascript - 多个 id 和类共享 AddEventListener
问题描述
我正在尝试做的是将相同的导航栏 ID 和类链接到单个事件侦听器中。这适用于对不同页面具有不同样式的博客。两个 ids/classes 完全相同,具有相似的名称(除了一些小的 css 更改)。任何一组 ids/classes 都可以自己工作( menuNav 或 menuNav-c )。复制、粘贴相同的代码然后更改变量、函数并在末尾添加“-c”也不起作用,这自然是过多的代码。任何帮助表示赞赏。
let openCloseNav = document.querySelectorAll("#openCloseNav", "#openCloseNav-c");
let menuNav = document.querySelectorAll("#menuNav", "#menuNav-c");
openCloseNav.addEventListener("click", openCloseNavClick);
function openCloseNavClick() {
openCloseNav.classList.toggle("toggle toggle-c");
menuNav.classList.toggle("navOpen navOpen-c");
}
控制台调出“openCloseNav”不是一个函数。但是,如果我删除第一组或第二组 ids/classes,则只有一组有效。
编辑
我搞定了,谢谢大家的帮助。经过更多的挖掘和修补,这一切都开始变得更有意义了。对于那些可能有类似问题的人,这对我有用:
let firstMenuToggle = document.querySelectorAll("#openCloseNav");
let firstMenu = document.querySelectorAll("#menuNav");
for (let i = 0; i < firstMenuToggle.length; i++) {
firstMenuToggle[i].addEventListener("click", function() {
firstMenuToggle[i].classList.toggle("toggle");
firstMenu[i].classList.toggle("navOpen");
});
}
let secondMenuToggle = document.querySelectorAll("#openCloseNav-c");
let secondMenu = document.querySelectorAll("#menuNav-c");
for (let i = 0; i < secondMenuToggle.length; i++) {
secondMenuToggle[i].addEventListener("click", function() {
secondMenuToggle[i].classList.toggle("toggle-c");
secondMenu[i].classList.toggle("navOpen-c");
});
}
解决方案
querySelectorAll
返回与指定选择器组匹配的文档元素列表。
请在此处查看文档:MDN querySelectorAll
要将事件侦听器添加到您应该使用的所有内容:
openCloseNav.forEach((x) => { x.addEventListener("click", openCloseNavClick)} );
这会将事件侦听器附加到openCloseNav
.
推荐阅读
- javascript - d3数据重塑:数组的属性
- docker - 来自守护进程的错误响应:登录尝试 https://dev.artifactory.com/v2/ 失败,状态为:404 Not Found
- python - Windows Still Image Architecture 基础 Python 图像采集
- python - 用python对数字序列进行分类
- javascript - 超出范围时画布对象不会消失
- jmeter - 使用 JMeter 以不同的格式格式化相同的日期
- c# - 使用 C# 和 WPF 将数据从 SQLite 绑定到 DataGrid
- docusignapi - DocuSign - 授予同意 - 重定向 URI 变量
- php - 使用 IF 的 PHP PDO UPDATE 变量字段
- c# - 即使在中止后重新注册 WCF 端点也“已经存在”