类型“ HTMLElement”上不存在属性“ length”

时间:2018-12-11 17:40:12

标签: javascript typescript angular6

我正在尝试遍历我所拥有的导航项目的数量。但是,当我这样做时,出现错误:属性'length'在类型'HTMLElement'上不存在。我知道我可以将document.getElementById('nav-item)更改为document.getElementsByClassName('nav-item'),错误消失了。但是我不是想这样做。我正在通过其ID访问元素。谁能帮我这个忙吗?

const header = document.getElementById('applicationLinks');
const navItems = document.getElementById('nav-item');
for (let i = 0; i < navItems.length; i++) {
    navItems[i].addEventListener('click', function () {
      const current = document.getElementsByClassName('active');
      current[0].className = current[0].className.replace('active', '');
      this.className += ' active';
    });
}

谢谢您,我是新手,所以我们将不胜感激。

1 个答案:

答案 0 :(得分:1)

您的问题是for循环。

代码

const navItems = document.getElementById('nav-item');

不返回元素数组。它返回一个对象。

因此删除for循环。

尝试一下

const header = document.getElementById('applicationLinks');
const navItems = document.getElementById('nav-item');

navItems.addEventListener('click', function () {
      const current = document.getElementsByClassName('active');
      current[0].className = current[0].className.replace('active', '');
      this.className += ' active';
    });
}

如果将navItems更改为document.getElementsByClassName('nav-item'); 然后,您将获得对象数组。这将使for循环起作用。