【发布时间】:2011-02-22 04:40:49
【问题描述】:
假设我在 jQuery 中有一个文本节点的选择器,我该如何获取父节点?
【问题讨论】:
假设我在 jQuery 中有一个文本节点的选择器,我该如何获取父节点?
【问题讨论】:
任何元素或文本节点都是Node,它具有parentNode 属性。您不需要 jQuery,但您可以将父对象转换为 jQuery 对象:
$(textNode.parentNode)...
【讨论】:
$('selector_for_your_textnode').parent()
对于 jQuery 对象,或
$('selector_for_your_textnode').parent()[0]
对于常规的 DOM 对象。
您也可以使用.closest('element_you_want') 以获得更大的灵活性。
正如 cletus 在 cmets 中指出的那样,如果您想获取一个实际的 textNode 并从那里向上工作,那么事情确实比普通的 jQuery 选择器要复杂一些。可以做到,但你必须寻找 nodeType 3。This answer 可能对这部分有帮助。
【讨论】:
jQuery 提供了一些选项来做到这一点。最基本的是:
$(selector).parent();
这将返回所选元素的直接父节点(如果选择器匹配多个元素,则返回集合中每个元素的父节点)。
下一个选项是:
$(selector).parents();
对于匹配集中的每个元素,这将返回该元素的所有父母(以及祖父母、曾祖父母等),直到并包括文档的根节点(HTML 文档为<html>)。您可以将其传递给选择器以仅获取匹配的元素。例如
$(selector).parents('div'); // only parents that are divs
最后一种方式是使用:
$(selector).closest(otherSelector);
这有点不同,因为它将返回第一个元素以匹配第二个选择器,从调用集开始。所以如果我有这个:
<div>
<ul>
<li>
<p id="foo">foo</p>
</li>
</ul>
</div>
如果我做$('#foo').closest('p'),我会取回一个包含p#foo 的jQuery 集。如果我改为使用$('#foo').closest('ul'),我将取回<ul> 元素,正如您所期望的那样。
【讨论】:
你的意思是喜欢
$('.myselector').parent(); ?
【讨论】: