6 Stimmen

JQuery Selector nicht dieses Kind

Gibt es eine Möglichkeit, ein Klickereignis an mehrere Elemente anzuhängen und dann alle Kinder des Elements, außer den Kindern von DIESEM (dem angeklickten), eine Funktion ausführen zu lassen?

Das ist eine schreckliche Erklärung, aber ich suche etwas wie das hier:

$(".block_header").click(function(){
    $(".block_header span:not(this span)").toggleClass("collapse expand");
    $(".container:not(this+div.container)").slideToggle();
});

Hier ist ein Beispiel-HTML:

Sender

    Zeige oder verstecke dies, basierend darauf, welches H3 angeklickt wird.

Empfänger

    Zeige oder verstecke dies, basierend darauf, welches H3 angeklickt wird.

Lieferung

    Zeige oder verstecke dies, basierend darauf, welches H3 angeklickt wird.

Artikel

    Zeige oder verstecke dies, basierend darauf, welches H3 angeklickt wird.

.... etc, etc (viele mehr von demselben)

Hoffentlich ist das nicht zu kompliziert. Es würde mir eine MENGE Code sparen.

15voto

Matt Punkte 72534

Statt das Element im Selector auszuschließen, können Sie die not()-Funktion verwenden, die ein DOM-Element oder ein jQuery-Objekt akzeptiert, das aus dem jQuery-Set entfernt werden soll.

$(".block_header").click(function(e) {
    $('.block_header span').not($(this).find('span')).toggleClass("collapse expand");

    $('.container').not($(this).next()).slideToggle();
});

3voto

will Punkte 4537

Versuchen Sie das:

$(this).parent('h3').siblings('h3').children('span').addClass('active');
$(this).parent('h3').siblings('h3').next('div.container').slideToggle('active');

Das sollte funktionieren!

Kann ich aber davon ausgehen, dass Sie nur immer eine aktive haben werden?

Falls das der Fall ist, ist dies am einfachsten:

$('.active').removeClass('active').parent('h3').next('div.container').slideUp();

Hoffentlich hilft das :)

Bearbeiten:

Um besonders schlau zu sein, speichern Sie den aktiven als Variable. Also beim Klick:

$active = $(this);

Dann können Sie beim nächsten Mal dies tun, ohne dass jQuery das Element erneut suchen muss:

$active.removeClass('active').parent('h3').next('div.container').slideUp();
$active = $(this);

2voto

The System Restart Punkte 2883
$(".block_header").click(function(){
    $(".block_header span").not($('span', this)).toggleClass("active");
    $(".container").not($(this).next()).slideToggle();
});

1voto

Imdad Punkte 5854

Mach es so

 $(".block_header").not(this).find("span").toggleClass("collapse","expand");

 $(".container").not(this).not("div.container").slideToggle();

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