我有一个特定的用例,我似乎找不到答案。给定以下 DOM 元素:
<div class="wrapper">
<div class="item"></div>
<div class="item">
<div class="foo"></div>
</div>
<div class="item">
<div class="bar"></div>
</div>
<div class="item"></div>
<div class="item selected"></div>
<div class="item"></div>
</div>
Run Code Online (Sandbox Code Playgroud)
我需要找到该.selected元素相对于它的兄弟元素的索引。但我需要忽略任何具有.foo子元素的兄弟元素(它只会是直接子元素)。
因此,通常要查找 的索引,.item .selected您可以使用$(".item.selected").index()给出4 的索引,但由于它之前的一项有.foo子项,所以正确的答案是3。
我认为,最好的方法是获取所选元素之前的所有兄弟姐妹(因为它之后的兄弟姐妹不会改变其索引),然后计算有多少个有孩子.foo,并从所选索引中减去该数字,所以4-1=3。我尝试这样做:
var selectedIndex = $(".item.selected").index();
var fooCount = $(".item.selected").prevAll('.item > .foo').length;
var finalIndex = selectedIndex - fooCount;
Run Code Online (Sandbox Code Playgroud)
问题是, fooCount 出现了0而不是3。
您可以简单地使用.filter()和删除具有给定子元素的前面元素。
const selected = $('.selected');
const foos = selected.prevAll().filter(function() {
return !($(this).find('.foo').length);
});
console.log(selected.index(), foos.length);Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="wrapper">
<div class="item"></div>
<div class="item">
<div class="foo"></div>
</div>
<div class="item">
<div class="bar"></div>
</div>
<div class="item"></div>
<div class="item selected"></div>
<div class="item"></div>
</div>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
725 次 |
| 最近记录: |