我想编写一个JavaScript脚本(不是JQuery,如果可能的话),它会在页面处于活动状态时更改导航按钮的背景颜色。换句话说,当我点击"关于"链接并加载页面,我想要"关于"按钮具有不同的背景颜色,以便用户可以看到他/她所在的页面。
以下是导航链接的HTML:
<nav>
<ul class="navbar">
<li class="navbutton"><a href="../pages/about.php">About</a></li>
<li class="navbutton"><a href="../index.php">Local services</a></li>
<li class="navbutton"><a href="../pages/intercity.php">Intercity Services</a></li>
<li class="navbutton"><a href="../pages/transportcircle.php">Transport Circle Overview</a></li>
<li class="navbutton"><a href="../pages/feedback.php">Feedback</a></li>
</ul>
</nav>
以下是我想在页面处于活动状态时应用的CSS规则:
.navbutton-active {
background-color: rgb(24, 99, 6);
到目前为止,我已经提出了这个脚本,虽然它除了引发错误之外没有做太多事情:
document.getElementsByClassName('navbutton').addEventListener("DOMContentLoaded", btnActive());
function btnActive() {
document.getElementsByClassName('navbutton').classList.add('navbutton-active');
};
这是我在控制台中遇到的错误:
TypeError: document.getElementsByClassName(...).classList is undefined
我瞄准的行为如下:
.navbutton-active
CSS声明中指定的颜色。这可能很简单,但我无法弄清楚。
答案 0 :(得分:0)
我认为第一步是找出哪个链接是具有与当前网址匹配的href
属性的链接。
// Obtain a collection of all links
var buttons = document.querySelectorAll('.navbutton');
var activeButton, button, link, i;
// Iterate through each link to find if its href matches the URL
for (i = 0; (button = buttons[i]); i++) {
link = button.firstElementChild;
// a console.log(link.href, window.location.href)
// might be useful here to ensure the comparisons will work
if (link.href === window.location.href) {
activeButton = button;
break;
}
}
// If a matching link was found, add the active class
if (activeButton) {
activeButton.classList.add('navbutton-active');
}
此URL比较步骤并非万无一失,可能需要改进。如果可以的话,真的应该在服务器端完成。
原始示例中的错误也是由于getElementsByClassName()
返回一个类似数组的集合,在与各个元素的classList
属性接口之前需要迭代它(类似于querySelectorAll) ()在我的解决方案中,但这是较新的API)。
答案 1 :(得分:0)
function btnActive()
{document.getElementById("navbutton").className = "navbutton-active ";}
还要检查是否在上面的函数中使用alert("testing control");
实际调用了btnActive()