jQuery - 在div之前找到顶级父级(父级父级的父级...)

时间:2015-03-20 20:55:10

标签: jquery

我的问题标题有点模糊,老实说,我真的想不出任何不那么混乱的事,抱歉!

这就是我想要的:

  1. 在顶级div中找到第一个锚点。
  2. 在上述div之前找到锚点的顶级父级。
  3. 对不起,如果这仍然令人困惑。
  4. 示例:

    <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/

5 个答案:

答案 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对象匹配的元素。

那就是:

&#13;
&#13;
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;
&#13;
&#13;

答案 3 :(得分:0)

根据你的小提琴,这将解决问题:

var firstAnchor = $('#container a')[0],
    parentId = $(firstAnchor).parentsUntil('#container').last().attr('id');

$(firstAnchor).html(parentId);

updated fiddle

答案 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);