【问题标题】:Trouble filtering array with conditions使用条件过滤数组时遇到问题
【发布时间】:2014-07-15 18:35:04
【问题描述】:

我正在尝试使用一个类作为每个集合的键来过滤不同样本集的数组,以便 js 知道从具有存储样本位置的变量中提取什么。目前,如果我登录,例如 set1,它只返回最后一个位置。 hasClass 方法也没有找到设置的类。总而言之,我认为我在逻辑上走在正确的道路上,但我可能在方法和效率方面混淆了一些事情。我尝试在这方面寻找解决方案一段时间无济于事,所以我在这里。感谢您的帮助。

<div class="swatches set1">Swatches</div>
<div class="swatches set2">Swatches</div>
<div class="swatches set3">Swatches</div>
var swatches = [
"swatch1.png",
"swatch2.png",
"swatch3.png",
"swatch4.png",
"swatch5.png",
"swatch6.png",
"swatch7.png",
"swatch8.png"
];    

var set1 = swatches[3,4,2];
var set2 = swatches[5,1,2];
var set3 = swatches[7,1,2];    

$('.swatches').each(function(){    
    if($(this).hasClass('set1')){
        for(i=0;i<set1.length;i++){
        $(this).append(set1[i]);
        }
    }

    if($(this).hasClass('set2')){
        for(i=0;i<set2.length;i++){
        $(this).append(set2[i]);
        }
    }

    if($(this).hasClass('set3')){
        for(i=0;i<set3.length;i++){
        $(this).append(set3[i]);
        }
    }        
});

http://jsfiddle.net/NCF92/10/

【问题讨论】:

  • 选择$(this) 而不是$this...
  • 将 $this 的所有实例更新为 $(this)

标签: jquery arrays each


【解决方案1】:

您的集合数组语法无效。

要使用swatches 数组中的元素创建一个数组,它需要如下所示:

var set1 = [swatches[3],swatches[4],swatches[2]];

【讨论】:

    【解决方案2】:

    需要注意的两件事:

    1. $this 应为 $(this),如评论所述
    2. 这样做:var set1 = [swatches[3],swatches[4],swatches[2]];

    这是工作代码:

    var swatches = [
    "swatch1.png",
    "swatch2.png",
    "swatch3.png",
    "swatch4.png",
    "swatch5.png",
    "swatch6.png",
    "swatch7.png",
    "swatch8.png"
    ];
    
    
    var set1 = [swatches[3],swatches[4],swatches[2]];
    var set2 = [swatches[5],swatches[1],swatches[2]];
    var set3 = [swatches[7],swatches[1],swatches[2]];
    console.log(set1);
    
    
    $('.swatches').each(function(){
    
        if($(this).hasClass('set1')){
            for(i=0;i<set1.length;i++){
            $(this).append(set1[i]);
            }
        }
    
        if($(this).hasClass('set2')){
            for(i=0;i<set2.length;i++){
            $(this).append(set2[i]);
            }
        }
    
        if($(this).hasClass('set3')){
            for(i=0;i<set3.length;i++){
            $(this).append(set3[i]);
            }
        }
    
    });
    

    还有DEMO

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-18
      • 2021-04-13
      • 1970-01-01
      • 1970-01-01
      • 2013-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多