如何用纯JavaScript取代jQuery的toggleClass方法?

前端之家收集整理的这篇文章主要介绍了如何用纯JavaScript取代jQuery的toggleClass方法?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

如何将这段jQuery代码转换为JavaScript

  1. $('#element').click(function(){
  2. $(this).toggleClass('class1 class2')
  3. });

我已经尝试过以下代码,但无济于事.

第一个是:

  1. var element = document.getElementById('element'),classNum = 0; // Supposing I know that the first time there will be that class
  2. element.onmousedown = function() {
  3. if (classNum === 0) {
  4. this.classList.remove("class1");
  5. this.classList.add("class2");
  6. classNum = 1;
  7. }
  8. else if (classNum === 1) {
  9. this.classList.remove("class2");
  10. this.classList.add("class1");
  11. classNum = 0;
  12. }
  13. }

第二个是:

  1. var element = document.getElementById('element'),classNum = 0; // Supposing I know that the first time there will be that class
  2. element.onmousedown = function() {
  3. if (classNum === 0) {
  4. this.className -= "class1";
  5. this.classList += "class2";
  6. classNum = 1;
  7. }
  8. else if (classNum === 1) {
  9. this.classList -= "class2";
  10. this.classList += "class1";
  11. classNum = 0;
  12. }
  13. }

任何不建议我坚持使用jQuery的答案将不胜感激.

[编辑]

我已经尝试了所有的解决方案,但未能做到正确.我相信这是因为我没有明确说明该元素有多个类,如下所示:

  1. class="class1 class3 class4"

我想要的基本上是用class2替换class1并在它们之间切换.

最佳答案
更新:
作为对注释的回应,classList.toggle是一个纯粹的JavaScript解决方案.正如一条评论所暗示的,它与jQuery无关.如果需要支持旧版本的IE,则在下面的MDN链接上有一个垫片(pollyfill).如果需要,这个垫片远远优于公认的答案.

使用classList.toggle肯定是最简单的解决方案.另请参阅Can I Use classList获取浏览器支持.

  1. element.onclick = function() {
  2. 'class1 class2'.split(' ').forEach(function(s) {
  3. element.classList.toggle(s);
  4. });
  5. }

运行代码段尝试

  1. Box.onclick = function() {
  2. 'class1 class2'.split(' ').forEach(function(s) {
  3. Box.classList.toggle(s);
  4. stdout.innerHTML = Box.className;
  5. });
  6. }
  7. /* alternative
  8. Box.onclick = function() {
  9. ['class1','class2'].forEach(function(s) {
  10. Box.classList.toggle(s);
  11. stdout.innerHTML = Box.className;
  12. });
  13. }
  14. */
  1. .class1 { background-color: red;}
  2. .class2 { background-color: blue;}
  3. .class3 { width: 100px; height: 100px; border: 1px black solid;}
  1. click me:
  2. Box" class="class1 class3">

猜你在找的jQuery相关文章