13 Stimmen

Gibt es einen jQuery-Selektor, um diese Aufgabe zu erfüllen?

Ich habe diese 4 HTML-Schnipsel:

  • Geschwister:

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

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

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

    <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-->

Wie kann ich mit jQuery die nächste .b Element für jedes beliebige .a Element, unabhängig von der Verschachtelung?

Ich möchte etwas in dieser Art:

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

    //do other stuff here
});

3voto

Padel Punkte 7637

Können Sie dies ausprobieren, um zu sehen, ob es für Ihren Fall passt?

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

Mit freundlichen Grüßen...

3voto

Eric Punkte 90800

Ich hab's!

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

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

    //do stuff
});

2voto

Jonathon Faust Punkte 12196

Wie entscheiden Sie, welche .a zu wählen? Gibt es eine .b für immer .a ? Führen Sie jeweils eine Schleife durch? Sie könnten den Index der .a und wählen Sie einfach die entsprechende .b .

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

1voto

Eric Punkte 90800

Ok, hier ist eine modifizierte Version von Padel Lösung, die sich wie folgt verhält leicht anders

var lastA = null;

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

0voto

PeterWong Punkte 15841
$("div.a").nextAll("div.b")

Funktioniert das?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X