我的问题标题有点模糊,老实说,我真的想不出任何不那么混乱的事,抱歉!
这就是我想要的:
示例:
<div id="container">
<div id="thisShouldBeIgnored"></div>
<div id="ignoreThisToo"></div>
<div id="one">
<div id="two">
<div id="three">
<a href="" class="anchor">Hello</a>
</div>
</div>
</div>
</div>
我想在这里返回的是id为one
的div。
这就是我正在做的事情,我正在使用.html作为例子。
var firstAnchor = $('#container a')[0],
parentId = $(firstAnchor).parent().attr('id');
$(firstAnchor).html(parentId);
目前返回我期待的three
。
下一步是我在努力的地方。如何在达到顶级div之前,如何继续获取父级,在此示例中为container
。
简而言之,我希望定位container
内的第一个锚点,然后在container
one
之前获得顶级父级。
任何帮助都会受到大力赞赏!
这是我到目前为止的一个小提琴: http://jsfiddle.net/uk6oocs7/
答案 0 :(得分:4)
这应该得到它:
$('#container div').has('a').first()
<强> jsFiddle example 强>
这将选择所有具有子锚元素的#container子元素的div,然后将其减少为第一个匹配。
答案 1 :(得分:1)
这听起来像你要找的那样:
var parentId = $('#container a').parentsUntil('#container').last().attr('id');
答案 2 :(得分:0)
我相信您正在寻找jQuery中的parentsUntil
函数:
描述:获取当前匹配元素集中每个元素的祖先,最多但不包括选择器,DOM节点或jQuery对象匹配的元素。
那就是:
var firstAnchor = $('#container').find('a').first(),
penultimateContainer = firstAnchor.parentsUntil('#container').last();
firstAnchor.html(penultimateContainer[0].id);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="container">
<div id="thisShouldBeIgnored"></div>
<div id="ignoreThisToo"></div>
<div id="one">
<div id="two">
<div id="three">
<a href="" class="anchor">Hello</a>
</div>
</div>
</div>
</div>
&#13;
答案 3 :(得分:0)
根据你的小提琴,这将解决问题:
var firstAnchor = $('#container a')[0],
parentId = $(firstAnchor).parentsUntil('#container').last().attr('id');
$(firstAnchor).html(parentId);
答案 4 :(得分:0)
如果您不知道root的ID,请尝试this。
var $firstAnchor = $('a.anchor:first'),
ignoreLevels = 1 + 2, // on jsFiddle include html, body
index = $firstAnchor.parents().length - 1 - ignoreLevels,
parentId = $firstAnchor.parents().eq(index).attr('id');
$firstAnchor.html("ID: " + parentId);