【发布时间】:2013-12-05 22:46:14
【问题描述】:
请参阅下面的场景。我正在创建一个目录,我希望能够以两种方式过滤#apple、#animal、#banana、#beans、#cape、#cat、#dog、#dung 项目:按类别(.services 、.technology、.referral 或 .reseller)和首字母(.a、.b、.c、.d)。如果我点击#services,它应该隐藏所有其他类(.technology、.referral、.reseller),如果我点击#a,它应该隐藏所有其他不以字母“a”开头的项目。
单独使用就可以了,但我遇到的问题是如果我单击#services,然后单击#a,则显示非服务项目。我不想要那个。 相反,我希望能够单击#services,然后单击#a,并且只查看具有以字母a 开头的.service 类的项目;这将如何实现?
我对 jquery 还很陌生,所以我为造成的混乱道歉。不知道如何问这个看似简单的 jQuery 过滤问题。非常感谢您的帮助!
场景:
我有以下html:
<div id="container">
<div id="nav">
<ul>
<li id="services"><a href="#">Services</a></li>
<li id="technology"><a href="#">Technology</a></li>
<li id="referral"><a href="#">Referral</a></li>
<li id="reseller"><a href="#">Reseller</a></li>
</ul>
</div>
<div id="abs-filer-nav>
<a href="#" id="a">A</a>
<a href="#" id="b">B</a>
<a href="#" id="c">C</a>
<a href="#" id="d">D</a>
</div>
<div id = "apple" class="technology"></div>
<div id = "animal" class="services"></div>
<div id = "banana" class="services"></div>
<div id = "beans" class="referral"></div>
<div id = "cape" class="referral"></div>
<div id = "cat" class="reseller"></div>
<div id = "dog" class="reseller">
<div id = "dung" class="technology">
以及下面的 jQuery:
$(document).ready(function() {
$('#all').addClass("active");
$('#all').click(function() {
$('.services, .reseller, .technology,.referral').fadeIn("fast");
$(this).addClass("active");
$('#services, #reseller,#technology').removeClass("active");
});
$('#technology').click(function() {
$('.services, .reseller,.referral').fadeOut("fast");
$('.technology').fadeIn("fast");
$(this).addClass("active");
$(this).addClass("immune")
$('#services, #reseller,#all,#referral').removeClass("active");
$('#services_class').toggleHide("fast");
});
$('#services').click(function() {
$('.technology, .reseller,.referral').fadeOut("fast");
$('#services_class').show("fast");
$('.services').fadeIn("fast");
$(this).addClass("active");
$('#all, #reseller,#technology,#referral').removeClass("active");
});
$('#reseller').click(function() {
$('.services, .technology,.referral').fadeOut("fast");
$('.reseller').fadeIn("fast");
$(this).addClass("active");
$('#services, #all,#technology,#referral').removeClass("active");
});
$('#referral').click(function() {
$('.services, .technology,.reseller').fadeOut("fast");
$('.referral').fadeIn("fast");
$(this).addClass("active");
$('#services, #all,#technology').removeClass("active");
});
$('#a').click(function() {
$('.b,.c,.d').fadeOut("fast");
$('.a').fadeIn("fast");
$(this).addClass("active");
$('.b,.c,.d').removeClass("fast");
})
$('#b').click(function() {
$('.a,.c,.d').fadeOut("fast");
$('.b').fadeIn("fast");
$('.immune').fadeIn("fast");
$(this).addClass("active");
$('.a,.c,.d').removeClass("fast");
})
$('#c').click(function() {
$('.a,.b,.d').fadeOut("fast");
$('.c').fadeIn("fast");
$(this).addClass("active");
$('.a,.b,.d').removeClass("fast");
})
$('#d').click(function() {
$('.a,.b,.c').fadeOut("fast");
$('.d').fadeIn("fast");
$(this).addClass("active");
$('.a,.b,.c').removeClass("fast");
})
});
【问题讨论】:
-
在一个函数后面抽象过滤,该函数同时执行两种类型的过滤器,然后让所有点击事件简单地更新一个全局变量,该变量存储过滤器选项并执行该函数,该函数访问全局变量这些点击事件也可以减少到只有两个。
-
凯文,非常感谢您的帮助!你说的我一个字都听不懂,这超出了我目前的jQuery技能。谁能演示一下?