2011-06-27 10 views
8

Chciałbym pobrać indeks elementu w odniesieniu do wszystkich widocznych rodzeństwa.jQuery index() w odniesieniu do wszystkich widocznych rodzeństwa

A td.index() pobiera indeks td do wszystkich pozostałych rodzeństw td.

Ale co, gdy niektóre z tych TD są ustawione na display:none. Chcę je wykluczyć podczas obliczania indeksu. td.index(':visible') wydaje się nie działać.

+0

która nie dałaby Ci prawdziwego indeksu, dlaczego nie wystarczy użyć instrukcji if, więc jeśli jest widoczna w sprawie działań, w przeciwnym razie nie rób nic :) – Val

Odpowiedz

25
var $td = $("#theTD") 

$td.siblings(":visible").andSelf().index($td); 

Powyższe powinno zrobić to, o co prosisz. Zasadniczo zdobądź zestaw elementów, które chcesz przeszukać, a następnie pobierz indeks swojego elementu.

http://jsfiddle.net/3NYY9/

EDIT: W jQuery 1.8 andSelf została zaniechana i addBack należy stosować na swoim miejscu:

var $td = $("#theTD") 

$td.siblings(":visible").addBack().index($td); 

http://jsfiddle.net/3NYY9/45/

+0

to jest magia .. – samccone

+0

Zamiast przywracać siebie do kolekcji, która wydaje się trochę odurzająca, dlaczego nie po prostu uzyskać widoczne dzieci twojego rodzica? $ td.parent(). children (": visible"). index ($ td); – user1689571

+0

@ user1689571 To prawie odpowiednik. Jedyna różnica polega na tym, że jeśli sam element nie jest widoczny, twoja droga zwróci -1. Jeśli to nie jest problem, to twoja droga jest całkowicie ważna. –

-3

Widoczność i wyświetlacze są całkiem różne w CSS . To, co chcesz zrobić, to ustawić właściwość widoczności jako ukrytą dla innych elementów TD zamiast ustawiania wyświetlania: none

+0

': visible' w jQuery jest nieco inny. –

+0

Tak, masz rację. – Anand

Powiązane problemy