【发布时间】:2017-09-15 21:49:51
【问题描述】:
我想编写一个 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-activeCSS 声明中指定的颜色。 - 当用户单击另一个导航按钮时,活动页面导航按钮的颜色会变为此颜色,而其他导航按钮颜色保持默认。
这可能很简单,但我想不通。
【问题讨论】:
-
你可以试试这个:-
document.getElementsByClassName('navbutton').setAttribute('class','navbutton-active') -
试试这个:document.getElementsByClassName('navbutton').className = "navbutton-active";
-
假设这不是一个单页应用程序,您打算如何检查任何特定页面的哪个链接处于活动状态?您肯定需要将链接的
href与当前URL 进行比较?否则,这应该在呈现页面时在服务器端完成。 -
感谢 Patrick 的建议,进行比较的最佳方法是什么?我想我会使用
if循环?我不知道用什么方法来做当前页面检查。 -
@PaulJacobson,是的,如果在循环中使用 if 将是一种方法。我已经更正了我之前的答案。
标签: javascript css dom-events