0

内部 div 内にタグを持つ投稿リンクのリストがあります。ユーザーは 3 つの異なるリストから選択して、投稿をフィルタリングします。

基本的に私が実現したいのは、ユーザーが選択した 3 つのリストの内容に基づくフロント エンド フィルタリングです。

ロジックは基本的に次のようにしたい:IF post-tags-list has 1+ item from list1 AND has 1+ item from list2 AND has 1+ item from list3, THEN keep the post

IF以下は私が最初に持っているものですが、現在の方法では、誰かがリストの1つから何も選択しない場合、説明するために大量のステートメントが必要になります. おそらくスイッチを使用すると簡単になることはわかっていますが、私のロジックが正しいかどうかは完全にはわかりません。

$(".post-link").each(function(index){
    //Get all the post's terms from its hidden tag div and store in an array
    var terms = $(this).find(".tags").attr('class').split(" ");
    //Cut off the first two items ('hidden' and 'tags')
    terms.splice(0,2);
    //If interests is set
    if(typeof interests[0] != 'undefined'){
        var found = 0;
        var keep = false;
        //For each of the selected interests...
        $.each(interests, function(index, value){
            //For each of the posts terms
            $.each(terms, function(index2, value2){
                //If the posts has a selected interest, keep it
                if(value == value2){ keep=true;}
            });
        });
        //After all that, if we couldn't find anything...
        if(keep!=true){
            //Hide the post (.post-link)
            $(this).hide();
        }
    }
    //THE ABOVE ONLY ACCOUNTS FOR IF SOMETHING IS SELECTED FOR THE FIRST LIST
    //I'M NOT SURE HOW I WOULD IMPLEMENT THIS ACROSS TWO OTHER LISTS
});

さらに情報が必要な場合はお知らせください。

ありがとう!

4

1 に答える 1

0

さて、私は私の問題の解決策を見つけました。基本的に、投稿ごとに show 変数を設定し、それを true に設定します (別の方法で証明されない限り、投稿を表示したいと考えています)。そのため、3 つのリストのそれぞれに何かが含まれているかどうかを確認し、含まれている場合は foreach 内で foreach を実行して、投稿用語の 1 つが選択したアイテムと一致するかどうかを確認します。ある場合は、show=true のままにし、そうでない場合は false にします。他の 2 つのリストに対してこれを行います。これら 3 つのチェックの後、show がまだ true の場合は、3 つのフィールド (3 つが該当する場合) ごとに少なくとも 1 つのアイテムが必要であり、false の場合は投稿を非表示にします。

コードは次のとおりです。

$(".post-link").each(function(index){
    var show = true;

    //Get all the post's terms from its hidden tag div and store in an array
    var terms = $(this).find(".tags").attr('class').split(" ");
    //Cut off the first two items ('hidden' and 'tags')
    terms.splice(0,2);

    //If interests is set
    if(typeof interests[0] != 'undefined'){
        var found = 0;
        $.each(interests, function(index, value){
            $.each(terms, function(index2, value2){
                if(value == value2){ found++; }
            });
        });
        if(found < 1){
            show = false;
        }
    }

    //If type is set
    if(typeof type[0] != 'undefined'){
        var found = 0;
        $.each(type, function(index, value){
            $.each(terms, function(index2, value2){
                if(value == value2){ found++; }
            });
        });
        if(found < 1){
            show = false;
        }
    }

    //If experience is set
    if(typeof experience[0] != 'undefined'){
        var found = 0;
        $.each(experience, function(index, value){
            $.each(terms, function(index2, value2){
                if(value == value2){ found++; }
            });
        });
        if(found < 1){
            show = false;
        }
    }

    if(!show){
        $(this).hide();
    }
});
于 2012-05-05T06:25:29.460 に答える