【发布时间】:2026-02-09 21:25:01
【问题描述】:
我的博客上有一个过滤系统,它工作得很好,但我只是想知道我怎么不能一遍又一遍地重复这个功能。
这里是html:
<div class="postFilter">
<ul>
<li><a href="#" class="filter filter1 filterActive">all</a></li>
<li><a href="#" class="filter filter2">another link</a></li>
<li><a href="#" class="filter filter3">third link</a></li>
<li><a href="#" class="filter filter4">fourth</a></li>
<li><a href="#" class="filter filter5">fifth</a></li>
</ul>
</div><!-- /.postFilter -->
和我正在使用的 jquery:
$('.filter1').on('click', function(e){
e.preventDefault();
// add & Remove filter
$('.filter').removeClass('filterActive');
$('.filter1').addClass('filterActive');
// hide & show categories
$('.categ').hide();
$('.categ1').show();
});
$('.filter2').on('click', function(e){
e.preventDefault();
// add & Remove filter
$('.filter').removeClass('filterActive');
$('.filter2').addClass('filterActive');
// hide & show categories
$('.categ').hide();
$('.categ2').show();
});
我重复了 5 次,我知道我想做什么,我想看看点击的过滤器是否等于 1,2,3,4,5 然后显示响应函数的代码。但我不知道从哪里开始。
忘了说我试过这个:
var filterNum;
$('.filter').on('click', function(e){
e.preventDefault();
if($('.filter').hasClass('filter1')){
filterNum = 1;
}else if($('.filter').hasClass('filter2')){
filterNum = 2;
}else if($('.filter').hasClass('filter3')){
filterNum = 3;
}else if($('.filter').hasClass('filter4')){
filterNum = 4;
}else if($('.filter').hasClass('filter5')){
filterNum = 5;
}
filterClick(filterNum);
});
function filterClick(number){
// add & Remove filter
$('.filter').removeClass('filterActive');
$('.filter' + number).addClass('filterActive');
// hide & show categories
$('.categ').hide();
$('.categ' + number).show();
}
【问题讨论】:
-
你的尝试很接近了,但是你可能想要
$(this).hasClass()而不是$('.filter').hasClass()。 -
很高兴听到这个消息。虽然您的想法有效,但我个人喜欢下面的经验答案。使用数据属性是避免您的巨大
if / else部分的好方法。你想编写你的代码,这样你就可以拥有 99 个过滤器而不必触摸它,data方法可以实现这一点,而你的代码需要多 94 行代码:)