Javascript If语句不使用classList add
我正在制作一个导航栏,并希望在我位于特定页面时添加“活动”类Javascript If语句不使用classList add,javascript,html,css,arrays,ecmascript-6,Javascript,Html,Css,Arrays,Ecmascript 6,我正在制作一个导航栏,并希望在我位于特定页面时添加“活动”类 下面的代码不会破坏if语句(用注释显示) .主动{ 颜色:红色; } aaa var navClass=document.getElementsByClassName(“资产净值项目”); var path=window.location.href; 对于(i=0;i
下面的代码不会破坏if语句(用注释显示)
.主动{
颜色:红色;
}
aaa
var navClass=document.getElementsByClassName(“资产净值项目”);
var path=window.location.href;
对于(i=0;i”+路径;
您需要更改检测方式和添加方式。也要使navClass
成为数组,而不是节点列表:
var navClass = Array.prototype.slice.call(document.getElementsByClassName("nav-item"));
var path = window.location.href;
navClass.forEach(elem => {
if (path.includes(elem.href)) {
elem.classList.add("active");
}
});
您正在使用的变量的格式与您的代码所暗示的略有不同 如果打开控制台并访问window.location.href变量,您将看到它包含完整有效的URL,而不是导航中链接遵循的相对格式,因此您的绝对测试(==)每次都会失败,因为它们永远不会相等
https://stackoverflow.com/questions/54508836/if-statement-not-working-with-classlist-add
不等于
if-statement-not-working-with-classlist-add
您可以通过使导航链接成为绝对链接来解决问题,但这将给您带来更多问题
如果将测试从比较这两个变量更改为在path变量中查找导航的href,则代码将正常工作。此外,您需要针对对象的href属性而不是对象本身进行测试
更改:
if (navClass[i] === path) {
致:
已编辑:忘记将.href属性添加到建议的更改中是可编辑的,因此仅转换为forEach不可用的数组。;-)这并没有解决主要问题,即将相对url和完整url与
==
进行比较。您是希望路径具有完整的绝对url,还是真正希望路径(例如lib/b.html
),如果是后者,则:window.location.pathname
if (path.includes(navClass[i].href)) {