当我在Chrome控制台中运行时,这不起作用:
($('.myClass > ul > li > a'))[0].closest('li')
TypeError: Object [object HTMLAnchorElement] has no method 'closest'
我认为$('。myClass> ul> li> a')返回了一个jquery对象数组,但是dir($('。myClass> ul> li> a'))显示了我它是一个单个jquery对象。是否有一种简单的方法可以像这样索引jquery对象,并在我只是在控制台中放屁时调用元素上的方法?或者我错过了关于jquery如何工作的基本信息?
答案 0 :(得分:0)
您正在尝试在DOM对象上使用jQuery函数,您必须使用.eq()来获取索引
$('.myClass > ul > li > a').eq(0).closest('li')
答案 1 :(得分:0)
[0]
返回一个DOM对象。
尝试这样做:
$('.myClass > ul > li > a').eq(0).closest('li')
答案 2 :(得分:0)
您需要通过jquery再次访问数组项以使用最接近的方法,如此...
$($('.myClass > ul > li > a')[0]).closest('li');
或......你可以使用选择器......
$('.myClass > ul > li > a').first().closest('li');
答案 3 :(得分:0)
您需要使用eq()
选择器。当您使用类似[i]的下标访问集合中的项目时,您实际上是从jQuery对象中解包它,并访问原始DOM节点,没有类似closest
的方法。
$('.myClass > ul > li > a').eq(0).closest('li')
答案 4 :(得分:0)
我认为$('。myClass> ul> li> a')返回了一个jquery对象数组
这就是误解的地方。它不返回一个jQuery对象数组,它返回一个单个 jQuery对象。该对象是一个伪数组(在这种情况下是DOM元素; jQuery对象可以包含其他内容,但99%的时候它们包含DOM元素)。所以[0]
为您提供了一个DOM元素,而不是一个没有closest
方法的jQuery对象。
如果你想要第一个,请使用jQuery的first()
或eq(0)
方法,它们为你提供jQuery对象中包含的第一个元素,或者你喜欢用[0]
获取元素然后用$()
来包装它。
// first:
$('.myClass > ul > li > a').first().closest('li')
// eq(0):
$('.myClass > ul > li > a').eq(0).closest('li')
// The long way (I wouldn't do this, just be comprehensive)
$($('.myClass > ul > li > a')[0]).closest('li')
您还可以使用jQuery的:first
选择器增强功能:
$('.myClass > ul > li > a:first').closest('li')
...但这样做意味着jQuery无法传递给浏览器自己的查询选择器。
答案 5 :(得分:-1)
您可以使用以下代码..
$('.myClass')
.children('ul')
.children('li')
.children('a')
.eq(0)
.closest('li')