来自元素数组的 jQuery min/max 属性

IT技术 javascript jquery arrays
2021-03-03 04:50:12

有没有一种简单的方法可以从 jQuery 中的元素数组中找到 min/max 属性?

我经常发现自己根据最小和最大对应项动态调整元素组的大小。大多数情况下,这与元素的宽度和/或高度有关,但我确信这可以应用于元素的任何属性。

我通常做这样的事情:

var maxWidth = 0;

$('img').each(function(index){
if ($(this).width() > maxWidth)
{
maxWidth = $(this).width();
}
});

但看起来你应该能够做这样的事情:

var maxWidth = $('img').max('width');

这个功能是否存在于 jQuery 中,或者有人可以解释如何创建一个基本的插件来做到这一点?

谢谢!

6个回答

使用Fast JavaScript Max/Min - John Resig

以 google、yahoo 和 bing 三个标志为例。

HTML

<img src="http://www.google.co.in/intl/en_com/images/srpr/logo1w.png" alt="Google Logo" /><br/>
<img src="http://l.yimg.com/a/i/ww/met/yahoo_logo_in_061509.png" alt="Yahoo Logo" /><br/>
<img src="http://www.bing.com/fd/s/a/h1.png" alt="Bing Logo" />

Javascript

$(document).ready(function(){
    // Function to get the Max value in Array
    Array.max = function( array ){
        return Math.max.apply( Math, array );
    };

    // Function to get the Min value in Array
    Array.min = function( array ){
       return Math.min.apply( Math, array );
    };

    //updated as per Sime Vidas comment.
    var widths= $('img').map(function() {
        return $(this).width();
    }).get();

    alert("Max Width: " + Array.max(widths));
    alert("Min Width: " + Array.min(widths));
});

PS:jsfiddle在这里

更简单:var widths = $('img').map(function() { return $(this).width(); }).get();演示:jsfiddle.net/HkxJg/1
2021-04-19 04:50:12

您可以apply在 OO 的上下文之外使用,无需扩展原型:

var maxHeight = Math.max.apply( null,
        $('img').map(function(){ return $(this).height(); }).get() );

我喜欢.map()在 jQuery 文档中作为示例发布的优雅解决方案,关于如何均衡 div 高度我基本上调整了它以使用宽度并制作了一个演示

$.fn.limitWidth = function(max){
  var limit = (max) ? 'max' : 'min';
  return this.width( Math[limit].apply(this, $(this).map(function(i,e){
   return $(e).width();
  }).get() ) );
};

// Use the function above as follows
$('.max-width').limitWidth(true); // true flag means set to max
$('.min-width').limitWidth();     // no flag/false flag means set to min
喜欢这个答案,谢谢!感谢: - 避免猴子修补数组 - 链接到 jQuery 文档中的示例 - 使用 jQuery 插件 💯
2021-05-15 04:50:12

看看计算插件,也许它可以帮助您解决问题。它们提供了许多数学函数,例如 DOM 元素上的 min、max 和 avg。

例子:

$("input[name^='min']").min();
$("input[name^='max']").max();

卷起作为插件返回宽度和高度的最小值-最大值:

// Functions to get the Min & Max value in Array

if (!Array.min) { Array.min = function( array ){return Math.min.apply( Math, array )} }
if (!Array.max) { Array.max = function( array ){return Math.max.apply( Math, array )} }

(function( $ ){     // Standard jQuery closure to hide '$' from other libraries.

    // jQuery plug-in to get the min and max widths of a set of elements

    $.fn.dimensionsMinMax = function(whnx) {

    /*
    ################################################################################

    Name
    ====

        dimensionsMinMax(whnx) - jQuery plug-in to get min & max width & height

    Parameters
    ==========

        whnx - A 4-element array to receive the min and max values of the elements:
            whnx[0] = minimum width;
            whnx[1] = maximum width;
            whnx[2] = minimum height;
            whnx[3] = maximum height.

    Returns
    =======

        this - so it can be "chained".

    Example
    =======

        var minmax = new Array(4);
        var number_of_images = $('img').dimensionsMinMax(minmax).class('abc').length;
        console.log('number of images = ', number_of_images);
        console.log('width  range = ', minmax[0], ' to ', minmax[1]);
        console.log('height range = ', minmax[2], ' to ', minmax[3]);

    ################################################################################  
    */
        var  widths = new Array(this.length);
        var heights = new Array(this.length);

        this.each(function(i){
            $this      = $(this);
             widths[i] = $this.width();
            heights[i] = $this.height(); 
        });

        whnx[0] = Array.min( widths);
        whnx[1] = Array.max( widths);
        whnx[2] = Array.min(heights);
        whnx[3] = Array.max(heights);

        return this;
    }

})( jQuery );   // End of standard jQuery closure.