2015-01-06 9 views
6

Wie ich aus Jquery Lernen, Funktionsindex von jquery weiß verwendet werden kann:JQuery Indexfunktion mit Selektor-String

  • .index() // keine Argumente
  • .index(domObject) // Argument ist ein DOM-Objekt
  • .index(JqueryObject) // Argument ist ein jQuery-Objekt
  • .index("selectorString") // Argument ein Selektor-String ist

Ich teste Index-Funktion mit Argument ist eine Selektor-Zeichenfolge.

html -> Körper:

<div class="name" id="id1"> 
    <h2>Z</h2> 
    <h2>X</h2> 
</div> 
<div class="name" id="id2"> 
    <h2>A</h2> 
    <h2>B</h2> 
</div> 

JQuery Skripte:

var index1 = $('.name').index("#id1"); 
var index2 = $('.name').index("#id2"); 
alert(index1); 
alert(index2); 

Die Ergebnisse sind: 0 für index1 (richtig) und -1 für index2 (nicht korrekt).

Also, die Frage ist: Warum kann ich nicht den richtigen Indexwert von div # id2 bekommen?

jsfiddle: http://jsfiddle.net/GhPxD/60/

+3

Swap es '$ ("# ID2") Index ('name.');.', dass der Index des 'bekommt # id2' in der '.name' Sammlung – adeneo

+0

Also, warum kann ich nicht den Index von .name in der # id2 Sammlung bekommen (es gab -1 zurück): D –

Antwort

2

Es gibt keine Fehler hier ist, ist die API nur ... seltsam. Here's the documentation:

Wenn .index() für eine Sammlung von Elementen und einem DOM-Element oder jQuery Objekt übergeben aufgerufen wird, .index() gibt eine ganze Zahl die Position des übergebenen Elements in Bezug auf das Anzeige Originalsammlung.

Wenn eine Auswahlstring als Argument übergeben wird, .index() gibt ein ganze Zahl, die Position des ersten Elements innerhalb des Objekts relativ jQuery angibt, auf die Elemente durch den Wähler abgestimmt. Wenn das Element nicht gefunden wird, gibt .index() -1 zurück.

Was Sie wollen, ist also

$('#id2').index(".name"); 

diese Funktion verhalten sich so unterschiedliche Weise zu haben, ist IMO sehr verwirrend.

+0

Grundsätzlich sind Sie richtig. $ ('# id2'). Index (". Name"); und $ ('# id1'). index (". name"); gibt das korrekte Ergebnis zurück und es scheint, dass dies die Art der Verwendung der Indexfunktion mit dem Selektorstringargument ist. Aber eine weitere Sache können Sie erklären: Warum $ ('. Name'). Index ("# ID1"); den richtigen Index zurückgeben? Ist es versehentlich richtig? –

+0

Das erste Element .name ist # id1. Der Index des ersten .name-Elements in der Menge # id1 ist also 0. Ja, das ist versehentlich korrekt. Ich bin nicht sicher, dass viele Entwickler die Indexfunktion mit Argumenten beim ersten Versuch richtig benutzen können ... –

0

Sie können jquery Objekt in Index-Methode übergeben, diese Arbeit zu machen:

var index = $('.name').index($("#id2")); 

Working Demo

+0

Es scheint, dass die Dokumentation falsch ist, da dies in der Tat funktioniert, aber in der Dokumentation kann ein String-Selektor angegeben werden. Es könnte auch ein Fehler in jQuery selbst sein. –

+0

Was Sie getan haben, ist mit der 3. Methode, die ich oben erwähnt: .index (JqueryObject) // Argument ist ein Jquery-Objekt –

+0

ja in der Tat ..... –

-1
statement 1 : var index1 = $('.name').index("#id1"); 
statement 2 : var index2 = $('.name').index("#id2"); 

Anweisung 1 1.As wissen Sie, wenn Sie alle Wähler in jquery verwenden zurückgeben erste passende Element 2.Jetzt versuchen Sie Index von index("#id1") zu finden, so fand es erfolgreich bei Index 0, so dass es return 0

Anweisung 2 1.As Sie wissen, wenn Sie eine beliebigen Wähler in jquery verwenden zurückgeben erstes Anpassungselement 2. jetzt versuchen Sie Index index("#id2") so dass es nicht in der Lage zu finden, ein Kind-Element mit #id2 es zu finden, so reurn -1

+0

Tut mir leid, ich glaube nicht, dass Sie bei dieser Aussage richtig sind "wenn Sie einen Selektor in jquery verwenden, wird zuerst das passende Element zurückgegeben". $ ('. name') gibt ein Jquery-Objekt mit 2 Doms zurück (div # id1 und div # id2) –