2011-01-10 24 views
1

Was ist falsch mit dem folgenden Code. Ich versuche, Kinder einer bestimmten ID zu wiederholen und nur bestimmten Kindern eine CSS-Klasse zuzuweisen.jquery wählen Sie ein bestimmtes Kind

var firstRC = $("#id_1").children(); 
    for(j=0;j<firstRC.length;j++) { 
     if(j>5) { 
     $("#id_1:eq(j)").addClass("cssClass"); 
     } 

    } 

Antwort

1

Da die j in der jQuery-Selektor ist nur ein Teil der Zeichenfolge und keine Variable. Sie müssen das Selektor-String durch Verkettung erstellen:

var firstRC = $("#id_1").children(); 
    for(j=0;j<firstRC.length;j++) { 
    if(j>5) { 
     $("#id_1 :eq(" + j + ")").addClass("cssClass"); 
    } 
    } 

Darüber hinaus müssen Sie ein Leerzeichen vor :eq, oder Sie werden das j-te Element mit dem id id_1 und nicht dem j-te Kind in einer wählen Element mit id_1.

Allerdings machen Sie es weit zu kompliziert. jQuery hat eine gt Wähler so dass Sie alle Elemente auszuwählen * g * rößere * t * han einen bestimmten Index:

$("#id_1 :gt(5)").addClass("cssClass"); 

Wenn Sie über mehrere Elemente Schleife brauchen sollten Sie cÜberprüfen aus each Methode jQuery , das ist viel besser einfacher zu verwenden als eine for Schleife. Innerhalb der each Schleife bezieht sich this auf das aktuelle Element.

Beispiel:

$("#id_1").children().each(function(index) { 
    if (index > 5) 
     $(this).addClass("cssClass"); 
}); 
+0

'viel better'? In Bezug auf die Leistung ist eine "for-Schleife" in der Tat viel besser: http://jsperf.com/for-loop-vs-each – jAndy

+0

True. Wenn Leistung ein Problem ist, würde ich jQuery überhaupt nicht empfehlen. – RoToRa

+0

Sie können jQuery verwenden, auch wenn Leistung wirklich wichtig ist. Wie auch immer, jede 'funktionale' Schleife ist ziemlich langsam im Vergleich zu nativen' for' oder 'while' Loops. Ich war nur gestört durch die relative Aussage 'viel besser als (..)' – jAndy

1

Ihr Problem ist, dass die Variable j als eine Zeichenfolge ist. Sie müssen es in den JavaScript-Code zurückbringen.

var firstRC = $("#id_1").children(); 
for(j=0;j<firstRC.length;j++) { 
    if(j>5) { 
    $("#id_1:eq(" + j + ")").addClass("cssClass"); 
    } 
} 

Natürlich, wenn Sie versuchen, die Klasse für alles setzen mehr als 5 können Sie dies tun:

$("#id_1 :gt(5)").addClass("cssClass"); 

Beispiel: http://jsfiddle.net/jonathon/8sydw/1/

Verwandte Themen