javascript - Vanilla JS TypeError:无法读取属性
问题描述
我有一个带有徽标和导航的标题,其中有一个显示在较小视口上的菜单切换链接。我正在尝试使用 Vanilla JS 来实现这一点,因为我想摆脱 jQuery。
当我单击菜单切换链接时,出现此错误:未捕获的类型错误:Cannot read property 'className' of null at HTMLLIElement.<anonymous> (ignition.js:6) (anonymous) @ ignition.js:6
我目前正在学习 Vanilla JS,但我在理解这意味着什么以及错误可能在哪里时遇到了一些麻烦。
const navToggle = document.querySelector(".nav-toggle");
navToggle.addEventListener("click", (event) => {
const navItem = event.currentTarget.querySelector(".nav-item");
if (navItem.className.includes("active")) {
navItem.className.remove("active");
event.target.find("a").innerHTML("<i class='fas fa-bars'></i>");
} else {
navItem.className.add("active");
event.target.find("a").innerHTML("<i class='fas fa-times'></i>");
}
});
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.11.2/css/all.min.css">
<nav class="navbar">
<div class="container">
<ul class="nav-menu">
<li class="nav-logo"><a href="#"> Ignition <small>Beta</small></a></li>
<li class="nav-item"><a href="#">Home</a></li>
<li class="nav-item"><a href="#">Documentation</a></li>
<li class="nav-item"><a href="#">Theme</a></li>
<li class="nav-item"><a href="#">Blog</a></li>
<li class="nav-toggle"><a href="#"><i class="fas fa-bars"></i></a></li>
</ul>
</div>
</nav>
解决方案
也许这是实现您想要的代码:单击“导航切换”图标时:
- 切换
active
所有导航项 - 导航切换的切换图标
const navToggle = document.querySelector(".nav-toggle");
navToggle.addEventListener("click", (event) => {
// toggle icon
const curIcon = document.querySelector('.nav-toggle a i')
curIcon.classList.toggle('fa-bars')
curIcon.classList.toggle('fa-times')
// toggle active of nav-items
const navItems = document.getElementsByClassName('nav-item')
for (const navItem of navItems) {
navItem.classList.toggle('active')
}
});
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.11.2/css/all.min.css">
<nav class="navbar">
<div class="container">
<ul class="nav-menu">
<li class="nav-logo"><a href="#"> Ignition <small>Beta</small></a></li>
<li class="nav-item"><a href="#">Home</a></li>
<li class="nav-item"><a href="#">Documentation</a></li>
<li class="nav-item"><a href="#">Theme</a></li>
<li class="nav-item"><a href="#">Blog</a></li>
<li class="nav-toggle"><a href="#"><i class="fas fa-bars"></i></a></li>
</ul>
</div>
</nav>
推荐阅读
- sparql - 如何在 sparql 中使用 kleene 星号运算符 (*) 或其变体 (+) 和变量?
- cuda - 在Anaconda中使用Pytorch-GPU时,是不是不需要安装CUDA?
- types - 如何检查球拍中的类型?
- google-sheets - 用于将列复制到新工作表上的行的脚本,带有每日日志的时间戳
- spring - Spring Boot 2.1.0 和 Java 11 上的 Spring Data Redis 无法正常工作
- xamarin - Xamarin Forms Prism:INavigationService 是否必须在构造函数中传递?除了构造函数注入之外的任何其他方式
- c++ - 在 C++ 中找不到窗口
- html - 使 Image 溢出 hero 元素并对齐到右下角
- x86-64 - 四舍五入寄存器最多为 8 的倍数
- google-app-engine - 如何从命令行列出和删除 GCP AppEngine 图像?