[jQuery] 親・子・孫要素を取得する
ある要素からみて親、子、孫などの要素を取得する方法。
親要素取得は、 parent()
, parents()
, closest()
メソッド、子要素取得については、 children()
, find()
メソッドを使った方法をメモ。
親要素の取得方法
parent()
1 つ上の階層にある要素を取得するメソッド。( 1 階層上の要素しか取れない)
<div id="parent" class="par">
<div id="child"></div>
<button id="btn">Get Elements</button>
</div>
$('#btn').on('click', function() {
console.log($(this).parent().attr('id')); // line 1
console.log($("#child").parent().attr('class')); // line 2
});
// console 表示
parent
par
line 1 の $(this)
は、押したボタン自身の要素を取得していて、ボタンから見た親要素の id
を取得( attr('id')
で id
を取得)。
line 2 は、 id="child"
の div
要素から見て親である id="parent"
の div
要素のクラス名を取得している( attr('class')
で class
を取得)。
parents()
対象要素から見て、上にある全階層の要素(祖先要素)の中から目的の要素を取得することができる。
<div id="parent1" class="par">あいう
<div id="parent4" class="par">abc</div>
<div id="parent2" class="par">
<div id="parent3" class="par">
<div id="child"></div>
<button id='btn'>Get Elements</button>
</div>
</div>
</div>
$('#btn').on('click', function() {
console.log($(this).parents().attr('id')); // line 1
console.log($(this).parents('#parent1').attr('id')); // line 2
console.log($(this).parents('#parent1').text()); // line 3
console.log($('#child').parents()); // line 4
});
// console 表示
parent3 // line 1
parent1 // line 2
// line 3
あいう
abc
Get Elements
// line 4
n.fn.init(5) [div#parent3.par, div#parent2.par, div#parent1.par, body, html, prevObject: n.fn.init(1), context: document]
0: div#parent3.par
1: div#parent2.par
2: div#parent1.par
3: body
4: html
context: document
length: 5
prevObject: n.fn.init [div#child, context: document, selector: "#child"]
__proto__: Object(0)
line 1 は、 id
を取得しているが、目的の要素を指定しない場合は、一番最初に見つかった要素の id
が返ってくる。
line 2 は、 $(this)
(ボタン)からみて 3 つ上の階層の id="parent1"
を取得している。 parents()
は、引数に目的の要素を指定することができる。
line 3 は、 3 つ上の階層のの div
要素( id="parent1"
)からテキストを取得したところ、 id="parent1"
以下全てのテキストが取得された。
line 4 のように、 parents()
以降にメソッドを繋げないと、上階層の全要素( body
や html
タグを含む)を取得することができる。ただし、 id="child"
からみて親ではない id="parent4"
は取得できない。
closest()
一番近くにいる親要素を取得する。
<div id="parent1" class="par">あいう
<div id="parent4" class="par">abc</div>
<div id="parent2" class="par">
<div id="parent3" class="par">
<div id="child"></div>
<button id='btn'>Get Elements</button>
</div>
</div>
</div>
$('#btn').on('click', function() {
console.log($(this).closest("div"));
console.log($(this).closest('div').attr('id'));
console.log($(this).closest('#parent2').text());
console.log($('#child').closest("div").attr('id'));
});
// console 表示
div#parent3.par // line 1
parent1 // line 2
Get Elements // line 3
child // line 4
line 4 のように、対象要素と同じ要素を引数に指定すると自分が返ってくる。
要素の存在確認
.length
や .size()
を用いて、要素が存在するかどうか確認することができる。
これらの戻り値は、取得した要素のインデックス数であり、 0 が返ってきた場合は、存在しなかったと判断できる。
console.log($(this).closest('div').length);
console.log($(this).parent('div').length);
console.log($(this).parents('div').length);
console.log($(this).closest('div').size());
console.log($(this).parent('div').size());
console.log($(this).parents('div').size());
// console 表示
1
1
3
1
1
3
子要素の取得方法
children()
1 つ下の階層までの子要素を取得する。
<div id="parent">
<div id="chld1" class="children">子要素1</div>
<div id="chld2" class="children">子要素2</div>
<div id="chld3" class="children">
<div id="chld4" class="children">
<button id='btn'>Get Elements</button>
<div id="chld5" class="children">
子要素5
</div>
</div>
</div>
</div>
$('#btn').on('click', function() {
console.log($(this).children('div').attr('id'));
console.log($('#parent').children('div'));
console.log($('#chld4').children('div'));
});
// console 表示
undefined // line 1
div#chld1.children, div#chld2.children, div#chld3.children // line 2
div#chld5.children
line 1 について、 $(this)
であるボタン要素には子要素が存在しないので undefined
となった。
line 2 について、 id="parent"
の子要素を取得し、孫要素である id="chld5"
は取得されていない。
find()
対象要素より下にある全ての階層の要素(子要素、子孫要素)を取得することができる。
<div id="parent">
<div id="chld1" class="children">子要素1</div>
<div id="chld2" class="children">子要素2</div>
<div id="chld3" class="children">
<div id="chld4" class="children">
<button id='btn'>Get Elements</button>
<div id="chld5" class="children">
子要素5
</div>
</div>
</div>
</div>
$('#btn').on('click', function() {
console.log($(this).find('div').length);
console.log($('#parent').find('div')); // line 2
console.log($('#chld4').find('*')); // line 3
});
// console 表示
div#chld1.children, div#chld2.children, div#chld3.children, div#chld4.children, div#chld5.children
button#btn, div#chld5.children
line 2 では、 children()
と異なり、子孫要素である id="chld4"
、 id="chld5"
の div
要素を取得している。
line 3 のように、引数にアスタリスク( * ) を指定すると、配下に存在する全ての要素を取得することができる。