无论父级可见性如何,我都需要计算隐藏的元素。
我有这段代码:
close()
在这个例子中,我得到 3 项,所以是正确的。
但是这段代码:
<div id="parent-1">
<div class="item" style="display: none;"></div>
<div class="item" style="display: none;"></div>
<div class="item"></div>
<div class="item" style="display: none;"></div>
</div>
<script>
var hidden_items = $('#parent-1').find('.item:hidden').length;
console.log (hidden_items);
</script>
我得到 4 元素!因为父是一个隐藏的元素,但我需要得到3。
有什么想法吗?
答案 0 :(得分:1)
您可以使用过滤器功能过滤掉显示属性设置为无的元素:
var hidden_items = $('#parent-2 .item').filter(function(){
return $(this).css('display') == "none"
}).length;
工作代码段
$(function(){
var hidden_items = $('#parent-2 .item').filter(function(){
return $(this).css('display') == "none"
}).length;
alert (hidden_items);
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="parent-2" style="display: none;">
<div class="item" style="display: none;">
<div class="item" style="display: none;">
<div class="item">
<div class="item" style="display: none;">
</div>
&#13;
答案 1 :(得分:1)
这是因为,当隐藏父元素时,它的子元素也将被隐藏。这是自然行为。如果您仍想获取元素而不管其父显示属性如何,请使用.filter
及其callBack
函数。
var hidden_items = $('#parent-2 .item').filter(function(){
return this.style.display == "none"
}).length;