2011-03-26 97 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