Работа с родителями и потомками
В jQuery получение родительского элемента для каждого элемента текущего набора осуществляется с помощью parent()
.
При необходимости в parent()
мы можем передать селектор и тем самым указать, что нам нужны только элементы соответствующие ему.
В следующем примере мы найдем элемент #test
затем найдем его родителя с помощью .parent()
:
<p>Абзац вне дива.</p>
<div>
<p>Абзац.</p>
<p>Абзац.</p>
<p id="test">Абзац.</p>
<p>Абзац.</p>
<p>Абзац.</p>
</div>
<p>Абзац вне дива.</p>
<script>
const elements = $("#test").parent();
console.log(elements);
</script>
Кроме parent()
имеется ещё метод parents()
. Он в отличие от первого получает для элементов набора не только их непосредственных родителей, а вообще всех предков, вплоть до <html>
:
<p>Абзац вне дива.</p>
<div>
<p>Абзац.</p>
<p>Абзац.</p>
<p id="test">Абзац.</p>
<p>Абзац.</p>
<p>Абзац.</p>
</div>
<p>Абзац вне дива.</p>
<script>
const elements = $("#test").parents();
console.log(elements);
</script>
При необходимости можно выбрать не всех предков, а только тех, которые соответствует указанному селектору:
<p>Абзац вне дива.</p>
<div>
<p>Абзац.</p>
<p>Абзац.</p>
<p id="test">Абзац.</p>
<p>Абзац.</p>
<p>Абзац.</p>
</div>
<p>Абзац вне дива.</p>
<script>
const elements = $("#test").parents("div");
console.log(elements);
</script>
Ограничить подъём по дереву DOM при получении предков можно посредством parentsUntil()
. Например, получим предков являющимися <div>
для элемента с классом active
(при этом поиск предков должен ограничиваться элементом соответствующим селектору .container
:
<p>Абзац вне дива.</p>
<div class="container">
<p>Абзац.</p>
<p>Абзац.</p>
<p id="test">Абзац.</p>
<p>Абзац.</p>
<p>Абзац.</p>
</div>
<p>Абзац вне дива.</p>
<script>
const elements = $("#test").parentsUntil("div", ".container");
console.log(elements);
</script>
Получение ближайшего позиционированного предка
Метод offsetParent
позволяет получать ближайшего спозиционированного предка
элемента. Под понятием спозиционированный
подразумевается элемент с CSS свойством position
, установленным в значение relative
,absolute
, или fixed
. Метод полезен в анимации и при размещении элементов на странице:
<p>Абзац вне дива.</p>
<div class="container" style="position: relative">
<p>Абзац.</p>
<p>Абзац.</p>
<p id="test">Абзац.</p>
<p>Абзац.</p>
<p>Абзац.</p>
</div>
<p>Абзац вне дива.</p>
<script>
const elements = $("#test").offsetParent();
console.log(elements);
</script>
выбрать все дочерние узлы
Метод children()
используется, когда нужно получить все дочерние узлы, элементы, текстовые узлы и комментарии, для каждого элемента текущего набора. Этот метод не принимает никаких аргументов.
contents()
и children()
аналогичны, за исключением того, что первый включает в себя текстовые узлы и комментарии.
Метод contents()
можно также использовать для получения содержимого iframe
, если iframe
находится в том же домене, что и главная страница.