(注意:问题在被问到后的第二天被编辑,将问题从 aboutparent
更改为 about parents
[注意复数]。哪种会有所不同!)
关于(单数)vs .的原始问题:只升级一个级别。从当前元素(不仅仅是父元素)开始并不断搜索祖先元素,直到找到匹配项(或用完祖先元素)。parent
closest
parent
closest
关于(复数)vs .的更新问题:有两个区别:parents
closest
是否考虑当前元素(它是 with closest
,它不是 with 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
这就是我们从三个相关方法中得到的结果:
$(this).parent('div')
- 空 jQuery 对象,其父对象span
不是div
.
$(this).parents('div')
- 包含两个 s 的jQuery 对象div
,“内部”和“包装”div(按此顺序)。
$(this).closest('div')
- jQuery 对象,其中有一个 div
,“内部”之一。
如果我们钩住并用作选择器,click
结果span
如下span
:
$(this).parent('span')
- 空 jQuery 对象,其父对象span
不是span
.
$(this).parents('span')
- 空 jQuery 对象,span
没有祖先span
。
$(this).closest('span')
span
- 带有被点击的 jQuery 对象。