2013-12-13 22 views

回答

3

這是爲了實現你想要的最好的方式:

var $t = $(this), $p = $t.parentsUntil('[id]') 
$p = $t.add($t.closest('*[id]').add($p));  

現在$p有元素的向上線索可以映射並加入等

下面是修改的小提琴 http://jsfiddle.net/Exceeder/awnvowan/

你的小提琴也存在一些問題。如果我理解正確的話,你需要什麼,這是最有效的直接映射器中處理字符串的建築:

var selector = 
    $p.map(function() { 
     var $t = $(this), 
      id = $t.attr('id'), 
      tag = $t.prop("tagName"), 
      cls = $t.attr("class"); 
     if (cls) { 
      cls = "." + $.trim(cls).replace(/\s/gi, "."); 
     } else 
      cls = ''; 

     return tag + (id ? '#'+id : '') + cls; 
    }).get().reverse().join(" "); 

更新基於jfaron評論這個答案已經更新。

+0

This Works!我唯一需要的是將id包含在div中(因爲這個方法只返回標籤而不是它的id),所以我現在正在試驗這個。如果你知道如何做到這一點,這將是非常有幫助的。 :) –

+0

有一個錯誤,你需要使用'最接近'來包含父母的ID。我更新了我的答案以反映它並稍微改進了代碼。 –

+0

看起來它不包括被點擊的元素,但你已經足夠接近我瞭解它。謝啦! –

0

不能與在同一頁上相同的ID兩個元素。這是HTML的基本規則。一旦元素的祖先擁有唯一的ID,您就可以使用.closest()來選擇所需的ID。