2012-05-02 13 views
9

Estoy tratando de obtener una ubicación de un elemento en un conjunto jQuery.jQuery indexOf function?

Here's what I tried so far.

Quiero ser capaz de hacer algo como esto:

$('ul').find('a').indexOf('.active'); 

y obtener la ubicación de la .active en el conjunto de a 's.

¿Hay algo así como una función indexOf() para jQuery? El método no funciona index()

+0

¿cuál debería ser la salida? – gdoron

+0

@gdoron se espera que la salida sea 2 (es el tercer elemento 'a') – tobyodavies

+0

@tobyodavies. [hay una sobrecarga útil] (http://stackoverflow.com/a/10406578/601179). – gdoron

Respuesta

10

si pasa un conjunto jQuery ($searchFor) como argumento al método index de otro conjunto jQuery ($searchIn), es decir,

$searchIn.index($searchFor) 

devolverá el índice de $searchFor en el conjunto $searchIn

En su ejemplo:

$('ul a').index($('ul a.active')); 

+3

Nota: '$ ('ul a')' es equivalente a '$ ('ul'). Find ('a')' – tobyodavies

+3

... y ligeramente más rápido – Alp

+0

@Alp. [Esto es aún más rápido] (http://stackoverflow.com/a/10406578/601179) ya que no necesita consultar el DOM dos veces. – gdoron

-2

Usted puede hacer esto con sólo pedirlo en el selector:

$('ul a.active') 

¿Qué quiere decir por conseguir la ubicación, sin embargo? ¿Te refieres a la posición? o URL?

Si desea saber cuál es click digamos ... Utilizaría $(this) dentro de su función de evento. Aquí hay un ejemplo que devuelve la posición actual del elemento se hace clic en, si hay múltiples con la clase .active:

para obtener la posición:

$('ul a.active').click(function(){ 
    alert($(this).position()); 
}) 

para obtener la ubicación URL:

$('ul a.active').click(function(){ 
    alert($(this).attr('href')); 
}) 
+0

ubicación se refiere al índice, no se puede obtener una url o un elemento (en general) y mucho menos uno relativo a un conjunto jQuery. También OP sabe claramente cómo usar find, por lo que '$ ('ul a.active')' claramente no hace nada como lo que OP está pidiendo. – tobyodavies

+0

No está pidiendo el 'índice' que está pidiendo' indexOf', la última vez que revisé estos fueron diferentes. –

+0

¿En qué se diferencia el "índice" de "indexOf"? No puedo pensar en un solo lenguaje que implemente ambos en el mismo tipo de objeto, y entre los idiomas son sinónimos. OP usó la palabra "indexOf" no "index" porque ese es el nombre del método incorporado en JS en matrices y cadenas. Además, como está buscando el "indexOf", algo significa que está buscando un índice, no una URL ni una coordenada de posición, este era mi punto. – tobyodavies

0

Sólo tiene que dar a la función index un objeto jQuery:

var elements = $('ul a'); 
var index = elements.index(elements.filter('.active')); // 2 

alert(index); 

Live DEMO


No hay tal función fuera de la caja, se puede hacer fácilmente así:

var index = -1; 
$('ul a').each(function(i){ 
    if ($(this).hasClass('active')){ 
     index = i; 
     return false; 
    } 
}); 

alert(index); 

Live DEMO

0

Su lógica es sonido, solo está agarrando el elemento equivocado: http://jsfiddle.net/xz9dW/19/

var index = $('ul a.active').closest('li').index(); 

El enlace a no tiene valor index() ya que no tiene hermanos; tienes que agarrar el li

+0

Quiero ser capaz de tomar el índice del 'a' en el conjunto – qwertymk

Cuestiones relacionadas