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