2012-01-23 60 views
0

所以,這就是我想會的工作:jQuery,如何查找對象數組的最大寬度?

Math.max($j.map($j.makeArray($j(".rl_shell")), function(val, i){ 
    $j(val).width(); 
})); 

故障:

$j.isArray($j.makeArray($j(".rl_shell"))) 

返回true

,當我做到這

$j.map($j.makeArray($j(".rl_shell")), function(val, i){ 
     $j(val).width(); 
    }) 

我得到一個空陣列([])。

$j(".rl_shell") 

返回[DIV,DIV]

所以,我猜,我使用地圖錯了,但我在這裏使用的語法: http://api.jquery.com/jQuery.map/所以我不太確定是什麼交易是。

編輯:

按照一對夫婦的答案的建議,我想出了這一點:

$j.map($j.makeArray($j(".rl_shell")), function(val, i){ 
    return $j(val).width(); 
}); 

返回[0,950]

,但是當我添加Math.max周圍,我得到NaN =/

回答

4

想要獲得所有選定元素中最寬的元素嗎?

Math.max.apply(Math, $('selector').map(function(){ 
    return $(this).width(); 
}).get()); 
+0

我遇到過一個問題,我已更新我的問題以反映新問題。 – NullVoxPopuli

+0

爲什麼在最後添加.get()? – NullVoxPopuli

+0

'.get'將jQuery對象集合轉換爲本地數組。你必須爲'.apply'提供一個數組。因此'Math.max([0,950])'返回'NaN',而'Math.max.apply(Math,[0,950])'等價於'Math.max(0,950)'並返回'950' 。 – dfsq

2

你忘了returnmap回調:

Math.max($j.map($j.makeArray($j(".rl_shell")), function(val, i){ 
    return $j(val).width(); 
})); 
+0

呸,太習慣紅寶石不需要回報o.o – NullVoxPopuli

+0

我遇到一個問題,我已經更新了我的問題,以反映新的問題。 – NullVoxPopuli

2

除此之外,您還錯過了map回調return

您應該使用Math.max.apply(window, arr)獲取數組的最大值。

將一個數組直接傳遞給Math.max將返回NaN

的代碼會像下面:

Math.max.apply(window, $.map($('.rl_shell'), function() {return $(this).width();})); 
+0

哦,嘿,這正是我剛剛遇到的。 = d – NullVoxPopuli

相關問題