這是一個關於jQuery API的設計的問題,不是使用細節。爲什麼jQuery庫公開DOM元素?
爲什麼jQuery對象是DOM元素的集合而不是jQuery對象的集合?
僅處理jQuery對象將允許在整個代碼中以相同方式完成所有DOM操作。似乎大多數使用模式立即將DOM元素轉換爲jQuery對象。據我瞭解,預計會有很多DOM元素到jQuery對象的轉換,這就是爲什麼他們選擇了簡寫$
函數。
爲什麼這樣呢?爲什麼不假設我們想通過jQuery來操縱DOM,並避免到處顯式轉換?
這是一個關於jQuery API的設計的問題,不是使用細節。爲什麼jQuery庫公開DOM元素?
爲什麼jQuery對象是DOM元素的集合而不是jQuery對象的集合?
僅處理jQuery對象將允許在整個代碼中以相同方式完成所有DOM操作。似乎大多數使用模式立即將DOM元素轉換爲jQuery對象。據我瞭解,預計會有很多DOM元素到jQuery對象的轉換,這就是爲什麼他們選擇了簡寫$
函數。
爲什麼這樣呢?爲什麼不假設我們想通過jQuery來操縱DOM,並避免到處顯式轉換?
當不需要的時候創建一個jquery對象將是低效的。例如:
$("a").each(function(){
console.log(this.href);
});
因爲href是始終可用作爲一個DOMElement的屬性,這將是把它轉換成一個jQuery對象,並使用.attr
的浪費。
對於jQuery來使每個jQuery對象,它必須爲它迭代的每個元素創建一個新的jQuery對象,如果你不需要它是一個jQuery對象,這是一種浪費。相同的思維過程可以應用於事件處理程序,過濾器方法和任何其他迭代元素的方法。
jQuery對象允許您在任何Dom元素上使用各種有用的jQuery函數,這可以通過Dom遍歷函數實現。 無論您正在操作的相關jQuery對象如何,您仍然可以獲取原始的Dom元素。
不知道你在哪裏得到你的信息。 jQuery返回一個包含DOM節點集合的jQuery對象。返回的對象是'jQuery'的一個實例。 – zzzzBov 2013-05-02 17:44:18
@zzzzBov推測他正在討論諸如傳遞DOM元素的'$ .fn.each'之類的東西。 – numbers1311407 2013-05-02 17:45:35
'$(this)[0]'在被要求時仍然保留原始的JavaScript結構。這是將原始JavaScript與jQuery功能混合的非常強大的組合。 – 2013-05-02 17:47:54