【问题标题】:How to get the nearest parent node given a text node in jQuery?如何在jQuery中获取给定文本节点的最近父节点?
【发布时间】:2011-02-22 04:40:49
【问题描述】:

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

【问题讨论】:

    标签: jquery jquery-selectors


    【解决方案1】:

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

    $(textNode.parentNode)...
    

    【讨论】:

      【解决方案2】:
      $('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 选择器获取文本节点。
      • 是的,这一点确实让事情变得更加混乱。我正在相应地进行编辑。
      【解决方案3】:

      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'),我将取回&lt;ul&gt; 元素,正如您所期望的那样。

      【讨论】:

        【解决方案4】:

        你的意思是喜欢

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多