0

http://tutorialzine.com/2011/06/beautiful-portfolio-html5-jquery/チュートリアルに基づいて、アプリに並べ替え機能を実装しようとしています。

問題:

次の形式で、quicksand jquery プラグインを使用して後でソートするアイテムがあります。

<ul>
<li class="car">Audi A6</li>
<li class="car">Audi A8</li>
<li class="car">BMW 328Ci</li>
<li class="hobby">Skying</li>
<li class="hobby">Skating</li>
<li class="hobby">Running</li>
<li class="food">Pizza</li>
<li class="food">Salat</li>
<li class="food">Chicken</li>
</ul>

次に、表示するものと表示しないものを並べ替えるために使用する 3 つのチェックボックスがあります。

    <ul id="filter_sources">
        <li><input type="checkbox" id="source" value="car" />car</li>
        <li><input type="checkbox" id="source" value="hobby" />hobby</li>
        <li><input type="checkbox" id="source" value="food" />food</li>
    </ul>

私がやりたいことは、チェックされたチェックボックスごとに流砂プラグインを実行し、チェックされたボックスを表示することです。そのため、車と趣味のチェックボックスがチェックされている場合、趣味のリストが表示されます

チュートリアルではこのようにしているので、私はこれを求めています:

$('#filter_sources').live('click',function(e){
        var link = $(this);

        link.addClass('active').siblings().removeClass('active');

        // Using the Quicksand plugin to animate the li items.
        // It uses data('list') defined by our createList function:

        $('#videosList').quicksand(link.data('list').find('li'));
        e.preventDefault();
    });

チェックされた入力ごとに試行を試みましたが、成功しませんでした。

4

1 に答える 1

3

テスト済みで、明らかに動作しています:

$('input:checkbox').change(
    function(){
        var show = $('input:checkbox:checked').map(function(){
                           return $(this).val();
                   });
        console.log(show);
        $('#list li').each(
            function(){
                if ($.inArray($(this).attr('class'),show) > -1) {
                    $(this).show();
                }
                else {
                    $(this).hide();
                }
            });
    });

JS フィドルのデモ

簡単にするために、またメソッドを避けるために、フィルター処理する要素を含むリストにnot()を割り当てることを選択したことに注意してください。id


OPからのコメントに応じて編集:

[のみ] 1 つの問題、いずれかを選択した後にすべてのチェックボックスの選択を解除すると、すべての結果が消えます...

$('input:checkbox').change(
    function(){
        var show = $('input:checkbox:checked').map(function(){
                           return $(this).val();
                   });
        if (show.length > 0){
            $('#list li').each(
                function(){
                    if ($.inArray($(this).attr('class'),show) > -1) {
                        $(this).show();
                    }
                    else {
                        $(this).hide();
                    }
                });
        }
        else {
            $('#list li').show();
        }
    });

JS フィドルのデモ。参考文献:

于 2012-01-02T20:09:28.280 に答える