2010-06-14 47 views
7

我想获得一个元素所具有的直接子元素的数量,然后在特定索引处获取子元素的类。喜欢的东西:如何访问子元素()以外的子元素?

var index = 25; 
var children = $("#myListElement").children(); 
if (index < children.length) { 
    if (children[index].hasClass("testClass")) { 
     alert("hi!"); 
    } 
} 

我认为。孩子的语法()是好的,但如何获取索引元素从他们的jQuery的风格?

由于

回答

11

children方法返回阵列状对象,它包含普通DOM节点。你需要用jQuery包装一个包含的元素,或者使用eq(index)方法检索它,以便能够使用jQuery方法,如hasClass

if ($(children[index]).hasClass("testClass")) 

由于明显的性能原因,jQuery默认不打包它们。

如果您使用的是Firebug或Chrome/Webkit开发者工具,当您尝试调用对象的未定义方法时,您会遇到异常。见example。确保你正在看控制台输出:)

TypeError: Object #<an HTMLLIElement> has no method 'hasClass' 
+4

“儿童包含纯DOM节点的数组”,这是误导。 'children()'是一个像其他任何东西一样的jQuery集合。如果使用'.eq(3)'而不是'[3]',它会按预期返回一个jQuery包装的DOM元素。任何jQuery结果集,当用'[]'访问时返回一个DOM元素。 – 2010-06-14 03:24:26

+0

基本上'children.eq(index).hasClass(“testClass”)'是你的答案应该如何写的。 – 2010-06-14 03:25:51

+0

@Doug - 声明“包含一个普通的DOM节点数组”并不完全正确。 jQuery返回一个* array-like *对象,其中包含按数字索引的DOM节点,如同在数组中一样。另外,纠正我,如果我错了,但没有一段时间,jQuery没有包装所有的DOM节点默认包装之前,它的性能降低包装? – Anurag 2010-06-14 03:31:36

2

我很抱歉,但我发现你的问题有点混乱。这是你想要的吗?

var parent = $("#myitem"), 
    count = parent.children().length, 
    index = parent.children(".theClass").index(); 

获取具有特定类的项目的子索引,不需要循环。

但是,如果你需要的类(但已经有了指数),那么这样做:

var parent = $("#myitem"), 
    count = parent.children().length, 
    classN = parent.children()[3].className; 
+1

我认为你的第二个答案是OP的目标。 – user113716 2010-06-14 03:31:46

+0

@patrick酷。我认为我理解了这个问题,但是它的代码示例让我困惑:) – 2010-06-14 03:38:53

0

使用eq()

if (children.eq(index).hasClass("testClass")) 
+0

Will-do,我可以在hasClass()中提供多个类名来同时测试吗?像.hasClass(“猪马山羊”)? – user291701 2010-06-14 03:58:43