我想知道在点击一个元素之前,某个类中有多少元素出现在DOM中。
<html>
<div class="a">
</div>
<div class="b">
<div class="a">
</div>
</div>
<button>CLick me!</button>
<div class="a">
</div>
</html>
所以在之前的DOM树中,如果要点击的元素是按钮,并且我正在寻找带有类“a”的div,它应该返回2,即使在整个树中有3个,但是“之前”按钮只有2个。
我怎么能这样做?
由于
[编辑] 元素的搜索从DOM树的开头开始,直到被点击的元素。不要假设这个结构,其中元素是被点击元素的sibilings,它可以有任何类型的结构。
答案 0 :(得分:2)
获取与.a
匹配的所有先前节点,然后将所有先前节点的后代与.a
匹配并加在一起:
var count = $('button').prevAll( '.a' ).length;
count += $('button').prevAll().find('.a').length;
console.log( count );
答案 1 :(得分:0)
试试这个,获取与该类匹配的所有prev元素,然后是那些与该类匹配的prev元素的所有子元素。
$("button").click(function() {
var prev = $(this).prevAll(this.className);
console.log( prev.length + prev.find(this.className).length );
});
虽未测试。
答案 2 :(得分:0)
您可以使用.not()
进行过滤$('button').click(function(){
var $this = $(this);
console.log(
$('.a')
// get all with class=a not including all after..descendants after
.not($this.nextAll('.a'), $('.a',$this.nextAll('*')))
// get number of elements returned
.length
);
});