.apply在使用classList.remove时抛出异常

时间:2018-03-08 09:46:26

标签: javascript dom domtokenlist

我正在尝试某些事情并面对这个问题。当您尝试执行element.classList.remove.apply时,会抛出错误:

  

未捕获的TypeError:非法调用

您可以使用以下代码段进行测试。

var div = document.querySelector('.test');
var classesToRemove = ['test1', 'test2', 'test3'];
div.classList.remove.apply(div, classesToRemove);
.test {
  width: 100px;
  height: 100px;
}

.test1 {
  color: blue
}

.test2 {
  background: gray;
}

.test3 {
  border: 1px solid gray;
}
<div class='test test1 test2 test3'>Test</div>

注意:我知道我可以使用扩展运算符(...)来解决这个问题,但我更感兴趣的是理解为什么会失败。

1 个答案:

答案 0 :(得分:2)

你也可以在这里使用Function.prototype.apply,但是调用的正确上下文是div.classList对象,而不是HTMLElement div本身。

试试这个:

&#13;
&#13;
var div = document.querySelector('.test');
var classesToRemove = ['test1', 'test2', 'test3'];
div.classList.remove.apply(div.classList, classesToRemove);
&#13;
.test {
  width: 100px;
  height: 100px;
}

.test1 {
  color: blue
}

.test2 {
  background: gray;
}

.test3 {
  border: 1px solid gray;
}
&#13;
<div class='test test1 test2 test3'>Test</div>
&#13;
&#13;
&#13;