【问题标题】:Add class to all other divs when checkbox is selected选中复选框时将类添加到所有其他 div
【发布时间】:2017-01-02 03:25:35
【问题描述】:

在底部编辑

TL;DR 我不知道如何将类属性添加到没有我用复选框选择的类的所有 div。

我正在尝试为小型指南列表创建一个排序脚本。所以我的想法是我的 div 标签将附加描述类,例如:

<div class="guide-block WINDOWS UPDATE INSTALL">

“窗口、更新和安装”是“描述”类,仅用于排序目的。侧面带有复选框的列表将允许用户选择与他们需要查找的内容相关的复选框。示例:

<input type="checkbox" id="install"/>
<input type="checkbox" id="update"/>
<input type="checkbox" id="windows"/>

用户选择与他们的搜索相关的框,并且没有从复选框中选择的类的 div 然后将添加一个带有 display: none; 的类里面。这将使不相关的指南消失(理论上)。

我对 java 和 jquery 比较陌生,所以我不确定自己在做什么。我已经从该站点的其他类似问题中拼凑了脚本,以尝试制作我需要的代码。我已经得到了一些工作的代码。它会使具有匹配复选框的 div 在选中时消失。我想要相反的。我希望没有选中复选框的 div 消失。如果我有一个带有 UPDATE 和 INSTALL 的 div,我需要代码来识别它已经选择了一个并且仍然保留。因为现在,如果 div 两者都有,而我选择了一个,它就会消失,因为另一个没有被选中。

$(document).ready(function(){
$('#install').change(function () {
    if (!this.checked)
        $("div.guide-block.install").css("display", "block");
    else
        $("div.guide-block.install").css("display", "none");
});
$('#update').change(function () {
    if (!this.checked)
        $("div.guide-block.update").css("display", "block");
    else
        $("div.guide-block.update").css("display", "none");
});
$('#windows').change(function () {
    if (!this.checked)
        $("div.guide-block.windows").css("display", "block");
    else
        $("div.guide-block.windows").css("display", "none");
});
});

任何帮助将不胜感激。给我一个关于如何做的指南,无论如何。我愿意学习这个,但我用自己的知识碰壁,谷歌搜索不理解。虽然,我不确定我在寻找什么哈。

编辑:我已按照建议重写了代码。遗憾的是这不起作用,但我觉得我更接近了。

$('#install').change(function () {
    if (this.checked) {
        $('div.guide-block:not(.install)').hide();
    }
});

【问题讨论】:

  • 你能说清楚一点吗?这仍然令人困惑。
  • 在顶部添加了 TL;DR
  • @Dakota:看我的回答

标签: jquery html css sorting checkbox


【解决方案1】:

您需要创建一个包含所有选项类的选择器,即windowsupdateinstall

为了建立元素之间的关系,我在小案例中使用了 css 类。

<div class="guide-block windows update install">
  1. windows, update, install
</div>

$(document).ready(function() {
  //Select the checkboxes
  var checkboxes = $('.checkboxContainer :checkbox');  
  //bind the change event hanlder
  checkboxes.on('change', function() {    
    //get the checked checkboxes id, It return create an array
    var checkedCssClasses = checkboxes.filter(':checked').map(function() {
      return this.id;
    }).get();
    //For Debugging purpose, 
    console.clear();
    console.log(checkedCssClasses);    
    //Get all guideBlocks
    var guideBlock = $("div#guide-container .guide-block");    
    //Hide all block
    guideBlock.hide();
    //any checkbox is checked
    if (checkedCssClasses.length> 0) {
      //Create the selector for elements      
      checkedCssClasses = '.' + checkedCssClasses.join('.')      
      //Show filtered element
      guideBlock.filter(checkedCssClasses).show();
    }
  });
});
.guide-block {
  display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="guide-container">
  <div class="guide-block windows update install">
    1. windows, update, install
  </div>
  <div class="guide-block windows update">
    2. windows, update
  </div>
  <div class="guide-block install">
    3. install
  </div>
</div>
<div class="checkboxContainer">
  <input type="checkbox" id="install" />Install
  <br>
  <input type="checkbox" id="update" />Update
  <br>
  <input type="checkbox" id="windows" />Windows
</div>

【讨论】:

  • 我只是想出了如何去做。我感谢您的帮助。我使用了您在另一篇文章中发布的代码并对其进行了修改。非常感谢!!
  • @Dakota,希望它能满足您的要求
  • 我刚用过这个,效果比我的好。我改变了显示:无;阻止,以便它们在页面加载时显示。感谢您的帮助!
【解决方案2】:

这里不是最迷人的解决方案,但我相信它是最简单的,以促进您对 jQuery 的学习。对我来说,jQuery 非常注重与 CSS 的交互,所以我在 jQuery 和 CSS 之间加入了交互来完成这项工作。

基本上,我们想要的是默认隐藏所有指南块,然后使用 SHOW-CSS 类根据需要显示它们。 SHOW- 类之所以有效,是因为它们具有更高的 CSS“特异性”。

$(document).ready(function() {
  $('#install').change(function () {
      if (this.checked)
          $("div#guide-container").addClass("SHOW-INSTALL");
      else
          $("div#guide-container").removeClass("SHOW-INSTALL");
  });
  $('#update').change(function () {
      if (this.checked)
          $("div#guide-container").addClass("SHOW-UPDATE");
      else
          $("div#guide-container").removeClass("SHOW-UPDATE");
  });
  $('#windows').change(function () {
      if (this.checked)
          $("div#guide-container").addClass("SHOW-WINDOWS");
      else
          $("div#guide-container").removeClass("SHOW-WINDOWS");
  });
});
.guide-block {
  display: none;
}

.SHOW-WINDOWS>.guide-block.WINDOWS {
  display: block;
}
.SHOW-UPDATE>.guide-block.UPDATE {
  display: block;
}
.SHOW-INSTALL>.guide-block.INSTALL {
  display: block;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="guide-container">
  <div class="guide-block WINDOWS UPDATE INSTALL">
    1. windows, update, install
  </div>
  <div class="guide-block WINDOWS UPDATE">
    2. windows, update
  </div>
  <div class="guide-block INSTALL">
    3. install
  </div>
</div>
<input type="checkbox" id="install"/>Install<br>
<input type="checkbox" id="update"/>Update<br>
<input type="checkbox" id="windows"/>Windows

【讨论】:

  • 是的,这很接近!之前显示所有指南怎么样,以便他们可以看到那里有指南。我应该在页面加载时检查所有复选框吗?
  • 实际上有一种方法可以在页面加载时显示所有指南,并将复选框留空。这样他们就可以签入他们想要的框,然后页面将对指南进行排序。这将适用于那些不“精通技术”的人,所以我想让它尽可能简单和直观。
  • KISS - 让您的排序成为一个单独且明显的项目,否则您会混淆您的用户,无论是否精通技术。
  • 至于默认检查...这只是 HTML! 将类添加到容器 div:
  • 我的排序占左侧的 30%,而向导占右侧的 70%。所以它应该是显而易见的,并且在移动设备上它将位于顶部。我想我要掉进一个太难的兔子洞了。有没有办法将类添加到没有选定类的 div 中?
【解决方案3】:

这是你需要做的:

Working fiddle

$(document).ready(function() {
  $("input[type='checkbox']").change(function() {
    var chkboxArray = $(" input[type='checkbox']:checked").map(function() {
      return $(this).attr("id");
    }).get();
    $("div.guide-block").hide();
    for (var i = 0; i < chkboxArray.length; i++) {
      $("div.guide-block." + chkboxArray[i]).show();
    }


  });

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="guide-block windows update install">WINDOWS UPDATE INSTALL</div>
<div class="guide-block update install">UPDATE INSTALL</div>
<input type="checkbox" id="install" />Install
<input type="checkbox" id="update" />Update
<input type="checkbox" id="windows" />Windows

【讨论】:

    【解决方案4】:

    我不确定您到底在寻找什么,但据我所知,这里是您的解决方案。

    $(document).ready(function(){
      $('#install').change(function () {
        if (!this.checked) {
          $("div.guide-block.install").css("display", "block");
        } else {
          $("div.guide-block.install").css("display", "none");
        }
      });
      $('#update').change(function () {
        if (!this.checked) {
          $("div.guide-block.update").css("display", "block");
        } else {
          $("div.guide-block.update").css("display", "none");
        }
      });
      $('#windows').change(function () {
        if (!this.checked) {
          $("div.guide-block.windows").css("display", "block");
        } else {
          $("div.guide-block.windows").css("display", "none");
        }
      });
    });
    <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
    <div class="guide-block install">Install</div>
    <div class="guide-block update">Update</div>
    <div class="guide-block windows">Windows</div>
    <input type="checkbox" id="install"/>
    <input type="checkbox" id="update"/>
    <input type="checkbox" id="windows"/>

    【讨论】:

      【解决方案5】:

      这是让它按我想要的方式工作的代码。它不是使用 css 来隐藏指南,而是在选中和取消选中复选框时隐藏并显示它们。这对我来说已经足够好了!非常感谢@Satpal !!

      $(document).ready(function(){
      $('#install').change(function () {
          if (this.checked) {
              $('div.guide-block:not(.install)').hide();
          }
          else {
              $('div.guide-block:not(.install)').show();
          }
      });
      $('#update').change(function () {
          if (this.checked) {
              $('div.guide-block:not(.update)').hide();
          }
          else {
              $('div.guide-block:not(.update)').show();
          }
      });
      $('#windows').change(function () {
          if (this.checked) {
              $('div.guide-block:not(.windows)').hide();
          }
          else {
              $('div.guide-block:not(.windows)').show();
          }
      });
      });
      

      【讨论】:

        猜你喜欢
        相关资源
        最近更新 更多
        热门标签