在我的HTML中有许多div,每个div都有名字。我必须在其中实现字母过滤器。如果用户点击按钮'A-J',列表将只显示名字的第一个字母在A-J之间的div和其他字母组的类似。 到目前为止,我已经编写了以下代码:
$("#jfmfs-filter-selected-aj").click(function(event) {
event.preventDefault();
for (i = 0; i < all_friends.length ; i++)
{
var aFriend = $( all_friends[i] );
if(!(/^[a-jA-J]+$/.test(aFriend.find(".friend-name").html().charAt(0)))){
aFriend.addClass("hide-filtered");
}
}
$(".filter-link").removeClass("selected");
$(this).addClass("selected");
});
此代码工作正常,但在循环中隐藏div,因此需要时间。有没有办法我可以在一行中编写上面的代码,将“隐藏过滤”类添加到一次符合我的标准的所有div中这样的东西?
all_friends.not( {divs with inner html starting with letters a-j} ).addClass("hide-non-selected");
all_friends.not( /^[a-jA-J]+$/.test(all_friends.find(".friend-name").html().charAt(0)) ).addClass("hide-non-selected");
最终解决方案我使用jquery过滤器(Barmar的回答):
all_friends.filter(function() {
return(!(/^[a-fA-F]+$/.test($(this).find(".friend-name").html().charAt(0))))
}).addClass("hide-non-selected");
答案 0 :(得分:2)
试试这个:
var AJ_regex = /^[a-jA-J]/;
$('.friend-name', aFriend).filter(function() {
return !(AJ_regex.test($(this).html()));
}).addClass("hide-filtered");
答案 1 :(得分:0)
看看这个jquery filter by James Padolsey。看起来你可以用它来做你正在寻找的那种东西。
出于您的目的,它看起来像 -
$('div.friend-name').filter('div:regex(innerHTML, ^[a-jA-J])').addClass("hide-non-selected");
(这可能需要调整 - 我没有测试过它。)