我想知道如何编写一个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是否有魔法。
问候。
答案 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();