4

我正在用我的 Rails 应用程序中的数据填充 Twitter 引导手风琴,我希望能够过滤数据。我找到了一些不错的 jQuery 插件,但似乎都没有过滤数据。这是因为它不是一个简单的列表吗?编辑:不再使用列表。这是我到目前为止的代码:

<div id="descriptions">

    <% unless @subcategories.nil? %>
    <form class="filterform" action="#">
        <input class="filterinput" type="text">
    </form>

    <div id="list" class="display-subcategory">
        <div class="accordion" id="accordion2">
            <% @subcategories.each do |s| %>
                <% unless s.description == "No description yet"%>
                <div class="accordion-group">
                    <div class="accordion-heading">
                        <a class="accordion-toggle purple-text" data-toggle="collapse" data-parent="#accordion2" href="#collapse<%=s.name.gsub(/\s+/, "")%>">
                                <h3><%= s.name %> </h3>
                        </a>
                    </div>
                    <div id="collapse<%=s.name.gsub(/\s+/, "")%>" class="accordion-body collapse out">
                        <div class="accordion-inner">
                            <%= s.description.html_safe %>
                        </div>
                    </div>
                </div>
                <% end %>
            <% end %>
        </div>
        </div>
    <% end %>
</div>

这是我正在使用的插件:http: //anthonybush.com/projects/jquery_fast_live_filter/

编辑:我不再使用这个插件,我将尝试编写自己的过滤器函数。

我正在尝试按项目名称进行过滤,但我无法弄清楚这一点,希望能得到一些帮助。谢谢。

4

2 回答 2

5

这是我用来过滤手风琴的 jQuery,我用这个 jfiddle 来帮助http://jsfiddle.net/U8T8p/10/

    (function($) {

        $('.filterinput').keyup(function() {
            var a = $(this).val();
            if (a.length > 0) {
                children = ($("#accordion2").children());

                var containing = children.filter(function () {
                    var regex = new RegExp('\\b' + a, 'i');
                    return regex.test($('a', this).text());
                }).slideDown();
                children.not(containing).slideUp();
            } else {
                children.slideDown();
            }
            return false;
        })

    }(jQuery));

因此,这使用正则表达式来查找我的手风琴标题并在它们与输入不匹配时隐藏它们。无论如何,希望这对其他人有所帮助。

于 2012-10-16T11:12:24.207 回答
0
    $.expr[":"].contains = $.expr.createPseudo(function(arg) {
    return function( elem ) {
        return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
    };
});
$("#searchinput").change( function() {
    var filter = $(this).val();
    var list= $(".accordion .accordion-group");
    if(filter) {
        $(list).find(":not(:contains(" + filter + "))").filter( ".text-contrast" ).parent().parent().parent().hide();
        $(list).find(":not(:contains(" + filter + "))").filter( ".accordion-inner" ).parent().parent().hide();
        $(list).find(":contains(" + filter + ")").filter( ".text-contrast" ).parent().parent().parent().show();
        $(list).find(":contains(" + filter + ")").filter( ".accordion-inner" ).parent().parent().show();
    } else {
        $(list).show();
    }
    return false;
}).keyup( function() {

    $(this).change();
});

您可以搜索手风琴内容和手风琴标题。搜索也是免费的。在引导程序中工作。

于 2013-10-10T12:35:24.520 回答