2011-03-26 99 views
8

我正在寻找一种方法来找到单击元素的完整路径。返回元素的完整路径?

例如,可以说我有这样的HTML代码:

<div> <ul> <li>item 1</li> <li>item 2</li> </ul> </div> 
<div> <ul> <li>item 1</li> <li>item 2</li> </ul> </div> 

我希望能够返回的路径(不知道还能怎么称呼它)的点击 元素。 alert()现在会做。

可以说我点击了第二个div中的第二个li元素。我想的呼叫 回:

div:eq(1) li:eq(1) 

如果我第一个div的第一个li元素上点击,这将是:

div:eq(0) li:eq(0) 

我会怎么做呢?

是否有插件可以做到这一点,或者我需要从头开始获取路径中元素的索引?

谢谢:)

+1

你需要什么?另外请看http://www.selectorgadget.com/。 – 2011-03-26 14:01:38

回答

0

您是否阅读过有关父母()函数? http://api.jquery.com/parents/

你可以得到这样的事情

我的父母是:SPAN,P,DIV,BODY,HTML

+0

不提供OP需要的“eq(n)”限定符。 – Pointy 2011-03-26 14:04:49

+0

我可以看看它。有没有办法返回eq()?索引做到了吗? – 2011-03-26 23:08:28

1

.parents()

会认为做呢?

+0

我想从Danip说什么,我不认为它会给我元素的eq()。 – 2011-03-26 23:08:54

5

如果您希望插件的方法:

(function($){ 
    $.fn.extend({ 
     getFullPath: function(stopAtBody){ 
      stopAtBody = stopAtBody || false; 
      function traverseUp(el){ 
       var result = el.tagName + ':eq(' + $(el).index() + ')', 
        pare = $(el).parent()[0]; 
       if (pare.tagName !== undefined && (!stopAtBody || pare.tagName !== 'BODY')){ 
        result = [traverseUp(pare), result].join(' '); 
       }     
       return result; 
      }; 
      return this.length > 0 ? traverseUp(this[0]) : ''; 
     } 
    }); 
})(jQuery); 

指定选择或对象jQuery的,它会得到它的完整路径。 stopAtBody是可选的,但如果提供为true,它将只会遍历到<BODY>标记(使其成为有效的jQuery选择器)。

DEMO(点击LI看到自己的路径发现)

+0

哇!你摇滚布拉德!谢谢。 当我得到时间时,我会仔细研究它的代码,但这看起来正是我需要的。你想为这样一个惊人的答案获得一些补偿吗? :) – 2011-03-26 23:11:12

+0

@user:支票付给Brad Christie,c/o Brad Christie Inc. ---开玩笑。我在这里帮助别人,不会得到报酬,但我很欣赏这个提议。很高兴听到你在找什么。;-) – 2011-03-26 23:25:14

+0

嘿布拉德,有没有办法私下给你发消息?我收到了一些关于这个问题的问题以及我使用它的一种方式。我可以为你付出时间。 :) – 2011-03-26 23:53:46

6

这是你如何重构完整路径:

var q = $(this) 
    .parentsUntil('body') 
    .andSelf() 
    .map(function() { 
    return this.nodeName + ':eq(' + $(this).index() + ')'; 
    }).get().join('>'); 

灵感来自this answer