Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript If语句不使用classList add_Javascript_Html_Css_Arrays_Ecmascript 6 - Fatal编程技术网

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)) {