无论父级可见性如何计算隐藏元素
Count hidden elements regardless of parent visibility
无论父级可见性如何,我都需要对隐藏元素进行计数。
我有这个代码:
<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>
在这个例子中我得到 3 项,所以是正确的。
但使用此代码:
<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>
<script>
var hidden_items = $('#parent-2').find('.item:hidden').length;
console.log (hidden_items);
</script>
我得到 4 个元素!因为parent是隐藏元素,但是我需要得到3.
有什么想法吗?
您可以使用筛选功能筛选出显示 属性 设置为 none:
的元素
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);
});
<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>
那是因为,当父元素被隐藏时,它的子元素也会被隐藏。那是自然的行为。如果您仍想获取元素而不考虑其父显示 属性,则使用 .filter
及其 callBack
函数。
var hidden_items = $('#parent-2 .item').filter(function(){
return this.style.display == "none"
}).length;
DEMO
无论父级可见性如何,我都需要对隐藏元素进行计数。
我有这个代码:
<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>
在这个例子中我得到 3 项,所以是正确的。
但使用此代码:
<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>
<script>
var hidden_items = $('#parent-2').find('.item:hidden').length;
console.log (hidden_items);
</script>
我得到 4 个元素!因为parent是隐藏元素,但是我需要得到3.
有什么想法吗?
您可以使用筛选功能筛选出显示 属性 设置为 none:
的元素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);
});
<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>
那是因为,当父元素被隐藏时,它的子元素也会被隐藏。那是自然的行为。如果您仍想获取元素而不考虑其父显示 属性,则使用 .filter
及其 callBack
函数。
var hidden_items = $('#parent-2 .item').filter(function(){
return this.style.display == "none"
}).length;