javascript - find number of nodes between two elements with jquery? - Stack Overflow

I'm having a little trouble figuring out a fast way to acplish a (seemingly) simple task.Say I h

I'm having a little trouble figuring out a fast way to acplish a (seemingly) simple task. Say I have the following 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>

And have the following two elements:

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

In this example, it's clear that:

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

will be the same node as 'parent'. But the list I'm traversing is variable size, so I need to find a way to find out how many '.parent()'s I'll need to go through to get to that parent node. I always know where child and parent are, I just don't know how many 'layers' there are in between.

Is there any built in jQuery method to do something like this, or is my best bet a recursive function that gets the parent, checks if the parent is my desired node, and if not calls itself on its parent?

Edit: I may not have explained myself clearly enough. My problem isn't getting TO the parent, my problem is finding out how many nodes are between the child and parent. In my example above, there are 3 nodes in between child and parent. That's the data I need to find.

I'm having a little trouble figuring out a fast way to acplish a (seemingly) simple task. Say I have the following 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>

And have the following two elements:

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

In this example, it's clear that:

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

will be the same node as 'parent'. But the list I'm traversing is variable size, so I need to find a way to find out how many '.parent()'s I'll need to go through to get to that parent node. I always know where child and parent are, I just don't know how many 'layers' there are in between.

Is there any built in jQuery method to do something like this, or is my best bet a recursive function that gets the parent, checks if the parent is my desired node, and if not calls itself on its parent?

Edit: I may not have explained myself clearly enough. My problem isn't getting TO the parent, my problem is finding out how many nodes are between the child and parent. In my example above, there are 3 nodes in between child and parent. That's the data I need to find.

Share Improve this question edited Sep 7, 2009 at 4:40 Mike Trpcic asked Sep 7, 2009 at 4:32 Mike TrpcicMike Trpcic 25.7k8 gold badges79 silver badges117 bronze badges
Add a ment  | 

2 Answers 2

Reset to default 8

If you just want to get to the parent, do this:

child.parents("#parent");

That's easier than doing:

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

Or is there some other reason you need to know the number?

A simple loop could do it:

var node = child[0];
var depth = 0;
while (node.id != 'parent') {
  node = node.parentNode;
  depth++;
}

Try the closest() function

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

This will give you the total number of ul parents:

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

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745538813a4632030.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信