2013-09-01 46 views
1

誰能解釋的jQuery .grep().grep()使用jQuery陣列的回報只是最後一個數字

的這種行爲我做一個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]); 
}); 

FIDDLE

+0

'a^='小';'? –

+0

@dystroy,有些元素有許多類,我試圖「只」以「小」開頭。這是錯誤的方式? – Rikard

回答

3
a ^= 'small'; 

不像你想象的那樣,是一個操作員告訴我a是以開頭的但

a = a^'small' 

返回

a^'small' 

這是0a不能被轉換爲數字。

你所做的是你過濾從類的字符數組作爲一個字符串,你返回第一個是一個數字,因此你的結果。

在你第一次迭代中,如果你想獲得的所有類開始與 '小',做你的過濾相當於

$.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); 
}); 
+0

有趣,所以做錯了(因爲我認爲'^ ='會給別的東西),我實際上會返回一個有數字的類的第一個數字。 – Rikard

+0

你也可以做'return a == + a'。 –

+0

順便說一句,在這種情況下不'indexOf()'需要'^ ='? (我看它不是通過測試你的代碼,但不明白爲什麼)。 – Rikard

相關問題