4 Stimmen

jQuery: Eleganteres if/else mit Selektoren

Diese Art von Code spucke ich häufig aus:

if ($(this).val() == 'X') {
    $('#something').show();
}
else {
    $('#something').hide();
}

Ich bin nicht begeistert davon, dass $('#irgendwas') zweimal erscheint. Gibt es einen eleganteren Weg, dies auszudrücken?

[Update] Ich habe die Frage schlecht formuliert - ich bin auf der Suche nach einer allgemeinen Lösung, nicht nur anzeigen/ausblenden (und daher umschalten). Für den allgemeinen Fall der Einnahme verschiedene Aktionen auf ein ausgewähltes Element (s) auf der Grundlage einer Bedingung, gibt es eine elegante Konstruktion?

8voto

Georg Schölly Punkte 120083

toggle()

Umschalten der Anzeige jeder der Gruppen von übereinstimmenden Elemente basierend auf dem Schalter (true zeigt alle Elemente an, false verbirgt alle Elemente).

Wenn der Schalter wahr ist, toggle macht sie unsichtbar (unter Verwendung der hide-Methode). Wenn der Schalter auf false steht, werden sie durch Umschalten angezeigt (mit der show-Methode).

var result = ($(this).val() != 'X');
$('#something').toggle(result);

oder kürzer

$('#something').toggle('X' != $(this).val());

5voto

Jimmy Punkte 85199

Was die allgemeine Frage betrifft, ob "#irgendetwas" nicht zweimal vorkommen sollte, würde ich sagen, dass es besser lesbar ist, wenn es zweimal vorkommt, da man sonst folgendes erhält:

$('#something')[$(this).val()=='X'?'show':'hide']();

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