jquery, znajdź następny element według klasy

103

Jak znaleźć następny element według klasy.

próbowałem z, $(obj).next('.class');ale to zwraca klasy tylko w $(obj)rodzicu. Muszę przenieść następny element w dowolnym miejscu kodu według nazwy klasy. Ponieważ mój kod wygląda tak

<table>
<tr><td><div class="class">First</div></td></tr>
<tr><td><div class="class">Second</div></td></tr>
</table>

czy to możliwe?

Alex
źródło

Odpowiedzi:

147

W takim przypadku musisz przejść do <tr> tego użycia .next(), na przykład:

$(obj).closest('tr').next().find('.class');

Lub jeśli między nimi mogą znajdować się rzędy bez .classwnętrza, możesz użyć .nextAll()tego:

$(obj).closest('tr').nextAll(':has(.class):first').find('.class');
Nick Craver
źródło
Byłoby łatwiej to zrobić: $ (obj) .closest ('tr'). NextAll ('. Class') [0];
StuR
2
@StuR - to nie zadziała tutaj, ponieważ .nextAll () patrzy tylko na elementy siostrzane. Potrzebujesz czegoś, co patrzy na potomków, aby znaleźć następny <div>, którego chce pytanie.
Nick Craver
1
A co by było, gdybyśmy chcieli pobrać atrybut z tego zwróconego obiektu HTMLObject? Like an$(obj).closest('tr').nextAll('.class')[0].attr('data-attribute');
Dennis Braga
Może być też konieczne użycie: .parent (). Next (""), jeśli element nie ma rodzeństwa
shasi kanth
@NickCraver Jesteś niesamowity
THE HOLY SPIRIT
23

Aby znaleźć następny element z tą samą klasą:

$(".class").eq( $(".class").index( $(element) ) + 1 )
plavozont
źródło
14

Nie możesz użyć next () w tym scenariuszu, jeśli spojrzysz na dokumentację, która mówi:
Next () Pobierz następującą zaraz po niej siostrzaną wartość każdego elementu w zestawie dopasowanych elementów. Jeśli podano selektor, pobiera następny element równorzędny, który pasuje do selektora.

więc jeśli drugi DIV był w tym samym TD, możesz kodować:


// Won't work in your case
$(obj).next().filter('.class');

Ale ponieważ tak nie jest, nie widzę sensu użycia next (). Zamiast tego możesz kodować:

$(obj).parents('table').find('.class')

Morteza Manavi
źródło
6
Ale jak znajduje następny element. .find zwróci wszystkie elementy.
Shashwat Kumar