3

这是我遇到的一个 jQuery 问题,并且总是必须使用我不引以为豪的方法来解决。

我正在尝试存储一组元素以供以后评估。问题是每次我尝试访问并对其应用任何功能时,错误控制台都会报告它不是一个功能。我确信我对 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
4

2 回答 2

6

您正在尝试从 HTMLElement 中调用 jQuery 方法。尝试将元素引用包装在一个新的 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();
于 2012-05-25T04:03:25.907 回答
0

您可以直接在 jquery 集合对象上使用 each 方法。所以做同样事情的另一种方法可能是:

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

虽然选择问题,但在处理 jQuery 集合时,我总是更喜欢这种方法。

于 2012-05-25T04:51:07.397 回答