.closest() と .parents('selector') の違いは何ですか?
-
12-11-2019 - |
質問
これらの違いは何ですか?一方は他方よりも効率的ですか?なぜ両方が存在するのか少し混乱しています。次のマークアップがあるとします。
<table>
<tr>
<td>...</td>
<td><span class='toggle'>Toggle</span></td>
</tr>
<tr>
<td>...</td>
<td><span class='toggle'>Toggle</span></td>
</tr>
<tr>
<td>..</td>
<td><span class='toggle'>Toggle</span></td>
</tr>
</table>
から <span>
使えそうなタグ どちらか $(this).closest('tr');
または $(this).parents('tr');
親/最も近いものにアクセスするには <tr>
鬼ごっこ。
他のヒント
(注記:質問は行われた翌日に編集され、質問が約から変更されました。 parent
存在することに parents
[複数形であることに注意してください]。どちらが違いを生むのか!)
あなたの オリジナル についての質問 parent
(単数形) vs. closest
: parent
1レベル上がるだけです。 closest
現在の要素 (親だけでなく) から開始し、一致する要素が見つかるまで (または祖先がなくなるまで) 祖先を検索し続けます。
最新情報を再確認してください 質問 について parents
(複数) vs. closest
:違いは 2 つあります。
現在の要素が考慮されるかどうか (
closest
, 、それはありませんparents
).検索が最初の一致で停止するかどうか (
closest
, 、それはそうではありませんparents
).
あなたから オリジナル 質問:
タグからは $(this).closest('tr'); のいずれかを使用できます。または $(this).parent('tr');
いや、実際のところ。 $(this).parent('tr');
の親は空の jQuery オブジェクトを返します。 span
セレクターと一致しません。
あなたから 更新しました 質問:
タグからは $(this).closest('tr'); のいずれかを使用できます。または $(this).parents('tr');
あなたは出来る、 提供された それはあなたの tr
他のものの中にもありません tr
(例: テーブルを含むテーブル)。その場合、同じ結果が得られます。ただし、テーブルの中にテーブルがある場合は、 parents
複数取得できます tr
s (全て 祖先の tr
要素)。
次の構造を考えてみましょう。
<div class="wrapper">
<div class="inner">
<p>Testing <span>1 2 3</span></p>
</div>
</div>
フックすれば click
で span
, 、これは 3 つの関連メソッドから返されるものです。
$(this).parent('div')
- 空の jQuery オブジェクト、span
ではありませんdiv
.$(this).parents('div')
- jQueryオブジェクトを使用 二div
その中には、「inner」 div と「wrapper」 div が (この順序で) 含まれています。$(this).closest('div')
- jQueryオブジェクトを使用 1つdiv
その中にあるのが「内側」です。
フックした場合の結果は次のとおりです click
で span
そして使用します span
セレクターとして:
$(this).parent('span')
- 空の jQuery オブジェクト、span
ではありませんspan
.$(this).parents('span')
- 空の jQuery オブジェクト、span
先祖がいないspan
s.$(this).closest('span')
- jQuery オブジェクトとspan
それがクリックされました。
.parent()
1レベルしか上がらないのに対し、 closest()
現在の要素とすべての親が含まれます。
例(下から選択) div
, x
= 一致した要素):
parent() parent('body') .closest('div') .parents('div')
body
div x
div x <nothing> x
this--> div x