jquery 检查项目是否父列表项未隐藏

标签 jquery

我有一个“全选”复选框。我想迭代包含类 cb-org 的每个复选框并设置 checked 属性,但前提是父列表项元素没有类 hidden 应用于它。

这样做的原因是因为我有一个客户端过滤器,所以并非所有列表项都是可见的,并且我不希望我的“全选”为以下项目设置 checked 属性目前隐藏。

$('#organisations-selectall').change(function() {
  $('.cb-org').each(function (i, obj) {
    if (!$(obj).parent('li').hasClass('hidden')) {
      $(obj).prop('checked', this.checked);
    }
  });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
  <li>
    <div class="input-group">
      <span class="input-group-addon">Filter</span>
    	<input id="org-filter" type="text" class="form-control">
    </div>
  </li>
  <li>
    <div class="checkbox">
      <label>
        <input id="organisations-selectall" type="checkbox">
        <strong>Select All</strong>
      </label>
    </div>
  </li>
  <li class="attr-org-entity hidden">
    <div class="checkbox">
      <label>
        <input type="checkbox" class="cb-org">
        Org 1
      </label>
    </div>
  </li>
  <li class="attr-org-entity">
    <div class="checkbox">
      <label>
        <input type="checkbox" class="cb-org">
        Org 2
      </label>
    </div>
  </li>
  <li class="attr-org-entity">
    <div class="checkbox">
      <label>
        <input type="checkbox" class="cb-org">
        Org 3
      </label>
    </div>
  </li>
</ul>

最佳答案

您可以利用 jQuery 固有的循环,这样您就不必自己编写它。

  1. 找到所有复选框
  2. 获取其父级 li,无论它在 DOM 树中的位置有多高
  3. 过滤 li 以仅获取那些没有 hidden 类的内容
  4. 对于过滤后的 li,找到其嵌套的复选框
  5. 更改其选中的属性

$('#organisations-selectall').change(function(e) {
  $('.cb-org')
    .closest('li')
    .filter(':not(.hidden)')
    .find('.cb-org')
    .prop('checked', this.checked);
});
.hidden { color: red }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
  <li>
    <div class="input-group">
      <span class="input-group-addon">Filter</span>
    	<input id="org-filter" type="text" class="form-control">
    </div>
  </li>
  <li>
    <div class="checkbox">
      <label>
        <input id="organisations-selectall" type="checkbox">
        <strong>Select All</strong>
      </label>
    </div>
  </li>
  <li class="attr-org-entity hidden">
    <div class="checkbox">
      <label>
        <input type="checkbox" class="cb-org">
        Org 1
      </label>
    </div>
  </li>
  <li class="attr-org-entity">
    <div class="checkbox">
      <label>
        <input type="checkbox" class="cb-org">
        Org 2
      </label>
    </div>
  </li>
  <li class="attr-org-entity">
    <div class="checkbox">
      <label>
        <input type="checkbox" class="cb-org">
        Org 3
      </label>
    </div>
  </li>
</ul>

关于jquery 检查项目是否父列表项未隐藏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54756417/

相关文章:

javascript - 重构以删除尾随 <br>

javascript - React 通过 onclick 调用组件

jquery - 使用 jQuery 单击按钮加载 Google map

javascript - 使用 php 脚本验证访问者的年龄并根据结果加载 iframe,无需刷新

javascript - jQuery:无法识别的表达式

jquery - Datatable 中的单选按钮无法在 Safari/Firefox 中呈现

javascript - 如何在 div 中找到第一个 id

javascript - 验证分解的日期宽度 jQuery Validation 插件

javascript - 通过 $.getscript() 获取脚本时添加自定义引用

javascript - DataTables:使用 JQuery 更改所选单元格的值