所以我从第1-4项开始:
<div class="someDiv bold italic" style="display: none;">Lorem</div>
<div class="someDiv regular italic" style="display: block;">Lorem</div>
<div class="someDiv bold" style="display: none;">Ipsum</div>
<div class="someDiv regular" style="display: block;">Ipsum</div>
然后我有一些输入复选框:
<input class="regular" type="checkbox" />
<input class="bold" type="checkbox" />
<input class="italic" type="checkbox" />
所以基本上我有jQuery显示和隐藏div。现在我有另一个必须遍历这些div的函数(每个复选框一个),并根据另一个标准显示/隐藏。但是我不希望再次显示已经隐藏的div。
$(".someDiv").each(function(){
if($(this).hasClass("regular")){
$(this).show();
} else {
$(this).hide();
};
在这个例子中,唯一剩下的div应该是最后一个div。不幸的是,这段代码会显示第二和第四个div。
此代码是我将要应用的所有过滤器的基本示例,添加等。
答案 0 :(得分:72)
您可以使用:visible选择器查找仅显示的内容。
$(".someDiv:visible").each(....);
您可以使用.not()选择器仅查找隐藏的内容。
$(".someDiv").not(":visible").each(....);
我认为您可以使用这一行在代码中执行相同的操作。
$(".someDiv").hide().find(".regular").show();
找到所有.someDiv
并隐藏它们,然后找到.regular
类的那些并显示它们。
答案 1 :(得分:10)
您可以使用:visible
选择器选择可见的.someDiv
。
$(".someDiv:visible").each(function(){
if($(this).hasClass("regular")){
$(this).show();
} else {
$(this).hide();
}
});
这是利用链接的另一种有趣的方式:)并使其成为单行。
$('.someDiv:visible').not($('.someDiv.regular:visible')).hide();
答案 2 :(得分:2)
你可以这两种方式:你可以为display: none
元素添加另一个类,并通过css使它们不可见,或者你可以通过jquery找到css属性
<div class="someDiv bold italic hidden" >Lorem</div>
<div class="someDiv regular italic" >Lorem</div>
<div class="someDiv bold hidden" >Ipsum</div>
<div class="someDiv regular" >Ipsum</div>
.someDiv{
display: block;
}
.hidden{
display: none;
}
$(".someDiv").each(function(){
if($(this).hasClass("hidden")){
$(this).show();
} else {
$(this).hide();
};
$(".someDiv:visible").each(function(){
if($(this).hasClass("regular")){
$(this).show();
} else {
$(this).hide();
}
});
答案 3 :(得分:1)
您可以使用:not()
选择器并过滤结果,然后再进入.each()
:
$(".someDiv:not(:hidden)").each(function(){