2013-05-02 114 views
-1

這是一個關於jQuery API的設計的問題,不是使用細節。爲什麼jQuery庫公開DOM元素?

爲什麼jQuery對象是DOM元素的集合而不是jQuery對象的集合?

僅處理jQuery對象將允許在整個代碼中以相同方式完成所有DOM操作。似乎大多數使用模式立即將DOM元素轉換爲jQuery對象。據我瞭解,預計會有很多DOM元素到jQuery對象的轉換,這就是爲什麼他們選擇了簡寫$函數。

爲什麼這樣呢?爲什麼不假設我們想通過jQuery來操縱DOM,並避免到處顯式轉換?

+6

不知道你在哪裏得到你的信息。 jQuery返回一個包含DOM節點集合的jQuery對象。返回的對象是'jQuery'的一個實例。 – zzzzBov 2013-05-02 17:44:18

+0

@zzzzBov推測他正在討論諸如傳遞DOM元素的'$ .fn.each'之類的東西。 – numbers1311407 2013-05-02 17:45:35

+0

'$(this)[0]'在被要求時仍然保留原始的JavaScript結構。這是將原始JavaScript與jQuery功能混合的非常強大的組合。 – 2013-05-02 17:47:54

回答

3

當不需要的時候創建一個jquery對象將是低效的。例如:

$("a").each(function(){ 
    console.log(this.href); 
}); 

因爲href是始終可用作爲一個DOMElement的屬性,這將是把它轉換成一個jQuery對象,並使用.attr的浪費。

對於jQuery來使每個jQuery對象,它必須爲它迭代的每個元素創建一個新的jQuery對象,如果你不需要它是一個jQuery對象,這是一種浪費。相同的思維過程可以應用於事件處理程序,過濾器方法和任何其他迭代元素的方法。

+0

除了不必要的開銷之外是否還有其他原因?轉換確實很昂貴,特別是對於現代瀏覽器? – treydavis 2013-05-02 18:01:05

+0

有一些額外的開銷,http://jsperf.com/jquery-eq-vs-get從jQuery對象開始獲取dom元素要比包含dom元素的jQuery對象快得多。 – 2013-05-02 18:15:06

+0

我明白了。快幾倍。所以jQuery被設計爲DOM選擇和一次處理幾個元素。爲了處理單個元素,請直接使用DOMElement。 – treydavis 2013-05-02 18:38:51

-1

jQuery對象允許您在任何Dom元素上使用各種有用的jQuery函數,這可以通過Dom遍歷函數實現。 無論您正在操作的相關jQuery對象如何,您仍然可以獲取原始的Dom元素。