我可以恢复 removeClass className.match 删除的以前的类吗?

Posted

技术标签:

【中文标题】我可以恢复 removeClass className.match 删除的以前的类吗?【英文标题】:Can I restore previous class removed by removeClass className.match? 【发布时间】:2020-10-17 11:54:03 【问题描述】:

我需要通过单击“列表视图”按钮从不同的标签中删除一些类,并通过单击“网格视图”按钮恢复之前删除的类;可以这样做吗?

谢谢

        $(document).ready(function() 

$("#addClass").click(function () 
          $('#restoreclass').addClass('previousclasses');
            );
          
            $("#removeClass").click(function () 
        
          $(".products").removeClass (function (index, className) 
            return (className.match (/(^|\s)columns-\S+/g) || []).join(' ');
        );
        
      $("#wc-column-container").removeClass (function (index, className) 
            return (className.match (/(^|\s)wc-\S+/g) || []).join(' ');
        );
      
            );
    
        );     
   <input id="addClass" type="button" value="Grid View" />
   <input id="removeClass" type="button" value="List View" />  

【问题讨论】:

请使用minimal reproducible example,其余的 html 代码和 CSS 不仅仅是按钮。我不明白你想达到什么目的。 【参考方案1】:

您可以在删除它们之前将类名存储在数据属性中,并在单击“网格视图”按钮时恢复它们:

$(document).ready(function() 

  $("#addClass").click(function() 
    $(".products, #wc-column-container").each(function() 
      let prev = $(this).attr("data-previous");
      prev = prev.replace(/\,/g, '').trim();
      $(this).addClass(prev).removeAttr("data-previous");
    );
  );

  $("#removeClass").click(function() 
    $(".products").removeClass(function(index, className) 
      let classNames = className.match(/(^|\s)columns-\S+/g);
      $(this).attr("data-previous", classNames);
      return (className.match(/(^|\s)columns-\S+/g) || []).join(' ');
    );

    $("#wc-column-container").removeClass(function(index, className) 
      let classNames = className.match(/(^|\s)wc-\S+/g);
      $(this).attr("data-previous", classNames);
      return (className.match(/(^|\s)wc-\S+/g) || []).join(' ');
    );
  );
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id="addClass" type="button" value="Grid View" />
<input id="removeClass" type="button" value="List View" />
<div class="products columns-a columns-b">
Products
</div>
<div id="wc-column-container" class="wc-a wc-b">
Example
</div>

【讨论】:

嗨,我认为prev = prev.replace(",", "").trim(); 中可能有一个错误,因为当我恢复它时,这些类似乎用逗号分隔 class="wc-columns-container, wc-columns-3, wc-tablet- columns-2, wc-mobile-columns-1",你能帮忙吗?谢谢 @AlessioAngeloro 我刚刚调整了答案,所以所有逗号都被替换为空字符串。 对不起,我不是 JS 的专家,我必须删除哪个逗号?谢谢。 @AlessioAngeloro 您不必删除逗号,我在回答中调整了 prev = prev.replace(",","").trim(); with prev = prev.replace(/\,/g, '').trim();所以所有的逗号都会被处理,而不仅仅是第一个。

以上是关于我可以恢复 removeClass className.match 删除的以前的类吗?的主要内容,如果未能解决你的问题,请参考以下文章

兼容IE8浏览器移除class样式的方法

在 Jquery 中动画 addClass 和 removeClass

jQuery removeClass() 方法

由 add/removeClasses 组成的循环“动画”

.addClass(),.removeClass(),.toggleClass()的区别

在外部单击时 removeClass('active')