Przeglądanie jQuery - metoda closest()
Przykład
Ten przykład pokazuje, jak można przeprowadzić delegowanie wydarzeń za pomocą metody closest(). Kiedy najbliższy element listy lub jego potomkowie są kliknięte, tło zmienia się na żółte:
$( document ).bind("click", function( e ) { $( e.target ).closest("li").toggleClass("hilight"); });
Definicja i zastosowanie
Metoda .closest() uzyskuje pierwszy element przodka pasujący do selektora, zaczynając od bieżącego elementu, przechodząc w górę drzewa DOM.
Gramatyka
.closest(selector)
Parametry | Opis |
---|---|
selector | Wartość ciągła, zawierająca wyrażenie selektora pasującego do elementu. |
Szczegółowe wyjaśnienie
Jeśli podano obiekt jQuery reprezentujący zbiór elementów DOM, metoda .closest() pozwala na pobranie tych elementów oraz ich przodków z drzewa DOM i utworzenie nowego obiektu jQuery z elementami pasującymi..parents() Podobnie jak metoda .closest(), obie przechodzą w górę drzewa DOM. Różnica między nimi, mimo że subtelna, jest ważna:
.closest() | .parents() |
---|---|
Zaczyna od bieżącego elementu | Zaczyna od elementu nadrzędnego |
Przechodzi po drzewie DOM w górę, aż znajdzie element pasujący do zastosowanego selektora. | Przechodzi po drzewie DOM w górę, aż do elementu korzenia dokumentu, dodając każdy element przodka do tymczasowego zbioru; jeśli zastosowano selektor, zbior ten zostanie przefiltrowany na podstawie tego selektora. |
Zwraca obiekt jQuery zawierający zero lub jeden element | Zwraca obiekt jQuery zawierający zero, jeden lub wiele elementów |
Proszę spojrzeć na poniższy fragment HTML:
<ul id="one" class="level-1"> <li class="item-i">I</li> <li id="ii" class="item-ii">II <ul class="level-2"> <li class="item-a">A</li> <li class="item-b">B <ul class="level-3"> <li class="item-1">1</li> <li class="item-2">2</li> <li class="item-3">3</li> </ul> </li> <li class="item-c">C</li> </ul> </li> <li class="item-iii">III</li> </ul>
Przykład 1
Załóżmy, że wykonujemy wyszukiwanie elementu <ul> zaczynające się od elementu A:
$('li.item-a').closest('ul').css('background-color', 'red');
To zmieni kolor <ul> na poziomie 2, ponieważ jest to pierwszy napotkany element podczas przechodzenia po drzewie DOM w górę.
Przykład 2
Załóżmy, że szukamy elementu <li>:
$('li.item-a').closest('li').css('background-color', 'red');
To zmieni kolor elementu listy A. Zanim .closest() metoda zacznie przechodzić po drzewie DOM w górę, zaczyna od samego elementu li i kontynuuje, aż znajdzie element A.
Przykład 3
Możemy przekazać element DOM jako kontekst, w którym szukamy najbliższego elementu.
var listItemII = document.getElementById('ii'); $('li.item-a').closest('ul', listItemII).css('background-color', 'red'); $('li.item-a').closest('#one', listItemII).css('background-color', 'green');
Powyższy kod zmieni kolor <ul> na poziomie 2, ponieważ jest zarówno pierwszym przodkiem elementu A, jak i potomkiem elementu II. Nie zmieni koloru <ul> na poziomie 1, ponieważ nie jest potomkiem elementu list item II.