2013-12-13 68 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。