Mam zagnieżdżonej struktury tabeli jakjQuery: find() dzieci aż pewien element progu napotkał
<table>
<td id="first">
<div class="wrapper">
<input name=1>
</div>
<input name=2>
<table>
<td id="second">
<input name=3>
mam wybór jQuery $("#first")
. Chciałbym przemierzyć wszystkie i find()
wszystkie dzieci <input>s
w tym kontekście <td>
, ale nie do zejścia do zagnieżdżonych <table>
s.
Więc muszę trick jQuery który
Will
find()
wszystkie dzieci elementy pewnego elementuWill zejście n poziomy w dół w DOM drzewa
Ale zatrzyma malejąco jeśli napotkano pewien element (
<table>
), tak że selektor nie wybiera danych wejściowych zagnieżdżonych tabel (które będą obsługiwane osobno)Nie może być dowolna liczba zagnieżdżonych
<table>
poziomach, więc rozwiązanie powinno działać bez względu na to, ile rodzic<table>
lub dzieci<table>
występują w zakresie $ („pierwszy #”)<td>
lub inny<td>
Sprawdziłem inne znalezisko jQuery do czasu pytań. Mają odpowiedzi, ale wydaje się, że nie wypełniają ostatnie kryteria
czy uważasz, że struktura tabeli jest w porządku tutaj? – freebird
czy struktura odbywa się za pomocą '
Zapytałem, ponieważ twoje tagi wejściowe nie są zbyt dobre powstaje również brak 'tr'. – freebird
Odpowiedz
miałem podobny problem w this other question. Skończyło się na tym, że w końcu wymyśliłem własną wtyczkę po tym, jak chodziłem tam iz powrotem, próbując wymyślić selektor znajdowania.
ZASTOSOWANIE:
ExclusiveInputs = $('#first').findExclude('input','table');
(skrócona wersja):
Źródło
2014-06-16 19:00:25
eh, mam lepszy pomysł ..
to może być lub może nie być wystarczająco szybka. to zależy od twojego DOM, o czym nie chcesz rozmawiać;)
jeśli jest powolny, po prostu napisz kod algorytmu ręcznie. Nie ma skrótu selektora.
Źródło
2012-11-09 09:45:28 mkoryak
Jak wskazuje pytanie, nie można zidentyfikować, która tabela jest "zła" z kontekstu, ale musi działać z dowolnym poziomem zagnieżdżenia bez specjalnych znaczników klasy –
Zasadniczo, chcesz dopasować wszystkie elementy, które są
<input>
potomkowie#first
i że nie są dziećmi<td>
elementów zagnieżdżonych głęboko więcej niż jeden poziom pod#first
.(Nie jestem pewien co do tej ostatniej części
under #first
, ale jej implementacja pozwala nam obsługiwać elementy<td>
powyżej#first
w łańcuchu nadrzędnym.)Technicznie następujący selektor sam powinien spełniać wymagania:
Jeśli to nie działa w przeglądarce (Trzask powinien być na wysokości zadania myślę, ale złożone selektory jak
:not()
zawsze są trudne), można powierzyć przetwarzanie metod jQuery:Można użyć not() wykluczyć
<input>
elementy, które mają więcej niż jedno<td>
przodka:Źródło
2012-11-09 10:01:42
Nie rozumiem tego; nie musi to być '$ (" # first "). find (" input "). not (" td td input ")'? – lnrbob
Masz całkowitą rację, straciłem kontrolę nad faktycznym elementem, który pasuje do ciebie po drodze. Odpowiedź odpowiednio zaktualizowana, dzięki za heads-up :) –
miałem podobny problem i wciąż kwestionowane coś zrobić bez pętli przedłużacza lub mające dokładna struktura DOM. W moim przypadku miałem już odniesienie do elementu "#first", który, jeśli nie, moglibyśmy uzyskać go na przykład z każdym (nawet jeśli jest to tylko jeden obiekt). Sztuką jest powrót do drzewa z parentsuntil i zatrzymanie się na swoim górnym elemencie, aby zobaczyć, czy istnieje jakiś element pośredni spełniający warunek.
Korzystanie skrótowym zapisie lambda dla funkcji (jak można napisać w maszynopisie) Prowadziłoby to do tego:
może nie być najbardziej efektywny sposób (jak najpierw wybrać wszystko, by następnie rzucić Odległość elementy ponownie montażu w DOM-drzewa, ale jest zwarta i dość generycznych.
Źródło
2016-07-05 09:30:27 Koen
Powiązane problemy