我正在使用jQuery,我有一些问题。我有一堆具有特定类的DIV,其中第一个是我想要选择的。由于页面布局(长篇故事),我无法使用first-child
伪类。但是我可以通过将jQuery对象视为一个数组来获得相同的效果。我的问题是,这不会返回一个jQuery对象,而是一个普通的Javascript对象(特别是HTMLDivElement)。
$("#wizard div.collapsible")[0].addClass("selected");
失败,因为返回的对象没有addClass
函数。如果我使用.get(0)
,它也会失败。但是, 工作。
$($("#wizard div.collapsible")[0]).addClass("selected");
有没有办法在不必执行双jQuery选择器的情况下执行此操作? (这不是什么大问题,但它看起来有点令人困惑。)
答案 0 :(得分:8)
这是eq
和first
函数的功能。 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";