首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么classList.remove没有工作,而jQuery .removeClass却在工作呢?

为什么classList.remove没有工作,而jQuery .removeClass却在工作呢?
EN

Stack Overflow用户
提问于 2019-02-26 18:04:02
回答 1查看 110关注 0票数 0

我仍然习惯于普通的JavaScript,并创建一组基本的方形div,当单击时,这些div将添加和删除类。我使用的数组将添加其中一个特定的类。单击时,我希望在添加新类之前删除所有这些类。例如,当点击第二个正方形时,'classB‘只会被添加到那个方块中,然后单击其他任何一个就会删除它。

我知道classList.remove必须在classList.add之前,但由于某种原因,它不起作用。我总是收到消息“无法读取未定义的HTMLDivElement.elem.addEventListener属性'remove‘”。

但是,如果我使用jQuery .removeClass,它的工作没有问题。但我宁愿不使用jQuery。

这是片段。您可以看到我正在尝试的classList.remove,它被注释掉了。

代码语言:javascript
复制
const addClass = ['classA','classB','classC','classD'];
const numbers = [0,1,2,3];
const square = document.querySelectorAll('.square');

square.forEach((elem, i) => {

  elem.addEventListener('click', () => {

    //square[i].classList.remove(...addClass)
    $(square).removeClass('classA classB classC classD');

    if (i == numbers[i]) {
      elem.classList.add(addClass[i]);
    }
  });
});
代码语言:javascript
复制
.square {
width: 2rem;
height: 2rem;
background-color: black;
margin: 1rem;
}

.classA { background-color: red; }
.classB { background-color: yellow; }
.classC { background-color: green; }
.classD { background-color: blue; }
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container">
	<div class="square"></div>
	<div class="square"></div>
	<div class="square"></div>
	<div class="square"></div>
</div>

我在这里和其他网站上看过很多其他的问题,但我并没有真正看到。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-26 18:22:42

您要比较的两个方法并不等价:

代码语言:javascript
复制
square[i].classList.remove(...addClass)

将从one元素中删除数组中的所有类。

代码语言:javascript
复制
$(square).removeClass('classA classB classC classD');

将从中删除所有这些类,所有都是正方形。

要在没有jQuery的情况下做到这一点,您可以这样做:

代码语言:javascript
复制
square.forEach(elem => elem.classList.remove(...addClass));

代码语言:javascript
复制
const addClass = ['classA','classB','classC','classD'];
const numbers = [0,1,2,3];
const squares = document.querySelectorAll('.square');
// renamed square to squares so it's more obvious that it is a NodeList and not a single Node

squares.forEach((elem, i) => {

  elem.addEventListener('click', () => {

    squares.forEach(elem => elem.classList.remove(...addClass));

    if (i == numbers[i]) {
      elem.classList.add(addClass[i]);
    }
  });
});
代码语言:javascript
复制
.square {
width: 2rem;
height: 2rem;
background-color: black;
margin: 1rem;
}

.classA { background-color: red; }
.classB { background-color: yellow; }
.classC { background-color: green; }
.classD { background-color: blue; }
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="container">
	<div class="square"></div>
	<div class="square"></div>
	<div class="square"></div>
	<div class="square"></div>
</div>

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54891567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档