【发布时间】:2017-03-27 21:12:44
【问题描述】:
我有一个这样的元素:
<span class="util bg-color-yellow tooltip bg-color-red"></span>
我想删除所有以“bg-color-”开头的类,所以我只需循环遍历所有类,然后删除匹配的类:
var element = document.getElement......;
var elementClasses = element.classList;
for( var i = 0, l = elementClasses.length; i < l; i++ )
{
var className = elementClasses[i];
// console.log(i);
// console.log(name);
if( className.startsWith('bg-color-') )
{
element.classList.remove(className);
}
console.log('elementClasses contain :');
console.log(elementClasses);
}
当它匹配 'bg-color-' 类时,它成功删除了类名,但它也会编辑变量 elementClasses,就好像它是对 element.classList 的引用一样,即使它是一个变量(副本)它。
第一个循环:
elementClasses = [ util bg-color-yellow tooltip bg-color-red ]
第二个循环:
elementClasses = [ util bg-color-yellow tooltip bg-color-red ]
第三次循环:
elementClasses = [ util tooltip bg-color-red ]
问题出现了! elementClasses 的修改时间与 elemnt.classList 的修改时间相同!
- 这怎么可能?
- 实际上
elementClasses是element.classList的一种引用吗? -
elementClasses是否在每次修改element.classList时都自行重新创建?
.
非常感谢! :)
【问题讨论】:
-
所以向后循环
-
不要使用
for (/*...*/) {/*...*/}循环,而是使用[...elementClasses].forEach(/*...*/)]
标签: javascript loops dom