当前位置: 首页 > 知识库问答 >
问题:

JavaScript/jQuery基于多个选择筛选结果

钱承允
2023-03-14

我试图为一个问题找到一个解决方案,在这个问题上,我需要根据多个标准来细化结果。我有多个选择标准:

  1. 水果-苹果橙子葡萄
  2. 蔬菜-番茄土豆西兰花
  3. 坚果-核桃花生杏仁
  4. 谷物-玉米小麦大米
  5. 香料-肉桂姜椒

用户只能从每个组中选择一个标准,例如,您可以选择苹果,但不能选择橘子或葡萄。参见jsfiddle。

然后我有多个篮子,里面有不同的物品。

 <div class="results">
      <div class="basket" data-keywords="apple broccoli peanut rice cinnamon">Result1</div>
      <div class="basket" data-keywords="apple tomato almond wheat pepper">Result2</div>
      <div class="basket" data-keywords="orange potato peanut rice ginger">Result3</div>
      <div class="basket" data-keywords="apple potato walnut corn ginger">Result4</div>
      <div class="basket" data-keywords="grape broccoli peanut corn ginger">Result5</div>
</div>

但问题是,这些结果必须基于多个标准进行精炼。例如,我选择了苹果,然后选择了番茄,所以我需要改进结果,使用户只能看到苹果和番茄的结果。

这是我的jsfiddle。目前只根据一个条件(关键字)过滤结果,但我需要包含其他条件。

共有1个答案

薛欣德
2023-03-14

用下面提到的脚本替换整个JavaScript/jQuery脚本,并根据ur需求检查更改

$(document).ready(function(){
    $('a.sortLink1').on('click',function(event){
    event.preventDefault(event);
    if ($(this).hasClass('selected')) {
        $(this).removeClass('selected');
        var SelectedAry = $(".selected");
        var flag = false;
        if(SelectedAry != undefined && SelectedAry.length == 0)
            flag = true
        sortResult(flag);
    }
    else{
        $('a.sortLink1').removeClass('selected');
        $(this).addClass('selected');
        var SelectedAry = $(".selected");

        var flag = false;
                    if(SelectedAry != undefined && SelectedAry.length == 0)
            flag = true
        sortResult(flag);

    }}
       );
    $('a.sortLink2').on('click',function(event){
    event.preventDefault(event);
    if ($(this).hasClass('selected')) {
        $(this).removeClass('selected');
        var SelectedAry = $(".selected");
       var flag = false;
                   if(SelectedAry != undefined && SelectedAry.length == 0)
            flag = true
        sortResult(flag);
    }
    else{
        $('a.sortLink2').removeClass('selected');
        $(this).addClass('selected');
        var SelectedAry = $(".selected");
        var flag = false;
                   if(SelectedAry != undefined && SelectedAry.length == 0)
            flag = true
        sortResult(flag);

    }}
       );

    $('a.sortLink3').on('click',function(event){
    event.preventDefault(event);
    if ($(this).hasClass('selected')) {
        $(this).removeClass('selected');
        var SelectedAry = $(".selected");
        var flag = false;
                    if(SelectedAry != undefined && SelectedAry.length == 0)
            flag = true
        sortResult(flag);
    }
    else{
        $('a.sortLink3').removeClass('selected');
        $(this).addClass('selected');
       var flag = false;
                    if(SelectedAry != undefined && SelectedAry.length == 0)
            flag = true
        sortResult(flag);

    }}
       );

    $('a.sortLink4').on('click',function(event){
    event.preventDefault(event);
    if ($(this).hasClass('selected')) {
        $(this).removeClass('selected');
        var SelectedAry = $(".selected");
     var flag = false;
                   if(SelectedAry != undefined && SelectedAry.length == 0)
            flag = true
        sortResult(flag);
    }
    else{
        $('a.sortLink4').removeClass('selected');
        $(this).addClass('selected');
        var SelectedAry = $(".selected");
      var flag = false;
                    if(SelectedAry != undefined && SelectedAry.length == 0)
            flag = true
        sortResult(flag);

    }}
       );
    $('a.sortLink5').on('click',function(event){
    event.preventDefault(event);
    if ($(this).hasClass('selected')) {
        $(this).removeClass('selected');
        var SelectedAry = $(".selected");
        var flag = false;
        if(SelectedAry != undefined && SelectedAry.length == 0)
            flag = true
        sortResult(flag);
    }
    else{
        $('a.sortLink5').removeClass('selected');
        $(this).addClass('selected');
        var SelectedAry = $(".selected");
       var flag = false;
                   if(SelectedAry != undefined && SelectedAry.length == 0)
            flag = true
        sortResult(flag);

    }}
       );

$('.basket').addClass('showMe');
positionThumbnails();

    });


        function sortResult (flag){

                $('.results .basket').each(function(){
                var thumbnailKeywords = $(this).attr('data-keywords');
                if(flag){
                $(this).addClass('showMe').removeClass('hideMe');
                }else{
                    var  mymatch = false;
                    var SelectedAry = $(".selected");
                    SelectedAry.each(function(){
                    var newKeyword = $(this).attr("data-keyword");

                    var test_regexp = new RegExp("\\b"+newKeyword+"\\b");
                    mymatch = thumbnailKeywords.match(test_regexp);
                        if(!mymatch)
                            return false;
                    });

                    if(mymatch){
                    $(this).addClass('showMe').removeClass('hideMe');
                    }else{
                    $(this).addClass('hideMe').removeClass('showMe');
                    }
                }
                });
                positionThumbnails();
            }

    function positionThumbnails(){
    $('.basket.hideMe').animate({opacity:0},500,function(){
    $(this).css({'display':'none'});
});
$('.basket.showMe').each(function(index){
    $(this).css('display','block').animate({opacity:1},500)
});

}

请检查您的要求和比较您的脚本也。有关jsfiddle的知识,请访问“http://jsfidle.net/lsmxc/32/”。请在你那边查一下。

 类似资料:
  • 问题内容: 我需要根据其他几个表中的某些匹配值从一个表中选择结果。我有以下表格: 我需要返回每个团队的所有教练和球员的姓名。我只使用过内部联接,似乎无法在此处使用那些内部联接,所以知道如何执行此操作吗? 问题答案: 这将为您提供教练: 这将为您提供球员: 因此,非优雅,简单的答案就是将所有内容与一起扔掉。

  • 我希望,如果我选择“mammals”,动物选择选项只显示值为1的选项data-animal_class。 我知道如何获得哺乳动物值,但我不知道如何使用过滤器 这是我的代码:

  • 本文向大家介绍基于jQuery选择器之表单对象属性筛选选择器的实例,包括了基于jQuery选择器之表单对象属性筛选选择器的实例的使用技巧和注意事项,需要的朋友参考一下 注意: 在某些浏览器中,选择器:checked可能会错误选取到<option>元素,所以保险起见换用选择器input:checked,确保只会选取<input>元素 以上这篇jQuery选择器之表单对象属性筛选选择器实例就是小编分享

  • 我有一个样式规则,当一个标记有两个类时,我想应用于它。在没有JavaScript的情况下,有什么方法可以执行此操作吗?换句话说: 只有在同时应用了和类时,我才要应用我的样式规则。

  • 我正在尝试从以下枚举中筛选,以根据随机机会选择其中一个值。 目前,我正在使用此代码选择一个值。 还有我的随机效用函数 目前,大多数情况下,它将准确地选择一个没有问题的层值。然而,大约在的时候,我会得到一个索引arrayoutofbounds。 我知道这是因为枚举中的机会分散到很远的地方(因为如果我向枚举添加更多值,机会不会像它们那样分散,那么就不会发生此异常)。 如何修复此错误?或者有更好的方法

  • 问题内容: 这是我的代码。为什么不起作用? 问题答案: 您正在加载DOM之前运行代码。 尝试这个: 现场示例: