【问题标题】:Is it possible to reset an entire class without looping through the elements是否可以在不循环元素的情况下重置整个类
【发布时间】:2018-03-01 18:02:21
【问题描述】:

我有一个 12 个月的日历。当用户点击月份时,我正在调用我的函数 toggleZoom $monthNode.onclick = function(){toggleZoom(this)};

目前我正在使用这个 JS 控制缩放:

function toggleZoom(month) {

var zoomed = window.getComputedStyle(month).zIndex;
var m = document.getElementsByClassName("month");

for(var i = 0; i < m.length; i++)
    {
     m[i].style ='' ;
    }

if (zoomed != 2) {
    month.style = 'transform:scale(1.1,1.1); z-index:2';
    }
}

有没有更简洁的方法(可能是一行代码)将我所有的月份类重置为未缩放而不循环遍历所有 12 个?像 document.getElementsByClassName("month").style=""

【问题讨论】:

    标签: css class reset


    【解决方案1】:

    您可以使用map() 函数在一行中循环遍历您的数组,而无需创建for 循环,如下所示:m.map(function(mo){ mo.style = ''; });

    function toggleZoom(month) {
    
      var zoomed = window.getComputedStyle(month).zIndex;
      var m = document.getElementsByClassName("month");
    
      m.map(function(mo){ mo.style = ''; });
    
      if (zoomed != 2) {
        month.style = 'transform:scale(1.1,1.1); z-index:2';
      }
    }

    或者,使用ES6's arrow function

    function toggleZoom(month) {
    
      var zoomed = window.getComputedStyle(month).zIndex;
      var m = document.getElementsByClassName("month");
    
      m.map(mo => mo.style = '');
    
      if (zoomed != 2) {
        month.style = 'transform:scale(1.1,1.1); z-index:2';
      }
    }

    【讨论】:

    • 这些都不错。从来不知道地图!这两个答案中的任何一个或我原来的方法是否更有效或更喜欢资源/内存等,还是只是风格。
    • @user1561769 这取决于这些方法的使用情况。 You can review a benchmark here which seems to favour for 但请注意,对于一个包含 12 个要循环的项目的简单日历,差异应该是微不足道的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    • 2023-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多