Javascript 从没有jquery的元素组中删除特定类

Javascript 从没有jquery的元素组中删除特定类,javascript,Javascript,我有多个span元素,我试图删除activeLang类。 我该怎么做 <div class="header_content_lang"> <span class="langNav"> ... </span> <span class="langNav"> ... </span> <span class="langNav activeLang">

我有多个span元素,我试图删除activeLang类。 我该怎么做

<div class="header_content_lang">
    <span class="langNav">
        ...
    </span>
    <span class="langNav">
        ...
    </span>
    <span class="langNav activeLang">
        ...
    </span>
</div>
但所有日志的输出都未定义。

删除。从类名开始

el.classList.remove("activeLang");
window.onload=函数{ var x=document.getElementsByClassNameactiveLang; console.logx[0];//将打印对象 []forEach.callx,functionel{ el.classList.removeactiveLang; }; console.logx[0];//将不再打印该对象 }; ... ... ...
代码中有几个输入错误:在类activeLang的名称中加了一个点,在getElementsByClassName和remove中不需要

假设您修复了输入错误,您的console.log中仍然没有定义。原因有两个:

列表的长度最多可以解释为什么x[1]和x[2]没有定义。 GetElementsByCassName返回找到的元素的实时HTMLCollection,因此,即使在执行移除类之前列表中有一个元素,但当您实际移除它时,长度将为零,因此x[0]也未定义。
希望这能澄清问题。

在现代最新浏览器上,您可以在继承querySelectorAll返回的节点列表的HTMLCollection上使用:

在旧浏览器上,您需要对其进行多边形填充,您可以这样做:

if (!NodeList.prototype.forEach) {
    Object.defineProperty(NodeList.prototype, "forEach", {
        value: Array.prototype.forEach
    });
}
您可能还需要使用polyfill进行填充

在真正过时的浏览器IE8上,您必须首先使用polyfill和classList


或者使用所描述的任何类似数组的循环机制。

我还有一个离题的问题,我不想为此创建额外的问题,有人能告诉我如何将类添加到一个元素中吗?x[2].className=MyClass;不work@EdwardBlack使用classlist的add方法
document.querySelectorAll(".activeLang").forEach(function(element) {
    element.classList.remove("activeLang");
});
if (!NodeList.prototype.forEach) {
    Object.defineProperty(NodeList.prototype, "forEach", {
        value: Array.prototype.forEach
    });
}