Быстрый рост JavaScript библиотек и разнообразных фреймворков, таких как jQuery, для программирования на стороне клиента, предоставил всю мощь языка JavaScript для широкой аудитории. jQuery предоставляет свой собственный API, методы и синтаксические особенности. Порой которые похожи друг на друга, но отличающиеся в чем-то. Это заметка должна избавить вас от путаницы
.parent(), .parents() .closest()
Все три эти метода предоставляют доступ вверх над элементами по дереву DOM, но они тем временем все-таки отличаются
parent(selector)
Попросту находит одного непосредственного родителя для элемента или элементов. Он также может принимать селектор в виде параметра, который будет полезен для нахождения родителя в определенном контексте.
1 2 |
|
В первой строке мы получаем родителя с классом my. Во второй же получает родителей для всех элементов
, при условии, что родитель его
Возможность ограничить выборку метода как во второй строке в примере выше – стандартная “плюшка” jQuery. Большинство методов для DOM-манипуляций позволяют указать селектор.
parents(selector)
Работает по тому же принципу, что и .parent() за исключением того, что данный метод не ограничен одним уровнем и может возвращать несколько предков. К примеру:
1
|
|
Для каждого элемента
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Допустим нам нужно поменять цвет фона только для третьего уровня вложенности:
1 2 3 4 |
|
Для каждого элемента
closest(selector)
Это больше магия, но очень полезная. Данный метод работает также как и .parents(), исключая то, что возвращает только одного родителя или предка. Бывают ситуации, когда вам не нужны все родители, возвращаемые методом .parents(), тогда в дело вступает метод .closest(). Допустим, нам нужно узнать явлвется ли один элемент непосредственным наследником другого:
1 2 3 4 |
|
Метод .closest() легко сэмулировать методом .parents(), ограничив количество возвращаемых элементов:
1
|
|
И еще метод .closest() начинает обход, начиная с элемента, удовлетворяющему селектору, а не с его родителя.