2013-02-22 70 views
0
  • 下面的代碼工作用於查找最大高度
  • $.fn.代碼是用來添加此方法,因爲jQuery插件。
  • $.Map()回報新陣列
  • Math.Max.Apply回報最大數量從陣列

    $.fn.tallest = function(outer, margins) { 
    
        var fn = outer ? "height" : "outerHeight"; 
    
        return Math.max.apply(Math, $.map(this, function(el){return $(el)[fn](margins);})); 
    
    }; 
    
    //var images=jquery(img 1.jpg, img 2.jpg, img 3.ipg, img 4.jpg); 
    var slidesHeight = images.tallest(); 
    
  • 在此我有以下線的麻煩理解,但理解 .MAP()是如何工作的。
    $.map(this, function(el) {return $(el)[fn](margins);})

  • $(el)[fn](margins) //特別是這條線如何返回圖像的高度屬性。

+0

看起來你缺少表達式中的方括號。它應該可能是'$(el)[fn]'。 – 2013-02-22 13:47:18

+0

您可以使用點符號或括號表示訪問對象屬性。請參閱http://es5.github.com/#x11.2.1。 – 2013-02-22 13:52:52

回答

1

$(el)[fn]是調用$(el)的方法,其名稱在事先不知道的另一種方式。

$(el)[fn](margins)相同具有$(el).height(margins)$(el).outerHeight(margins)取決於其取決於參數outer的值fn的值。

outer是非falsy,fn"outerHeight"和上面的語句將相當於$(el).outerHeight(margins)

outer是falsy,fn"height"和上面的語句將相當於$(el).height(margins)

+1

'$(el).fn(margin)'有點誤導IMO。 – 2013-02-22 13:58:01

+1

@FelixKling - 意識到這一點,並在答案中予以糾正。 – techfoobar 2013-02-22 13:59:16

+0

@MattWhipple - 當然它並沒有真正意義上的翻譯。但從代碼閱讀的角度來看,這樣更容易解釋它。 – techfoobar 2013-02-22 13:59:53

0

*編輯加入費利克斯克林的筆記。

好吧,讓我們把它分解

$.map(this, function(el){return $(el)[fn](margins);}) 
  1. $.map是一個函數,在集合遍歷並執行傳遞函數的集合中的每個元素,並返回所有結果的陣列。
    例如:

    $.map([1,2], function(i) {return i + 1}) 
    [2, 3] 
    
  2. this指的是jQuery的集合$.fn.tallest()正在對集合。 例如:

    $('tr').tallest() // => this would refer to all the tr's within the dom 
    
  3. $(el)[fn]
    在JavaScript中,則可以調用綁定到具有規則的點表示法的接收器的功能,如$(e1).height或可以使用括號標記爲你提供的例子中的作用: $(e1)['height']

  4. $(e1)[fn](margins)
    margins在參數中傳遞給函數height()

希望這會有所幫助。

+1

我不會調用'$(el)[fn]'「* array * notation」。這與陣列沒有任何關係,它可能會讓經驗較少的讀者感到困惑。正式名稱是「**支架**符號」。 – 2013-02-22 14:35:41

+0

謝謝Felix,編輯 – 2013-02-22 15:18:11