jQuery选择器不返回jQuery对象

时间:2013-06-12 17:49:41

标签: jquery

我正在使用jQuery,我有一些问题。我有一堆具有特定类的DIV,其中第一个是我想要选择的。由于页面布局(长篇故事),我无法使用first-child伪类。但是我可以通过将jQuery对象视为一个数组来获得相同的效果。我的问题是,这不会返回一个jQuery对象,而是一个普通的Javascript对象(特别是HTMLDivElement)。

$("#wizard div.collapsible")[0].addClass("selected");

失败,因为返回的对象没有addClass函数。如果我使用.get(0),它也会失败。但是, 工作。

$($("#wizard div.collapsible")[0]).addClass("selected");

有没有办法在不必执行双jQuery选择器的情况下执行此操作? (这不是什么大问题,但它看起来有点令人困惑。)

5 个答案:

答案 0 :(得分:8)

这是eqfirst函数的功能。 eq通过基于0的索引从选择中获取元素,而first只从选择中获取第一个元素。

$("#wizard div.collapsible").eq(0).addClass("selected");
$("#wizard div.collapsible").first().addClass("selected");

有趣的是,您实际上已经找到了获取包含来自另一个选择的第一个元素的jQuery选择的最快方法:

$($("#wizard div.collapsible")[0]).addClass("selected");

这不是一个好方法,因为它很难阅读,性能优势很小,但它 最快!

答案 1 :(得分:2)

[0]将是一个原始元素。这是正确和理想的行为。如果要保留jQuery对象,请使用$("selector:first")$("selector").first()$("selector").eq(0)来获取包装在jQuery对象中的第一个元素。

答案 2 :(得分:0)

$.eq应该这样做:

$("#wizard div.collapsible").eq(0).addClass("selected");

如果选择由多个元素共享的类,则将返回jQuery集合。尝试以数组形式访问该集合将返回原始对象,而$.eq已设计为返回jQuery对象以方便使用。

答案 3 :(得分:0)

尝试..

$("#wizard div.collapsible").eq(0).addClass("selected");

或者......第一个()

$("#wizard div.collapsible").first().addClass("selected");

答案 4 :(得分:0)

当你使用$('#wizard div.collapsible')[0]时,你会返回一个普通的JS对象,因为它是一个普通的JS对象,而不是一个jQuery对象,你不能在它上面使用jQuery方法。您可以使用双重选择器或使用$('#wizard div.collapsible')[0].className = "selected";