代码之家  ›  专栏  ›  技术社区  ›  Mike Trpcic

使用jquery查找两个元素之间的节点数?

  •  1
  • Mike Trpcic  · 技术社区  · 15 年前

    我很难找到一个快速完成(看似)简单任务的方法。假设我有以下HTML:

    <ul>
      <li>One</li>
      <li>Two</li>
      <li id='parent'>
        <ul>
          <li>Three</li>
          <li>
            <ul>
              <li>Four</li>
              <li id='child'>Five</li>
            </ul>
          </li>
          <li>Six</li>
        </ul>
      </li>
    </ul>
    

    并具有以下两个要素:

    var child = $("#child");
    var parent = $("#parent");
    

    在本例中,很明显:

    child.parent().parent().parent().parent();
    

    将是与“parent”相同的节点。但是我要遍历的列表大小是可变的,所以我需要找到一种方法来确定有多少个“.parent()”需要遍历才能到达父节点。我总是知道孩子和父母在哪里,我只是不知道中间有多少层。

    有没有内置的jquery方法可以这样做,或者我的最佳选择是一个递归函数,它获取父节点,检查父节点是否是我想要的节点,如果不是在父节点上调用自己?

    编辑:我可能解释得不够清楚。我的问题是无法到达父节点,我的问题是找出子节点和父节点之间有多少个节点。在上面的示例中,子节点和父节点之间有3个节点。这就是我需要找到的数据。

    2 回复  |  直到 15 年前
        1
  •  7
  •   cletus    15 年前

    如果您只想联系家长,请执行以下操作:

    child.parents("#parent");
    

    这比做起来容易:

    child.parent().parent().parent();
    

    或者你还需要知道电话号码吗?

    一个简单的循环可以做到:

    var node = child[0];
    var depth = 0;
    while (node.id != 'parent') {
      node = node.parentNode;
      depth++;
    }
    
        2
  •  1
  •   PetersenDidIt    15 年前

    尝试最近的()函数

    http://docs.jquery.com/Traversing/closest#expr

    这将为您提供UL家长总数:

    var numofuls=$(this).parents('ul').length;