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 的继承循环,因此您不必自己编写它。
- 找到所有的复选框
- 获取他们的父 li,无论它在 DOM 树的位置有多高
- 过滤 li 以仅获取那些没有
hidden
类的 - 对于过滤后的 li,找到它们的嵌套复选框
- 更改他们的选中属性
$('#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>
推荐阅读
- java - 如何从 Jpos ISO8583 打包文件中读取所有记录,该文件包含一行中的所有记录
- python - 需要读取与运行 jupyter notebook 的路径不同的 csv 文件
- nginx - 将嵌套表存储在 nginx 共享内存中
- android - 在 android 模拟器中启用允许绘制消息
- ios - 使用 SwiftUI 扁平化元组视图
- php - 将单个对象转换为包含该对象的数组
- python - Visual Studio代码中的kv文件问题
- android - 我想为将有多个转弯的方向绘制路线
- r - 每次 r 启动时,它都会在 GUI 中读取此错误消息:错误:找不到函数“libPaths”
- javascript - 如何在两个客户端上从服务器接收数据