找到jQuery parentsUntil()id

时间:2013-12-13 00:01:40

标签: jquery parent

有没有办法让parentsUntil()在带有id的第一个元素之后停止?例如,当我点击li时,我希望返回li ul div#id-found

<div id="id-found">
    <ul>
        <li></li>
    </ul>
</div>

这是一个js小提琴的例子(比这个例子略高一些):http://jsfiddle.net/T9gBu/

2 个答案:

答案 0 :(得分: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评论更新。

答案 1 :(得分:0)

您不能在同一页面上拥有两个具有相同ID的元素。这是HTML的基本规则。一旦元素的祖先具有唯一ID,您就可以使用.closest()来选择所需的ID。