将jquery函数作为变量参数传递给自定义函数

时间:2014-06-27 14:38:01

标签: jquery function height width argument-passing

我正在编写一个计算最大高度/宽度的函数,并使元素具有相同的高度/宽度。我想将2个参数传递给此函数:

1. The selector, which can be(element, class )
2. jQuery `width()` / `height()` function

并且期望的结果应该是看起来像的函数。

Eg 1. equalDimensions('.class', width() ); OR
Eg 2. equalDimensions( div, height() );

并根据传递给函数width() / height()的内容,它将计算最大高度/宽度,并使所有作为第一个参数传递的选择器等于宽度/高度。

作为jQuery的新手,我正在努力将其放入代码中。

这是我到目前为止所尝试的......

var equalDimension = function(  selector,  fn ){
    var dimension = fn();
    var biggestDimemsion = 0;
    $(selector).each(function(){
        if($(this).dimension > biggestDimemsion){
            biggestDimemsion = $(this).dimension;
        }
    });
    $(selector).each(function(){
        $(this).dimension(biggestDimemsion);
    });
};

2 个答案:

答案 0 :(得分:5)

我写了一个快速的例子,说明我将如何解决这个问题:

http://jsfiddle.net/3NRah/

var equalDimension = function (selector, fn) {
    var $elements = $(selector),
        dimensions = $elements.map(function (i) {
            return $elements.eq(i)[fn]();
        }),
        maxDimension = Math.max.apply(Math, dimensions);
    $elements[fn](maxDimension);
};

equalDimension('div', 'height');

这假设您传递的是jQuery函数的名称,而不是函数本身。如果你想传递实际的功能,它将如下所示:

http://jsfiddle.net/3NRah/1/

var equalDimension = function (selector, fn) {
    var $elements = $(selector),
        dimensions = $elements.map(function (i) {
            return fn.call($elements.eq(i));
        }),
        maxDimension = Math.max.apply(Math, dimensions);
    fn.call($elements, maxDimension);
};

equalDimension('div', $.fn.height);

编辑:在为此创建一个干净的UI方面,我最有可能在下面的JSBin中添加它。

http://jsbin.com/pogujozane/edit?js,output

$.fn.equalDimension = function (fn) {
    var $elements = $(this),
        dimensions = $elements.map(function (i) {
            return $elements.eq(i)[fn]();
        }),
        maxDimension = Math.max.apply(Math, dimensions);
    $elements[fn](maxDimension);
};
$.fn.equalHeight = function () {
  return $(this).equalDimension('height');
};
$.fn.equalWidth = function () {
  return $(this).equalDimension('width');
} 

因此它可以被称为:

$('div').equalHeight();

答案 1 :(得分:0)

你应该通过一个sting而不是一个函数来做这样的事情:

var equalDimension = function(  selector,  fn ){
    var dimension = fn === 'width' ? 'width' : 'height'; //Prevent from runing any other jQuery functions
    var biggestDimemsion = 0;
    $(selector).each(function(){
        if($(this)[dimension]() > biggestDimemsion){
            biggestDimemsion = $(this).dimension;
        }
    });
    $(selector).each(function(){
        $(this)[dimension](biggestDimemsion);
    });
};

equalDimension('selector', 'width');

旁注,第二个可以忽略:

var equalDimension = function(  selector,  fn ){
    var dimension = fn === 'width' ? 'width' : 'height'; //Prevent from runing any other jQuery functions
    var biggestDimemsion = 0;
    $(selector).each(function(){
        if($(this)[dimension]() > biggestDimemsion){
            biggestDimemsion = $(this).dimension;
        }
    });
    $(selector)[dimension](biggestDimemsion);
};