.closest()和.parents(’selector’)之间有什么区别?
这些有什么区别? 一个比另一个更有效吗? 我有点困惑他们为什么都存在。 说我有这个标记:
... Toggle ... Toggle .. Toggle
从标签我可以使用
$(this).closest('tr');
或$(this).parents('tr');
访问父/最近的
parent
返回直接父项(一个用于调用者对象中的每个元素),如果父项与选择器不匹配,则返回任何内容。 closest
返回与每个元素(可以是原始元素)匹配祖先的最近祖先。 第三个类似的函数parents
返回所有匹配的祖先(不包括元素本身)。
通常,如果您明智地选择选择器,则closest
HTML对代码的重构比parent
更具抵抗力。
(注意:问题在被问到的第二天被编辑,将问题从关于parent
改为关于parents
[注意复数]。哪种有所不同!)
关于parent
(单数)与closest
的原始问题: parent
只有一级上升。 closest
当前元素(不仅仅是父元素),并继续搜索祖先,直到找到匹配(或用完祖先)。
关于parents
(复数)与closest
最新问题 :有两点不同:
-
是否考虑当前元素(它是
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
( 所有的祖先tr
元素)。
考虑这个结构:
Testing 1 2 3
如果我们挂钩click
span
,这就是我们从三个相关方法中得到的结果:
-
$(this).parent('div')
– 空的jQuery对象,span
的父级不是div
。 -
$(this).parents('div')
– jQuery对象,里面有两个div
,“inner”和“wrapper”divs(按顺序)。 -
$(this).closest('div')
– jQuery对象, 其中包含一个div
,即“内部”div
。
如果我们挂钩click
span
并使用span
作为选择器,则结果如下:
-
$(this).parent('span')
– 空jQuery对象,span
的父级不是span
。 -
$(this).parents('span')
– 空jQuery对象,span
没有祖先span
s。 -
$(this).closest('span')
– 带有单击span
jQuery对象。
.parent()
只上升一级,而.parent()
包括当前元素和所有父级。
示例(从底部div
选择, x
=匹配的元素):
parent() parent('body') .closest('div') .parents('div') body div x div x x this--> div x