是否有jQuery选择器来完成此任务?

时间:2010-06-29 13:25:54

标签: javascript jquery jquery-traversing

我有这4个HTML代码段:

  • 兄妹:

    <div class="a">...</div>
    <div class="b">...</div>        <!--selected-->
    <div class="b">...</div>        <!--not selected-->
    
  • 包裹1:

    <div class="a">...</div>
    <div>
        <div class="b">...</div>    <!--selected-->
    </div>
    <div class="b">...</div>        <!--not selected-->
    
  • 包裹2:

    <div>
        <div class="a">...</div>
    </div>
    <div>
        <div class="b">...</div>    <!--selected-->
    </div>
    <div class="b">...</div>        <!--not selected-->
    
  • 分居:

    <div class="a">...</div>
    <div>...</div>
    <div class="b">...</div>        <!--selected-->
    <div>...</div>
    <div class="b">...</div>        <!--not selected-->
    <div>...</div>
    <div class="b">...</div>        <!--not selected-->
    

我如何使用jQuery为任何给定的.b元素选择下一个.a元素,而不管嵌套?

我想要这样的事情:

$('.a').each(function() {
    var nearestB = $(this)./*Something epically wonderful here*/;

    //do other stuff here
});

5 个答案:

答案 0 :(得分:3)

你可以试试看它是否适合你的情况吗?

    $(document).ready(function () {
        var isA = false;

        $('div.a, div.b').each(function () {
            if ($(this).attr('class') == "a")
                isA = true;
            if ($(this).attr('class') == "b" && isA) {
                $(this).css("background", "yellow");
                isA = false;
            }
        });
    });

...问候

答案 1 :(得分:3)

知道了!

var both = $('.a, .b');

$('.a').each(function() {
    var nearestB = both.slice(both.index(this))
                       .filter('.b')
                       .first();

    //do stuff
});​

答案 2 :(得分:2)

您如何决定选择哪个.a?永远有.b .a?你在每个上面循环吗?您可以使用.a的索引,只需选择相应的.b

$(".a").each(function(){
    var index = $(".a").index(this);
    var theB = $(".b").get(index);
});

答案 3 :(得分:1)

好的,这是Padel解决方案的修改版本,其行为略有

var lastA = null;

$('.a, .b').each(function() {
    if($(this).hasClass('a'))
    {
        lastA = $(this);
    }
    else if(lastA)
    {
        doStuff(lastA,this); //doStuff(a,b)
        lastA = null;
    }
});

答案 4 :(得分:0)

$("div.a").nextAll("div.b")

这有用吗?