Abrufen eines leeren JQuery-Objekts

120

Im folgenden Code habe ich einen Änderungshandler in einem Auswahlfeld eingerichtet, um einige Folgefragen basierend auf dem Wert der Auswahl anzuzeigen und auszublenden.

Außerdem wird für einige Werte der Auswahl eine zusätzliche Meldung angezeigt.

Um zu überprüfen, ob ich die zusätzliche Nachricht ausblenden muss, behalte ich eine Variable namens "Zurück". Bei der Ausführung des Handlers überprüfe ich, ob Previous null ist oder ob die Größe 0 ist.

Es wäre schön, Previous auf ein leeres JQuery-Objekt zu initialisieren, um nicht die zusätzliche Prüfung auf null durchführen zu müssen.

Wenn Sie ein $ () ausführen, wird ein Objekt mit der Größe 1 zurückgegeben.

Gibt es eine Möglichkeit, ein leeres Jquery-Objekt zu erstellen?

// Init Funktion.
$ (function () {
// Halten Sie das zuvor ausgewählte Objekt für die Kontotypauswahl.

var Zurück = null; // Hier möchte ich initialisieren.
                      // so etwas wie Previous = $ ();


$ ("SELECT [name = 'AccountType']"). Change (
    function () {
        // Vorherige Nachricht ausblenden, falls vorhanden.
        if (Previous == null || Previous.size ()> 0) { 
            Previous.hide ();
        }}

        // Zeige die Nachricht, wenn sie gefunden wurde und speichere sie wie zuvor.
        Zurück = $ ("#" + this.value + "_ Msg"). Show ();

        // Erste Frage bekommen
        var FirstQuestion = $ (". FirstQuestion");
        if (this.value === '') {
            FirstQuestion.hide ();
        }sonst{
            // FirstQuestion manuell anzeigen.
            FirstQuestion.show ();
        }}
    });
}}

Im schlimmsten Fall könnte ich so etwas machen:

    var Zurück = {Größe: Funktion () {Rückgabe 0; }};

aber das scheint übertrieben.

Tom Hubbard
quelle

Antworten:

222

Dadurch wird ein leeres jQuery-Objekt erstellt:

$([])

Update: In neueren Versionen von jQuery (1.4+) können Sie Folgendes verwenden:

$()
Magnar
quelle
Vielen Dank. Welches ist also besser, um die Kompatibilität mit früheren und weiteren Versionen aufrechtzuerhalten? - Wie auch immer, ich kann immer noch nicht herausfinden, warum in meinem Fall beides nicht funktioniert hat. Vielleicht sollte ich eine Frage dazu stellen, aber ich habe sie gelöst, indem ich PHP anstelle von jQuery verwendet habe, damit ich mich im Moment nicht wirklich mehr damit beschäftigen kann.
Cregox
2
Feiner Test: $ (). add ($ ("div")). css ('color', 'red');
Zloctb
23
$();

Rückgabe eines leeren Satzes

Ab jQuery 1.4 gibt der Aufruf der jQuery()Methode ohne Argumente eine leere jQuery-Menge zurück (mit der .lengthEigenschaft 0). In früheren Versionen von jQuery gab dies einen Satz zurück, der den Dokumentknoten enthielt.

Quelle: api.jquery.com

Tom Hubbard
quelle
6
Wenn Sie den Link ( api.jquery.com/jQuery/#jQuery1 ) zur Sicherung Ihrer Aussage bereitstellen , erhalten Sie wahrscheinlich mehr Ups :).
Studgeek
1
Upvoted für die enthaltene Quelle. Es ist immer toll, den gesamten Kontext zur Verfügung zu haben. Ein direkterer Link zum zugehörigen Absatz wäre: api.jquery.com/jQuery/#returning-empty-set
ksadowski
3

Mein Rat ist, es nicht so zu machen. Es gibt viel einfachere Möglichkeiten, dies zu tun. Erwägen:

<select id="select" name="select">
  <option value="msg_1">Message 1</option>
  <option value="msg_2">Message 1</option>
  <option value="msg_3">Message 1</option>
</select>

<div class="msg_1 msg_3">
  ...
</div>

<div class="msg_1">
  ...
</div>

<div class="msg_2">
  ...
</div>

$(function() {
  $("#select").change(function() {
    var val = $(this).val();
    $("div." + val").show();
    $("div:not(." + val + ")").hide();
  });
});

Viel einfacher. Geben Sie grundsätzlich Klassen an, um anzugeben, was angezeigt und ausgeblendet werden soll, und dann ist keine Nachverfolgung erforderlich. Eine Alternative ist:

$(function() {
  $("#select").change(function() {
    var val = $(this).val();
    $("div").each(function() {
      if ($(this).hasClass(val)) {
        $(this).show();
      } else {
        $(this).hide();
      }
    });
  });
});
Cletus
quelle
-1

Versuche dies

 var new = $([]);

Ich bin kein guter Programmierer, aber es gibt dir ein leeres Objekt :))

Bane Neba
quelle
Sie erhalten Abstimmungen, weil Sie eine vorhandene (und sehr alte) Antwort wiederholt haben. Das bringt keinen Mehrwert für die Community.
Isherwood