2015-09-19 88 views
-2

我正在學習JS/jQuery和寫一個倒數計時器的應用程序。有我的代碼中的幾個地方,我需要使用相同的jQuery setter方法表達改變DOM:我可以存儲jQuery setter表達式作爲變量嗎?

$("#minutes").text(('0' + getTimeRemaining().minutes).slice(-2));

這工作得很好,但如果我覺得我應該存儲在這個變量,因爲D.R.Y.

所以我增加了以下我的代碼:

var displayMinutes = $("#minutes").text(('0' + getTimeRemaining().minutes).slice(-2));

發生的事情是一個)設置器在點來看,我聲明變量和b)宣佈displayMinutes什麼也不做(儘管它記錄一個對象)和(c)displayMinutes()也不做任何事情(並且記錄它不是函數)。

我的問題主要是 - 是否有可能將這樣的表達式作爲變量存儲 - 其次,我在這裏一般缺少關於jQuery對象的內容?

我唯一的谷歌搜索的線索是,這可能是用'this'和綁定方法?

希望有什麼見解。謝謝。

+1

'displayMinutes'是'$(「#分鐘」)'......這就是jQuery鏈接的工作原理。任何setter將按照文檔返回'jQuery'對象 – charlietfl

回答

1

你可以在這樣的功能把它包裝:

function setMinutes(){ 
    $("#minutes").text(('0' + getTimeRemaining().minutes).slice(-2)); 
} 

,只是每次調用setMinutes。但這不會提高性能。最好的辦法可能是這樣的:

var setMinutes = (function(){ 
    var minutes = $("#minutes"); 
    return function(){ minutes.text(('0' + getTimeRemaining().minutes).slice(-2)); } 
})() 

現在,你仍然可以調用setMinutes,但不是每一個jQuery的我們所儲存它closure內的時間,這意味着我們的代碼又加快一點點重建你分鐘元素。如果這看起來很複雜,它所做的是定義並立即調用function。此功能將依次返回返回另一個function,已知道一個名爲minutes的變量,這意味着它不必再計算,從您的執行時間削減寶貴的秒。

你存儲的變量,順便說一下,是不是功能但的結果說功能。這就是爲什麼它不能像你現在這樣做。

相關問題