2013-03-26 33 views
3

我正在嘗試在jQuery中編寫一個函數,該函數旨在支持不支持CSS calc屬性的瀏覽器。CSS的jQuery後備功能calc

我見到目前爲止以下內容:

function calc($element, $xy, $logic, $difference) { 
    var calc = $($object).$xy() $logic $difference; 
    return calc; 
} 

if ($.browser.msie && $.browser.version <= 8) { 
    var height = calc("body", "height", "-", "80"); 
    $("div#page").css("height", height); 
} 

我可以矇混過關,而無需一個函數這一次,但對於未來的參考,我覺得有這個功能將是非常有用的。

顯然這行:

var calc = $($object).$xy() $logic $difference; 

...是要失敗的,但我不知道如何將變量正確傳遞到它。

如果任何人對語法有任何建議,或者我應該如何寫這行,那就太棒了。

回答

7

你可以做這樣的事情:

function calc(selector, method, adjust) { 
    return $(selector)[method]() + adjust; 
} 

if($.browser.msie && $.browser.version <= 8) { 
    var height = calc('body', 'height', -80); 
    $('div#page').css('height', height); 
} 

一些注意該代碼:

  • 你並不需要在你的函數的參數$前綴。如果您正在編寫jQuery代碼,我建議僅在引用jQuery對象的變量上使用$前綴,例如,

    var $foo = $('#foo'); // cache jQuery object for later use 
    
  • 注意與[method]用方括號 - 這就是你如何能叫他的名字被存儲在一個變量的方法。

  • 我將數學運算和值合併成一個參數adjust。你可以做更有趣的事情,但最好能看到更多關於如何使用這些代碼的例子。

而且一個建議:如果你有編寫JavaScript做對即不支持CSS的鈣瀏覽器的大小,爲什麼不直接使用所有瀏覽器的JavaScript代碼?然後你只有一個代碼/樣式設置來調試,而不是兩個。

+0

太棒了!非常感謝你,再次提供語法建議,這非常有用。關於你的建議,是的,這似乎是合乎邏輯的方法。 – digiwig 2013-03-26 09:14:25