[英]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.