2010-06-14 12 views
7

Ich möchte die Anzahl der unmittelbaren Kinder, die ein Element hat, und dann die Klasse eines Kindes in einem bestimmten Index bekommen. Etwas wie:Wie Zugriff auf Kindelement von Kindern()?

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

Ich denke, die Syntax für .children() ist in Ordnung, aber wie bekomme ich das indizierte Element aus sie in jquery Stil?

Dank

Antwort

11

children Die Methode gibt ein arrayartige Objekt, die ebenen DOM Knoten enthält. Sie müssen ein enthaltenes Element mit jQuery umbrechen oder mithilfe der eq(index)-Methode abrufen, um jQuery-Methoden wie hasClass darauf anwenden zu können.

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

jQuery wickelt sie aus offensichtlichen Leistungsgründen nicht standardmäßig ein.

Wenn Sie Firebug oder die Chrome/Webkit-Entwicklertools verwenden, erhalten Sie eine Ausnahme, wenn Sie versuchen, eine nicht definierte Methode für ein Objekt aufzurufen. Siehe example. Stellen Sie sicher, dass Sie die Konsolenausgabe sehen :)

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

„Kinder enthält eine Reihe von einfachen DOM-Knoten“ das ist irreführend. 'children()' ist ein jQuery-Set wie alles andere. Wenn Sie '.eq (3)' anstelle von '[3]' verwenden, würde dies ein jQuery-Wrapper-DOM-Element wie erwartet zurückgeben. Jede jQuery-Ergebnismenge gibt beim Zugriff mit '[]' ein DOM-Element zurück. –

+0

Grundsätzlich 'children.eq (index) .hasClass (" testClass ")' ist, wie Ihre Antwort geschrieben werden sollte. –

+0

@Doug - Die Anweisung "enthält ein Array von einfachen DOM-Knoten" ist nicht vollständig korrekt. jQuery gibt ein * array-like * -Objekt zurück, das DOM-Knoten enthält, die nach Zahl wie in einem Array indiziert sind. Korrigieren Sie mich auch, wenn ich falsch liege, aber gab es nicht eine Zeit, in der jQuery alle DOM-Knoten standardmäßig umbrochen hat, bevor sie das Wrapping zugunsten der Leistung fallen gelassen hat? – Anurag

2

Es tut mir leid, aber ich fand Ihre Frage etwas verwirrend. Ist das was du willst?

Das ruft den Child-Index des Elements mit einer bestimmten Klasse, keine Schleife benötigt.

Wenn Sie jedoch die Klasse müssen (aber haben bereits den Index) dies dann tun:

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

Ich denke, Ihre zweite Antwort ist, was OP anstrebt. – user113716

+0

@patrick Cool. Ich dachte, ich verstehe die Frage, aber das Codebeispiel damit verwirrt mich :) –

0

Verwendung eq():

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

Will-do, kann ich mehrere Klassennamen in hasClass() gleichzeitig liefern? Wie .hasClass ("Schwein Pferd Ziege")? – user291701

Verwandte Themen