2010-05-28 11 views
14

Ho un elenco standard ...Trovare il numero di li cliccato

 <ul> 
      <li><a href="#">blah 1</a></li> 
      <li><a href="#">blah 2</a></li> 
      <li><a href="#">blah 3</a></li> 
      <li><a href="#">blah 4</a></li> 
     </ul> 

E il mio jQuery:

$('ul li a').live('click', function() { 
    var parent = $(this).parent('li'); 
}); 

Quello che voglio sapere è la posizione della Li padre nell'elenco della link cliccato es cliccando su blah 3 mi darebbe 2, blah 4 darebbe 3 ecc.

Qualche idea?

risposta

30
$('ul li a').live('click', function() { 
    console.log($(this).parent('li').index()); 
}); 

Vi darà quello che vuoi, ma tenere a mente queste sono 0 indici basati - cioè la prima voce è indice 0, l'elemento ultima riga è 3.

jQuery index() method documentation

+0

Grazie per la modifica, Reigel – Erik

1

Il metodo index dovrebbe fare ciò che si desidera.

1
$(function() { 
    $('ul li a').live('click', function() { 
     var parent = $(this).parent('li'); 
     alert(parent.prevAll('li').size()); 
    }); 
}); 
+1

approccio Novel, ma immagino index() è più veloce. – Erik

2

è possibile ottenere l'indice di un elemento con jquery`s index

$('ul li a').live('click', function() 
{ 
    var index = $(this).index(); 
});  
+1

usando '$ (this) .index()' invece di '$ (this) .parent ('li'). Index()' .. Grande !!!! – Prabs

+0

Questo ti dà un elemento non l'elemento li .. quindi usa parent() per ottenere l'indice di li come suggerisce la risposta corretta. – numediaweb

2

Non c'è bisogno di jQueryfy questo:

$('ul li a').live('click', function() { 
    var position = 0; 
    var currentNode = this; 
    var firstNode = currentNode.parentNode.firstChild; 
    while(firstNode != currentNode) { 
     position++; 
     currentNode = currentNode.previousSibling; 
    } 
    alert(position); 
}); 
+1

Se non c'è bisogno di "jQueryfy", allora perché usare _some_ jQuery (selettore), ma non sfruttare appieno ..? – peirix

+1

Poiché il primo poster utilizza già jQuery per allegare il suo evento. Ma per ottenere un po 'di posizione usando le funzioni di $ (che, se non sbaglio, fare qualcosa di più che selezionare le cose) potrebbe essere un po' eccessivo. jQueryfy le cose che non sono le stesse in alcuni browser (selettori CSS, gestione degli eventi ecc.) Ma usano javascript semplice, portatile e veloce quando possibile. – Arkh

+0

Questo non darà sempre la stessa risposta di 'index()' di jQuery, dal momento che non sta filtrando per gli elementi reali e includerà nodi di testo/commento nel conteggio. Potrebbe utilizzare 'firstElementChild' e' previousElementSibling' a seconda del supporto del browser previsto. –

1

So che questo è un vecchio post, ma .live ora è deprecato in jQuery 1.7 e rimosso in jQuery 1.9.

L'alternativa è quella di utilizzare .delegate:

$('ul li').delegate('a','click', function() { 

    alert($(this).parent('li').index()); 

}); 
Problemi correlati