2010-06-14 126 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