Então, estou procurando há algumas horas e ainda não encontrei uma solução.
Parece que o método jQuery .index () ao chamar um elemento em um conjunto, não leva em consideração o seletor.
Para esclarecer, quando tenho uma lista de 5 elementos li,onde os elementos 2, 3 e 4 têm a classe "foo". Quando filtro esses itens pela primeira vez com $ ("li.foo"), recebo um conjunto com o tamanho de três elementos grandes. Quando executo o .index () no primeiro item do conjunto, como $ ("li.foo"). First (). Index (), em vez de retornar 0 (já que é o primeiro item do conjunto e O índice começa a contar de 0), na verdade, retorna 1 (ou seja, o índice para o segundo item).
Agora, com o exemplo acima, ele realmente não parecenecessário no meu exemplo para usar o índice, mas no meu código eu realmente filtre o conjunto filtrado ($ ("li.foo"). filter (". active")) para obter um único item e, em seguida, obter o índice desse item.
O problema parece é que .index ignora os filtros e seletores e não tive sorte em $ .inArray ();
Se alguém pudesse lançar alguma luz sobre como obter o índice de uma maneira segura, eu ficaria super grato !!
Respostas:
3 para resposta № 1O método index possui várias variantes para ajudar nesse sentido
Você pode chamá-lo em um conjunto de elementos e passar o elemento cujo índice deve ser encontrado como argumento
var $lis = $("li.foo");
var idx = $lis.index($lis.first());//will return 0
Outra maneira é passar o seletor como um argumento então o índice retornará o valor do índice com base na posição do elemento atual em relação à posição do elemento no conjunto de elementos retornado pelo conjunto de elementos
var $el = $("li.foo").first();
var idx = $el.index("li.foo");
Quanto ao seu problema
var $lis = $("li.foo"), $active = $("li.foo").filter(".active");
var index = $lis.index($active)