2012-01-23 27 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

相关问题