使用 Select2 多复选框 JS 插件显示-隐藏表格数据

Posted

技术标签:

【中文标题】使用 Select2 多复选框 JS 插件显示-隐藏表格数据【英文标题】:Using Select2 multi-checkboxes JS Plugin to show-hide table data 【发布时间】:2020-01-07 12:10:13 【问题描述】:

我正在尝试使用 Wasikuss 的 Select2 多复选框 (https://github.com/wasikuss/select2-multi-checkboxes/) 来隐藏表格列的基础,即从下拉列表中未选中的选项。

下拉列表中每个选项的“类”对应于要隐藏的列的“td”类。

我用来执行此操作的 JQuery 基本上是识别取消选择的选项 (aria-selected=false) 并使用选项 id 的最后一个元素(与相应列 'td's 的类匹配)来识别并隐藏所需的列:

$("#select2-ColumnCheckbox-results .select2-results__option[aria-selected=false]").each(function ()   
    var ToHide = $(this).attr("id").split('-').slice(-1)[0];
    var column =  ".CompTable table ." + ToHide;
    $(column).hide();
);
);

虽然多选复选框正在工作,但显示隐藏列未按预期工作,不知道我哪里出错了。

以下是完整代码:

jQuery(document).ready(function($) 

  jQuery('#ColumnCheckbox').select2MultiCheckboxes(
    width: '50%'
  )

  $("#select2-ColumnCheckbox-results .select2-results__option[aria-selected=false]").each(function() 
    var ToHide = $(this).attr("id").split('-').slice(-1)[0];
    var column = ".CompTable table ." + ToHide;
    $(column).hide();
  );

);
.CompTable 
  table-layout: fixed;
  width: 50%;
  position: relative;
  font-family: "Trebuchet MS", Arial, Helvetica, sans-serif;
  margin: 10px;
  border: 1px solid #222;
  text-align: center;


.select2-results__option .wrap:before 
  font-family: fontAwesome;
  color: #999;
  content: "\f096";
  width: 25px;
  height: 25px;
  padding-right: 10px;


.select2-results__option[aria-selected=true] .wrap:before 
  content: "\f14a";
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/css/select2.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.3/js/select2.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css" rel="stylesheet" />
<script src="https://rawgit.com/wasikuss/select2-multi-checkboxes/master/select2.multi-checkboxes.js"></script>

<select id="ColumnCheckbox" multiple="multiple">
  <option selected name="Samsung" class="Samsung">Samsung</option>
  <option selected name="Apple" class="Apple">Apple</option>
  <option selected name="Xiomi" class="Xiomi">Xiomi</option>
</select>
<br></br>
<table class="CompTable">
  <thead>
    <th></th>
    <th class="Samsung">Samsung</th>
    <th class="Apple">Apple</th>
    <th class="Xiomi">Xiomi</th>
  </thead>
  <tbody>
    <tr class="Parameter1">
      <td class="Parameter1">Parameter1</td>
      <td class="Parameter1 Samsung">500</td>
      <td class="Parameter1 Apple">300</td>
      <td class="Parameter1 Xiomi">200</td>
    </tr>
    <tr class="Parameter2">
      <td class="Parameter2">Parameter2</td>
      <td class="Parameter2 Samsung">300</td>
      <td class="Parameter2 Apple">500</td>
      <td class="Parameter2 Xiomi">700</td>
    </tr>
    <tr class="Parameter3">
      <td class="Parameter3">Parameter3</td>
      <td class="Parameter3 Samsung">900</td>
      <td class="Parameter3 Apple">200</td>
      <td class="Parameter3 Xiomi">500</td>
    </tr>
  </tbody>
</table>

请让我知道我哪里出了问题。 :/

【问题讨论】:

【参考方案1】:
    Can you replace your script with the below change event?

    $("#ColumnCheckbox").change(function() 
        var options = $(this).find("option");
        $.each(options,function(i,val)
            var selected = $(this).prop("selected");
            var currentClass = $(this).attr("class");
            if(selected == false)
                $("table.CompTable thead  th." + currentClass).hide();
                $("table.CompTable tbody tr td." + currentClass).hide();
            else
                $("table.CompTable thead  th." + currentClass).show();
                $("table.CompTable tbody tr td." + currentClass).show();
            
        );

【讨论】:

以上是关于使用 Select2 多复选框 JS 插件显示-隐藏表格数据的主要内容,如果未能解决你的问题,请参考以下文章

Select2 插件:在表单元素之外显示选定的选项

在 select2 多选中显示单独的搜索框

Select2 带有用于多选的复选框列表

select2插件使用小记

如何使select2插件下拉框多选并获取选中的值

Select2的使用