3

在我的 HTML 中有许多 div,每个 div 里面都有名字。我必须在其中实现字母过滤器。如果用户单击按钮“AJ”,则列表将仅生成名称首字母在 AJ 之间的 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");
4

2 回答 2

2

试试这个:

var AJ_regex = /^[a-jA-J]/;
$('.friend-name', aFriend).filter(function() {
    return !(AJ_regex.test($(this).html()));
}).addClass("hide-filtered");
于 2012-12-01T09:11:51.720 回答
0

看看James Padolsey 的这个 jquery 过滤器。看起来你可以用它来做你正在寻找的事情。

出于您的目的,它看起来像 -

$('div.friend-name').filter('div:regex(innerHTML, ^[a-jA-J])').addClass("hide-non-selected");

(这可能需要调整——我没有测试过)。

于 2012-12-01T09:11:47.367 回答