Существует ли селектор jQuery для выполнения этой задачи? - PullRequest
13 голосов
/ 29 июня 2010

У меня есть 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 ]

3 голосов
/ 29 июня 2010

Понял!

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

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

    //do stuff
});​
3 голосов
/ 29 июня 2010

Можете ли вы попробовать это, чтобы увидеть, подходит ли оно вашему делу?

    $(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;
            }
        });
    });

С уважением ...

2 голосов
/ 29 июня 2010

Как вы решаете, какой .a выбрать? Есть ли .b навсегда .a? Вы зацикливаетесь на каждом? Вы можете использовать индекс .a и просто выбрать соответствующий .b.

$(".a").each(function(){
    var index = $(".a").index(this);
    var theB = $(".b").get(index);
});
1 голос
/ 29 июня 2010

Хорошо, вот модифицированная версия решения Падель , которое ведет себя немного по-другому

var lastA = null;

$('.a, .b').each(function() {
    if($(this).hasClass('a'))
    {
        lastA = $(this);
    }
    else if(lastA)
    {
        doStuff(lastA,this); //doStuff(a,b)
        lastA = null;
    }
});
0 голосов
/ 29 июня 2010
$("div.a").nextAll("div.b")

Это работает?

...