在jquery中等效的.Max()是什么

时间:2011-09-05 11:10:12

标签: javascript jquery linq max

我想知道如何编写一个jquery语句来获取匹配元素的属性的最大值。

在LINQ中我们说的是这样的话:

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

在jquery中执行此操作的最佳方法是什么?

作为一个例子,假设我们想要选择容器内所有:text元素的最大数值:

var allInputs = $("#container :text");
// how to get the max of parseInt(item.val())?
当然,对所有元素进行循环是一个选项,但我很想知道jquery是否有魔法。

问候。

4 个答案:

答案 0 :(得分:13)

其中一种可能的解决方案是使用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/

<强>更新

或者,您可以这样申请map

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

答案 1 :(得分:9)

基于此处的所有会话和我在网上的搜索,我们可以说(此时)没有强大的内置jquery方法来计算元素匹配属性的.max()和.min()选择器。

根据Igor的建议,我想出了以下两个jquery函数,如果你需要反复使用.max()和.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/

答案 2 :(得分: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>

此致

答案 3 :(得分: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();