简体   繁体   English

访问父母的最近子女

[英]Access closest child of parent

I have an overall 'parent' div with several children. 我有一个整体“父母” div有几个孩子。 In each child there is 1 or 2 grandchildren. 每个孩子有1或2个孙子。

Say I have a variable holding a child, of the 4 th child. 假设我有一个变量,生一个孩子,即第4 孩子。 This is the hierarchy: parent > child4 > secondGrandChild . 这是层次结构: parent > child4 > secondGrandChild (View code below for the names.) I then want to access the closest previous secondGrandChild to it. (请在下面的代码中查看名称。)然后,我想访问与其最接近的前一个secondGrandChild

So basically it should go to child3 , check if it has secondGrandChild in it. 因此,基本上应该转到child3 ,检查其中是否包含secondGrandChild If it does, great, if not it should go to the previous one and do the same check. 如果是这样,那很好,如果不是,应该转到上一个并进行相同的检查。

Here's what I tried, but it said it didn't exist: 这是我尝试过的方法,但它说它不存在:

console.log($('#grandChild4').parent().closest('.chlid > secondGrandChild').offset().left);

Here's the hierarchy: (Note, not every child will have secondGrandChild .) 这是层次结构:(请注意,并非每个孩子都会有secondGrandChild 。)

<div class- "parent">
    <div class="child" id="child1">
        <div class="firstGrandChild"></div>
        <div class="secondGrandChild" id="grandChild1"></div>
    </div>
    <div class="child" id="child2">
        <div class="firstGrandChild"></div>
        <div class="secondGrandChild" id="grandChild2"></div>
    </div>
    <div class="child" id="child3">
        <div class="firstGrandChild"></div>
        <!-- <div class="secondGrandChild" id="grandChild3"></div> -->
    </div>
    <div class="child" id="child4">
        <div class="firstGrandChild"></div>
        <div class="secondGrandChild" id="grandChild4"></div>
    </div>
    <div class="child" id="child5">
        <div class="firstGrandChild"></div>
        <div class="secondGrandChild" id="grandChild5"></div>
    </div>
</div>

You could try something like this, 你可以尝试这样的事情,

var $secondGrandChilds = $('.child > .secondGrandChild');
var currentIndex = $secondGrandChilds.index($('#grandChild4'));
var item = $secondGrandChilds.get(currentIndex-1);

console.log($(item).offset().left);

http://jsfiddle.net/k9gu16v6/1/ http://jsfiddle.net/k9gu16v6/1/

Edit 编辑

Or better, 或更好,

var $item = $('#grandChild4').parent()
                             .prevAll('.child')
                             .find('.secondGrandChild')
                             .last()

console.log($item.offset().left);

http://jsfiddle.net/k9gu16v6/3/ http://jsfiddle.net/k9gu16v6/3/

You'll need to use .parent() and .prev() and .children() like so: 你需要使用.parent().prev().children()像这样:

var start =  $('#grandChild4').parent();
while( start.prev('.child').length && !start.prev().children('.secondGrandChild').length ) {
    start = start.prev('.child');
}
if( start.prev('.child').length ) {
    console.log( start.prev().children('.secondGrandChild').offset().left );
}   

  var start = $('#grandChild4').parent(); while( start.prev('.child').length && !start.prev().children('.secondGrandChild').length ) { start = start.prev('.child'); } if( start.prev('.child').length ) { console.log( start.prev().children('.secondGrandChild').offset().left ); } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <div class="parent"> <div class="child" id="child1"> <div class="firstGrandChild"></div> <div class="secondGrandChild" id="grandChild1"></div> </div> <div class="child" id="child2"> <div class="firstGrandChild"></div> <div class="secondGrandChild" id="grandChild2"></div> </div> <div class="child" id="child3"> <div class="firstGrandChild"></div> <!--div class="secondGrandChild" id="grandChild3"></div--> </div> <div class="child" id="child4"> <div class="firstGrandChild"></div> <div class="secondGrandChild" id="grandChild4"></div> </div> <div class="child" id="child5"> <div class="firstGrandChild"></div> <div class="secondGrandChild" id="grandChild5"></div> </div> </div> 

Syntax error at html at <div class- "parent" ? <div class- "parent"处的html语法错误? ; ; no .chlid element appear to exist within document ; 文件中似乎不存在.chlid元素; missing . 不见了. at .closest('.chlid > secondGrandChild') , try substituting .child for .chlid at selector .closest('.chlid > secondGrandChild')尝试替代.child.chlid在选择

Try correcting syntax errors , using .cloest() , .siblings() , .index() , eq() , .find() 尝试使用.cloest() .siblings() .index()eq() .find()纠正语法错误

 var child = $("#grandChild4"), elem = ".child", el = ".secondGrandChild"; console.log( child // closes `.child` .closest(elem) // filter siblings to return `.child` // at index before `elem` in `.child` collection .siblings(elem).eq(child.index(elem) - 1) // find `elem` : `".secondGrandChild"` .find(el) .offset().left ); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <div class="parent"> <div class="child" id="child1"> <div class="firstGrandChild"></div> <div class="secondGrandChild" id="grandChild1"></div> </div> <div class="child" id="child2"> <div class="firstGrandChild"></div> <div class="secondGrandChild" id="grandChild2"></div> </div> <div class="child" id="child3"> <div class="firstGrandChild"></div> <div class="secondGrandChild" id="grandChild3"></div> </div> <div class="child" id="child4"> <div class="firstGrandChild"></div> <div class="secondGrandChild" id="grandChild4"></div> </div> <div class="child" id="child5"> <div class="firstGrandChild"></div> <div class="secondGrandChild" id="grandChild5"></div> </div> </div> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM