2015-01-06 10 views
6

Come so per l'apprendimento Jquery, indice la funzione di jQuery può essere utilizzata:funzione Jquery Indice con la stringa di selezione

  • .index() // senza argomenti
  • .index(domObject) // argomento è un oggetto DOM
  • .index(JqueryObject) // argomento è un oggetto Jquery
  • .index("selectorString") // argomento è una stringa di selezione

Sto testando la funzione indice con argomento è una stringa di selezione.

html> body -:

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

script Jquery:

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

I risultati sono: 0 per index1 (corretto) e -1 per index2 (non corretto).

Quindi, la domanda è: perché non riesco a ottenere il valore indice corretto di div # id2?

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

+3

di swap che '$ ("# ID2") Indice ('nome.');.', che ottiene l'indice di ' # id2' nella raccolta '.name' – adeneo

+0

Quindi, perché non riesco a ottenere l'indice di .name nella raccolta # id2. (restituisce -1): D –

risposta

2

Non c'è errore qui, l'API è solo ... strano. Here's the documentation:

Se .index() viene chiamato su un insieme di elementi ed un elemento DOM o oggetto jQuery è passato in, .index() restituisce un intero che indica il posizione dell'elemento rispetto al passato collezione originale.

Se una stringa selettore viene passato come argomento, .index() restituisce un intero che indica la posizione del primo elemento all'interno jQuery oggetto rispetto agli elementi corrispondenti dal selettore. Se l'elemento non viene trovato, .index() restituirà -1.

quello che vuoi è così

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

Avere questa funzione si comporti in modi così diversi è molto confusa IMO.

+0

Fondamentalmente, sei corretto. $ ('# id2'). Index (". Name"); e $ ('# id1'). index (". name"); restituisce il risultato corretto e sembra che sia il modo di utilizzare la funzione indice con l'argomento stringa selettore. Ma un'altra cosa puoi spiegare: perché $ ('. Name'). Index ("# id1"); restituire l'indice corretto? È accidentalmente corretto? –

+0

Il primo elemento .name è # id1. Quindi l'indice del primo elemento .name nel set # id1 è 0. Sì, è accidentalmente corretto. Non sono sicuro che molti sviluppatori possano usare correttamente la funzione indice con argomenti al primo tentativo ... –

0

È possibile passare oggetto jQuery nel metodo index per fare questo lavoro:

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

Working Demo

+0

Sembra che la documentazione sia errata in quanto funziona, tuttavia i documenti dichiarano che è possibile fornire un selettore di stringhe. Potrebbe anche essere un bug in jQuery stesso. –

+0

Quello che hai fatto è usare il 3 ° metodo che ho menzionato sopra: .index (JqueryObject) // argomento è un oggetto Jquery –

+0

sì sì ..... –

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

dichiarazione 1 1.As si sa quando si utilizza qualsiasi selettore in jQuery è tornare primo elemento corrispondente 2.ora si tenta di trovare indice index("#id1") così ha trovato con successo in corrispondenza dell'indice 0 quindi return 0

dichiarazione 2 1.As si sa quando si utilizza qualsiasi selettore in jQuery è tornare primo elemento corrispondente 2. ora si tenta di trovare indice index("#id2") quindi è in grado di trovare qualsiasi elemento figlio con #id2 quindi reurn -1

+0

Spiacente, non penso che tu abbia ragione in questa affermazione "quando usi un selettore in jquery restituisce il primo elemento corrispondente". $ ('. name') restituisce un oggetto Jquery con 2 doms al suo interno (div # id1 e div # id2) –

Problemi correlati