如何仅选择所有li下input均含disabled类的ul并隐藏对应h5?
解决方法:精准筛选所有子项input均禁用的UL
我明白你的问题了——你现在需要精准找出所有<li>下的<input>都带有disabled类的<ul>,然后隐藏对应的<h5>和该<ul>,但当前代码误把只包含一个禁用输入框的Title 2也移除了。咱们来一步步修复这个问题:
核心思路
问题出在之前的代码可能只是检查了“是否存在禁用的input”,而不是“所有input都被禁用”。正确的逻辑应该是:
- 对每个
<ul>,统计其下所有<li>中的<input>总数 - 统计其中带有
disabled类的input数量 - 只有当两者数量相等时,才判定这个
<ul>的所有input都是禁用的
具体实现代码
这里提供两种写法,你可以根据习惯选择:
写法1:遍历检查每个UL
// 遍历页面中所有目标UL(如果UL有特定类名,替换成$('ul.your-target-class')) $('ul').each(function() { const $currentUl = $(this); // 获取当前UL下所有的input元素 const allInputs = $currentUl.find('li input'); // 获取带有disabled类的input数量 const disabledInputCount = allInputs.filter('.disabled').length; // 验证:所有input都带有disabled类 if (disabledInputCount === allInputs.length) { // 找到对应的H5(假设H5是UL的前一个同级元素,根据你的实际HTML结构调整) $currentUl.prev('h5').add($currentUl).hide(); // 如果需要彻底移除而不是隐藏,替换成.remove() // $currentUl.prev('h5').add($currentUl).remove(); } });
写法2:用filter筛选符合条件的UL
这种写法更简洁,适合需要先批量筛选再操作的场景:
// 筛选出所有子项input全为disabled的UL const targetUls = $('ul').filter(function() { const inputs = $(this).find('li input'); // 返回判断结果:禁用input数量等于总input数量 return inputs.filter('.disabled').length === inputs.length; }); // 隐藏对应的H5和UL targetUls.prev('h5').add(targetUls).hide();
关键注意事项
- 选择器精准性:如果页面中有其他无关的
<ul>,一定要给目标UL加上特定类名(比如<ul class="input-group">),然后用$('ul.input-group')来选择,避免误操作。 - HTML结构适配:如果你的
<h5>不是直接在<ul>的前一个位置(比如两者都在同一个父容器里),需要调整查找H5的方式,比如:// 假设H5和UL都在class为"section"的容器里 $currentUl.closest('.section').find('h5').add($currentUl).hide();
内容的提问来源于stack exchange,提问作者Anna
相关产品推荐
相关产品推荐

