2010-06-08 29 views
8

jQuery最佳實踐問題。jQuery:它是什麼「禁止」在純Javascript中做

我正在寫一個非常強大的jQuery網頁。我是jQuery的新手,並注意到它的強大功能,但是當我帶着沉重的JavaScript經驗和知識時,我的問題是:應該在jQuery中做什麼以及在純javascript中做什麼。

例如,有一些回調發送一個普通的DOM對象作爲參數。我應該使用還是應該包裝它(如$(this))。

這樣做是否重要,如果我這樣做。x = y或$(this).attr(「x」,y)。

+2

.attr()用於html屬性... this.x不能像那樣工作。你可以用這種方式修改dom屬性,但是沒有那麼多的用法。 – colinmarc 2010-06-08 03:30:23

回答

4

如果你的函數接收一個DOM對象,你並不需要爲DOM對象的任何jQuery的功能,那麼就沒有必要讓它轉化爲jQuery對象。例如,如果您收到複選框對象,則可以在不使用任何jQuery的情況下檢查checked屬性。

但是,如果您需要導航到從複選框不同的元素,它可能是值得它轉換:

的jQuery(如做其他庫)與本機JS融爲一體順利。如果您需要額外的功能,請增加相關對象。

至於你的最後一個問題:你可能會發現data函數有用,以避免非標準的DOM屬性。如果您在您的問題性質x實際上是一個有效的DOM屬性,你可以寫任何this.x = y$(this).attr('x', y),IMO也沒有多大意義。但是,如果x不是DOM屬性,使用

$(this).data('key', value) 

這樣的話,你可以存儲與DOM元素,其中value可以是任意的原始值或對象任意鍵 - 值對。

3

我認爲這是一個判斷的呼籲。使用你的常識。

舉例來說,如果你有1000次div的頁面上,你可能不希望把它包在$(..)

$('div').click(function() { 
    this.id = Random.guid(); // instead of $(this).attr('id', Random.guid()); 
}); 

至於其他任務,只要你明白的jQuery正在做,你可以堅持它只是爲了一致性,但要注意性能問題,像上面的例子。

正如@colinmarc所提到的,有時候jQuery會模糊元素屬性和對象屬性之間的區別,這可能會導致錯誤和錯誤。

0

當你使用jQuery,它總是返回jQuery的實例,除非您的OBV使用類似VAL()的函數;

我們使用$(本)的原因。價值,而不是THIS.VALUE是確保這是jQuery的實例。

如果你的代碼中的某個地方設置了一個名爲my_link的變量witch等於一個DOM對象而不是一個jQuery函數..在你的應用程序中進一步my_link.val()會導致錯誤,但是通過執行$(my_link) .val()會向你保證val函數可用。作爲$()返回一個jQuery的實例。

對不起,我以前的文章錯過理解。

+1

我不明白這與問題有什麼關係。 – Anurag 2010-06-08 03:42:34

+0

對不起,我原來錯過了這個問題。 – RobertPitt 2010-06-08 03:48:15

0

由於jQuery對象比自然JS DOM節點具有更豐富的功能,如果你在圍牆上,那麼你也可以用jQuery來包裝。 JQuery非常輕量級,沒有太多理由不使用jQuery對象。

這樣做是否重要,如果我這樣做.x = y或$(this).attr(「x」,y)。

本機將更快,但你可能會花更多的時間在其他代碼 - DOM遍歷或建築物。在這個具體的例子中,前者更簡潔,所以我會選擇它。由於jQuery非常輕巧,我傾向於流暢地來回切換。

這裏是我們跟隨其他準則:

  • 回調,像click處理程序,你需要遵循API--通常是一個DOM節點。你編寫的類似的代碼應該也只是採用DOM節點。但是如果你有一個項目列表,總是使用一個jQuery對象。
  • 對於大多數代碼,我嘗試查看是否可以將代碼構造爲jQuery插件 - 將一些轉換應用於一組DOM節點。如果你能做到這一點,你會從插件架構中獲得一些指導。
  • 我使用jQuery的綁定/觸發機制,因爲它非常靈活和低耦合。
  • 爲了保持代碼的正確性,我建議使用美元符號命名前綴jQuery對象。例如,var $this = $(this);。儘管過度調用$()並不是什麼大事,但如果你調用它太多,它最終會看起來很sl py。

希望這會有所幫助。

相關問題