检查ul下的每个li是否为input.disabled并仅在所有li都有input.disabled

时间:2018-02-19 18:08:13

标签: jquery html-lists hide html-input

情况就是这样:

<h5>Title 1</h5>
<ul class="filter-group">
<li><input type="checkbox"></li>
<li><input type="checkbox"></li>
<li><input type="checkbox"></li>
</ul>

<h5>Title 2</h5>
<ul class="filter-group">
<li><input type="checkbox"></li>
<li><input type="checkbox"></li>
<li><input type="checkbox" class="disabled"></li>
</ul>

<h5>Title 3</h5>
<ul class="filter-group">
<li><input type="checkbox" class="disabled"></li>
<li><input type="checkbox" class="disabled"></li>
<li><input type="checkbox" class="disabled"></li>
</ul>

我想隐藏h5和ul只有当li中的所有输入都有class =&#34; disabled&#34;时。在我的场景中,只有Title 3及其中的所有内容都应该消失,但是,我无法找到一种方法来检查所有li及其输入是否都有所说的类。

这是我的jquery:

$("ul.filter-group:has(li:has(input.disabled))").prev().hide();
$("ul.filter-group:has(li:has(input.disabled))").hide();

并且不幸的是它也删除了标题2,因为它有一个被禁用的输入。我如何只选择每个li有input.disabled的ul?

2 个答案:

答案 0 :(得分:0)

$(“ul.filter”).each(function() {
  var $ul=$(this), $dis=$ul.find("input:disabled"), $input=$ul.find("input");
  $ul.toggle($dis.length==0 || ($dis.length>0 && $dis.length<$input.length));
});

答案 1 :(得分:0)

我不确定您正在尝试的1行解决方案,但这将帮助您实现预期的

var uls = $('.filter');
$.each(uls, function() {
    if( $(this).find('input').length === $(this).find('input.disabled').length ) {
        $(this).hide(); $(this).prev().hide();
    }
});