2015-11-05 109 views
0

我在找一個元素下的所有<a>標籤。 後來我發現每個<a>標籤的href並獲得具有這些ID的元素:使用JQuery查找和緩存元素

var links = element.find("a"); 
var panes = links.map(function() { 
    return $("#" + this.href.split("#")[1]); 
}); 

我會用我的代碼鏈接和窗格中的一個或多個。

  1. 什麼是緩存這些元素的最佳方法是什麼? 我不確定我是否做得對。

  2. 我添加了一個類第一鏈路和第一窗格:

    $(links[0]).addClass("active"); 
    panes[0].addClass("active"); 
    

    爲什麼我需要使用$(links[0])而不是links[0],使其工作?

回答

0

陣列解引用運算符([])jQuery中模仿的get()行爲,這將返回一個HTML元素,而不是jQuery對象。

引用:

的獲得()方法允許訪問每個jQuery對象的基礎的DOM節點。

每個jQuery對象也僞裝成一個數組,所以我們可以使用數組語法操作來獲得在列表項改爲:

console.log($("li")[ 0 ]);

相反,你可以使用.eq()將返回jQuery目的。例如:

links.eq(0).addClass("active"); 
0

你的困惑的根源在於你處理兩種不同類型的對象:

  • jQuery對象,它是特定於jQuery庫。
  • 陣列Node對象,這是舊的DOM API的一部分。

我會引用文檔:

jQuery對象包含文檔對象模型(DOM)的集合 元件已經從HTML字符串創建或從一個 文檔選擇。 [...]

jQuery對象本身的行爲很像一個數組;它具有長度 屬性和對象中的元素可以通過它們的 數字索引[0]到[長度-1]進行訪問。

所以linksjQuery實例,但links[0]Node一個實例。括號是圖書館提供的便利包裝。

(不知道你想知道關於緩存的內容。)