如何在jQuery中获取给定文本节点的最近父节点?

时间:2010-05-21 03:52:55

标签: jquery jquery-selectors

假设我在jQuery中有一个文本节点的选择器,我该如何获得父节点?

4 个答案:

答案 0 :(得分:4)

任何元素或文本节点都是Node,其属性为parentNode。您不需要jQuery,但您可以将父项转换为jQuery对象:

$(textNode.parentNode)...

答案 1 :(得分:4)

$('selector_for_your_textnode').parent()

用于jQuery对象,或

$('selector_for_your_textnode').parent()[0]

用于常规DOM对象。

您也可以使用.closest('element_you_want')获得更大的灵活性。

正如cletus在评论中指出的那样,如果你想抓住一个实际的textNode并从那里开始向上工作,那么事情确实比vanilla jQuery选择器更有条理。可以这样做,但您必须查找nodeType 3. This answer可能有助于该部分。

答案 2 :(得分:2)

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>元素。

答案 3 :(得分:1)

你的意思是

$('.myselector').parent(); ?