【发布时间】:2022-02-13 08:21:04
【问题描述】:
我正在尝试使用原生 JavaScript 创建选项卡,每个选项卡在链接内都有一个图标和一个标题
<div class="tabs-bar-item">
<a href="#tab3">
<img class="icon" src="img/school.png">
<h3 class="title">Instruktāžas datu aizsardzībā</h3>
</a>
</div>
它应该打开标签内容
<div id="tab3" class="tabs-content-item">
问题是当我在链接中有<img> 和<h3> 元素时,.getAttribute("href"); 返回 null。
如果我将标签更改为
<div class="tabs-bar-item">
<img class="icon" src="img/school.png">
<a href="#tab3">Instruktāžas datu aizsardzībā</a>
</div>
但我希望在单击.tabs-bar-item 的任意位置时打开选项卡内容。如何在 vanilla JavaScript 中完成?
完整的JS代码:
let tabs = document.querySelectorAll('.tabs-bar .tabs-bar-item');
function tabClicks(tabClickEvent) {
for (let i = 0; i < tabs.length; i++) {
tabs[i].classList.remove("active");
}
let clickedTab = tabClickEvent.currentTarget;
clickedTab.classList.add("active");
tabClickEvent.preventDefault();
let contentPanes = document.querySelectorAll('.tabs-content-item');
for (i = 0; i < contentPanes.length; i++) {
contentPanes[i].classList.remove("active");
}
let anchorReference = tabClickEvent.target;
let activePaneId = anchorReference.getAttribute("href");
let activePane = document.querySelector(activePaneId);
activePane.classList.add("active");
}
for (i = 0; i < tabs.length; i++) {
tabs[i].addEventListener("click", tabClicks)
}
标签内容的CSS:
.tabs-content .tabs-content-item {
display: none;
}
.tabs-content .tabs-content-item.active {
display: block;
}
【问题讨论】:
-
如果您使用#fragment URLs 进行标签导航,您可以在纯CSS 中使用:target 伪类执行此操作。但仅供参考,您的代码不起作用,因为
tabClickEvent.currentTarget可能是链接的后代,而不是链接本身。 -
@Touffy 我相信你的意思是
.target而不是.currentTarget。.target将始终是实际点击的元素 - 可能是 img 或 h3 这里。.currentTarget,根据定义,将是处理程序实际附加到的元素,这里是链接周围的 div。 (当然没有 href,但公平地说,这不是 OP 试图获得的 href。) -
我猜你的目标元素在这里是错误的。您可以使用
debugger调试它或尝试使用console.log(anchorReference);来找出问题。 -
好的,谢谢罗宾。
标签: javascript html image href getattribute