2012-12-22 70 views
4

嗨,我只是想知道是否可以使用像這樣的函數在javascript中構建數組。我有一個變量,使用$(ele).css('margin');獲得一系列元素的邊距。這將返回一個字符串0px 0px 0px 0px,我只希望左側的屬性檢查它是否已經動畫-=左側。javascript/jQuery匿名函數來填充數組

我可以做類似的功能,但我知道必須有更好的方法。這裏是我的例子:

var marginsLeft = new array(); 
$(ele).each(function(i){ 
    var r = $(i).css('margin').split(" "); 
    marginsLeft[i]=r[3]; 
}); 

我不完全確定如何簡化這一點,但我相信這是可能的:)提前致謝。

+0

你試過了嗎?它應該工作,是的。然而,只是獲得'css(「margin-left」)'可能會更容易... – Bergi

+0

'$(i)'不起作用,因爲第一個參數或['.each'](http://api.jquery .com/each /)是元素集中的索引。要獲取元素,可以使用'this'或第二個參數。 – mgibsonbr

回答

6

您可以使用$.map

var marginsLeft = $(ele).map(function() { 
    return parseInt($(this).css('margin-left'), 10); 
}).get(); 

更新:由@undefined指出的那樣,如果你想有一個規則排列你也應該在調用的結果.get 。否則,你將有一個jQuery包裹數組。它是類似數組的,因此它可以在許多上下文中用作數組,但在其他情況下不能使用(特別是,它可能沒有本地Array方法)。

另外,要將結果轉換爲數字,您可以使用parseInt(它將忽略字母並僅使用數字),記住要顯式顯示基數(10)。

+0

感謝我一直在尋找!謝謝:) – sourRaspberri

+2

'map'返回一個jQuery包裝數組,爲獲取基本數組,應該使用'get'方法。 – undefined

+0

不錯,'map'對我來說是新的,很高興知道,謝謝:-) – bukart

2

你可以使用css('margin-left')代替

+0

現在我感到很蠢。大聲笑,但我的問題是,是否有一種使用函數創建數組的方法。 'a = new array(function(r){return'blah';});'。有點類似於php函數array_map? – sourRaspberri

+0

請參閱mgibsonbr的答案,我推薦它 – bukart

3

看一看的docs for .each():回調函數的第一個參數是索引,陣列元件(DOM節點)可被訪問或者作爲第二個參數或this值。因此,使用

var marginsLeft = []; // literal shortcut for "new Array()" 
$(ele).each(function(i, el){ 
    marginsLeft[i] = $(el).css('margin-left'); 
}); 

您還可能有一個看.map() method,而是返回一個jQuery包裝對象,而不是一個數組。