/ / Índice de um elemento em um conjunto jQuery filtrado - javascript, jquery, html, css, performance

Índice de um elemento em um conjunto jQuery filtrado - javascript, jquery, html, css, performance

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 № 1

O 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)