1

谁能解释 jQuery .grep()的这种行为

我用这个元素名称制作了一个 jQuery 对象数组:

<div class="small1 other">S1</div>
<div class="small2">S2</div>
<div class="small3">S3</div>
<div class="small4 other">S4</div>
<div class="small5">S5</div>
<div class="small6">S6</div>

然后在里面运行each一个.grep()函数。

我想知道为什么 console.log() 记录1/ 2/3等而不是small1/ small2/small3等......

$('div[class^="small"').each(function () {
    var this_class = $(this).prop('class');
    var filter = $.grep(this_class, function (a) {
        return a ^= 'small';
    });
    console.log(filter[0]);
});

小提琴

4

1 回答 1

3
a ^= 'small'; 

正如您似乎认为的那样,不是一个告诉 ifa'small'but开头的运算符

a = a ^ 'small'

返回

a ^ 'small'

这是无法转换为数字的0时候。a

您所做的是将类中的字符数组过滤为字符串,然后返回第一个数字,即结果。

在您的第一次迭代中,您的过滤相当于

 $.grep(["s", "m", "a", "l", "l", "1"], function(a) { return a ^='somestring' })

返回

 ['1']

如果您想获得所有以“小”开头的课程,请执行

 $('div[class^="small"').each(function(){
      var filter = $.grep(this.className.split(' '), function(a) {
           return a.indexOf('small')===0;
      });
      console.log(filter);
 });
于 2013-09-01T09:25:32.467 回答