2011-09-05 79 views
10

我想知道如何编写一个jquery语句来获取匹配元素属性的最大值。jquery中的.Max()相当于什么

在LINQ

我们说这样的事情:

var maxHeight = list.Max(a=> a.Height); 

什么是jQuery来做到这一点的最好方法是什么?

作为一个例子,让我们说,我们要选择所有的最大数值:一个容器内的文本元素:

var allInputs = $("#container :text"); 
// how to get the max of parseInt(item.val())? 
具有高于所有元素的循环过程的

是一个选项,但我很好奇,知道是否有一个与jQuery的魔术。

问候。

回答

8

基于这里所有的对话和我在网上的搜索,我们可以说(目前)没有强大的内置jQuery方法来计算.max()和.min()与选择器匹配的元素的属性。

从什么伊戈尔建议我想出了它,如果你需要使用的.max(您可以添加到您的项目)以下两个jQuery函数和.min()功能一遍又一遍:

$.fn.max = function(selector) { 
    return Math.max.apply(null, this.map(function(index, el) { return selector.apply(el); }).get()); 
} 

$.fn.min = function(selector) { 
    return Math.min.apply(null, this.map(function(index, el) { return selector.apply(el); }).get()); 
} 

// Usage: 

var maxWidth = $("a").max(function() {return $(this).width(); }); 
var minWidth = $("a").min(function() {return $(this).width(); }); 

在这里看到一个演示:http://jsfiddle.net/NF7v7/3/

10

一个可能的解决方案是使用map功能,然后Math.max的结果:

var values = $.map($("input:text"), function(el, index) { return parseInt($(el).val()); }); 
var max = Math.max.apply(null, values); 

如果需要它,它可能会被写在一行。

小提琴:http://jsfiddle.net/WuVLr/1/

UPDATE:

或者你可以用这种方式适用map

var values = $("input:text").map(function(index, el) { return parseInt($(el).val()); }).get(); 
+0

为什么'$ .MAP()'和'不.MAP()'? –

+0

添加到回答,但它不是更短 –

+0

如果我正确阅读[文档](http://api.jquery.com/jQuery.map/),类似数组的对象(如'$('input :text')')必须在被传递到'$ .map'之前转换成实际的数组。另一方面'。map()'专门用于jQuery对象。这意味着'.map()'是更好的选择... –

0

这可能是在使用数组中的非直接的解决方案:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
    <head> 
     <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script> 
     <script type="text/javascript"> 
      $(document).ready(function() { 
       var mySizes=new Array(); 
       $("input[type=text]").each(
        function(intIndex){ 
         mySizes[intIndex] = $(this).val().length; 
        }); 
       var largest = mySizes.sort(function(a,b){return a - b}).slice(-1); 
       alert("The maximun length is: " + largest); 
      }); 
     </script> 
    </head> 
<body> 
    <input type="text" value="Test"id="1"/> 
    <input type="text" value="Goodbye"id="2"/> 
    <input type="text" value="Bye"id="3"/> 
    <input type="text" value="Hello"id="4"/> 
    <input type="text" value="Hello world!"id="5"/> 
    <input type="text" value="Hi"id="6"/> 
</body> 
</html> 

Regards

0

我是开源项目的作者http://www.jinqjs.com 使用jinqJs你可以做到以下几点:

您可以通过这样得到最大:

var result = jinqJs().from([2,5,4,6,7,8,3]).orderBy([{sort: 'desc'}]).top(1).select(); 

或通过这样的分:

var result = jinqJs().from([2,5,4,6,7,8,3]).orderBy([{sort: 'desc'}]).bottom(1).select(); 
相关问题