有没有办法让parentsUntil()在带有id的第一个元素之后停止?例如,当我点击li时,我希望返回li ul div#id-found
。
<div id="id-found">
<ul>
<li></li>
</ul>
</div>
这是一个js小提琴的例子(比这个例子略高一些):http://jsfiddle.net/T9gBu/
答案 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。