2012-05-25 30 views
3

以下是我遇到的並且總是必須使用我不感到自豪的方法解決的jQuery問題。將HTML元素的集合存儲在變量中供以後使用

我試圖存儲元素的集合,以便以後評估。問題是每次我嘗試訪問並應用任何函數時,錯誤控制檯都會報告它不是函數。我確信我對jQuery的工作原理有誤解。不過,我想指出正確的方向。這裏是我使用的代碼:

var products = $('ul.products'); 
var productLists = [] 
$.each(products, function (i) { 
    productLists[i] = products[i].children('li'); 
    console.log(productLists[i]); 
}); 

,這裏是我得到的錯誤:

Uncaught TypeError: Property 'children' of object #<HTMLUListElement> is not a function 

回答

6

你試圖調用一個jQuery方法關閉一個HTMLElement。嘗試在一個新的jQuery對象包裝元素參考:

productLists[i] = $(products[i]).children('li'); 

$.each,您可以使用關鍵字this引用正在處理的當前項目。因此,而不是調用products[i],你可以很容易地說this

$.each(products, function() { 
    productsList.push($(this).children("li")); 
}); 

還要注意的jQuery已經存儲到元素的引用的集合,當你做出一個選擇:

var productList = $("ul.products li"); // All list items in ul.products 

然後,您可以操縱所有這些都是你以後想要的。如果您需要自己的它們的副本,以確保他們以後會存在,當你想與他們亂動,您可以使用.clone

var productList = $("ul.products li").clone(); 
+0

令人難以置信。這自動工作。你爲我節省了很多未來的麻煩。非常感謝你。 – thiirteen

+0

@ user1416503我的榮幸。如果您發現它有幫助,請考慮對此解決方案進行投票,並考慮答案底部的最新內容。 – Sampson

+0

@JonathanSampson:OP不能只用6個代表來升級。不過,我給了你一個。 – apsillers

0

你可以直接使用jQuery的集合對象的每個方法。所以做同樣的事情的另一種方式可能是:

$('ul.products').each(function(){ 
    productsList.push($(this).children("li")); 
}) 

但選擇的問題,我總是喜歡這種方法處理jQuery收集。

相關問題