2012-05-02 3 views
9

Я пытаюсь получить местоположение элемента в наборе jQuery.jQuery indexOf функция?

Here's what I tried so far.

Я хочу быть в состоянии сделать что-то вроде этого:

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

И получить расположение .active в наборе a годов.

Есть ли что-то вроде функции indexOf() для jQuery? Метод index() не работает

+0

Какой должен быть выход? – gdoron

+0

@gdoron ожидается выход 2 (это третий элемент 'a') – tobyodavies

+0

@tobyodavies. [есть полезная перегрузка] (http://stackoverflow.com/a/10406578/601179). – gdoron

ответ

10

Если вы передаете набор jQuery ($searchFor) в качестве аргумента для метода index другого набора jQuery ($searchIn) т.е.

$searchIn.index($searchFor) 

он возвращает индекс $searchFor в наборе $searchIn

В вашем примере:

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

+3

Примечание: '$ ('ul a')' эквивалентно '$ ('ul'). Find ('a')' – tobyodavies

+3

... и немного быстрее – Alp

+0

@Alp. [Это еще быстрее] (http://stackoverflow.com/a/10406578/601179), так как ему не нужно дважды запрашивать DOM. – gdoron

-2

Вы можете сделать это, просто просят за него в selector:

$('ul a.active') 

Что вы имеете в виду, получив место, однако? Вы имеете в виду положение? или URL?

Если вы хотите узнать, какой из них вы используете click, скажем, вы бы использовали $(this) внутри своей функции мероприятия. Вот пример, который возвращает текущую позицию элемента нажатия на, если есть несколько с .active класса:

Для получения позиции:

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

Чтобы получить расположение URL:

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

местоположение относится к индексу, вы не можете получить URL-адрес или элемент (в общем), не говоря уже об одном из них относительно набора jQuery. Также OP четко знает, как использовать find, поэтому '$ ('ul a.active')' явно ничего не делает, что просит OP. – tobyodavies

+0

Он не спрашивает «индекс», он просит «indexOf», последний раз я проверял, что они разные. –

+0

Как «индекс» отличается от «indexOf»? Я не могу представить ни одного языка, который реализует как один тип объекта, так и между языками, которые являются синонимами. OP использовал слово indexOf, а не «index», потому что это имя встроенного метода в JS на массивах и строках. Кроме того, поскольку он ищет «indexOf», что-то означает, что он ищет _an index_, а не URL-адрес, а не координату позиции, это моя точка зрения. – tobyodavies

0

Вам просто нужно дать функцию index объект JQuery:

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

alert(index); 

Live DEMO


Там нет такой функции из коробки, это можно сделать легко, как это:

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

alert(index); 

Live DEMO

0

Ваша логика звук, вы просто захватываете неправильный элемент: http://jsfiddle.net/xz9dW/19/

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

a ссылка не имеет index() ценность с не имеет брака и сестры; вы должны захватить li

+0

Я хочу иметь возможность захватить индекс 'a' в наборе, хотя – qwertymk

Смежные вопросы