Pobieranie pustego obiektu JQuery

120

W poniższym kodzie skonfigurowałem procedurę obsługi zmian w polu wyboru, aby pokazać i ukryć niektóre pytania uzupełniające na podstawie wartości wyboru.

Ponadto dla niektórych wartości wyboru wyświetlany jest dodatkowy komunikat.

Aby sprawdzić, czy muszę ukryć dodatkową wiadomość, zachowuję zmienną o nazwie Poprzedni. Po uruchomieniu procedury obsługi sprawdzam, czy poprzedni jest pusty lub czy rozmiar wynosi 0.

Byłoby miło zainicjować Previous do pustego obiektu JQuery, aby nie musieć wykonywać dodatkowego sprawdzania wartości null.

Wykonanie $ () zwraca obiekt o rozmiarze 1.

Czy istnieje sposób na utworzenie pustego obiektu Jquery?

// Inicjalizacja funkcji.
$ (funkcja () {
// Wstrzymaj poprzednio wybrany obiekt do wyboru typu konta.

var Poprzedni = null; // Tutaj chciałbym zainicjować.
                      // coś takiego jak Poprzedni = $ ();


$ ("SELECT [name = 'AccountType']"). Change (
    function () {
        // Ukryj poprzednią wiadomość, jeśli była.
        if (Poprzedni == null || Poprzedni.size ()> 0) { 
            Previous.hide ();
        }

        // Pokaż wiadomość, jeśli zostanie znaleziona i zapisz ją jako poprzednią.
        Poprzedni = $ ("#" + this.value + "_ Msg"). Show ();

        // Uzyskaj pierwsze pytanie
        var FirstQuestion = $ (". FirstQuestion");
        if (this.value === '') {
            FirstQuestion.hide ();
        }jeszcze{
            // Ręcznie pokaż FirstQuestion.
            FirstQuestion.show ();
        }
    });
}

W najgorszym przypadku mógłbym zrobić coś takiego:

    var Poprzedni = {size: function () {return 0; }};

ale to wydaje się przesada.

Tom Hubbard
źródło

Odpowiedzi:

222

Spowoduje to utworzenie pustego obiektu jQuery:

$([])

Aktualizacja: W nowszych wersjach jQuery (1.4+) możesz użyć:

$()
Magnar
źródło
dzięki. Więc który z nich lepiej zachować zgodność z poprzednimi i kolejnymi wersjami? - W każdym razie, nadal nie mogę zrozumieć, dlaczego w moim przypadku nie zadziałało. Może powinienem otworzyć pytanie na ten temat, ale rozwiązałem to za pomocą PHP zamiast jQuery, więc nie mogę teraz zagłębiać się w to więcej.
cregox
2
dobry test: $ (). add ($ ("div")). css ('color', 'red');
zloctb
24
$();

Zwracanie pustego zestawu

Począwszy od jQuery 1.4, wywołanie jQuery()metody bez argumentów zwraca pusty zestaw jQuery (z .lengthwłaściwością 0). W poprzednich wersjach jQuery zwróciło to zestaw zawierający węzeł dokumentu.

Źródło: api.jquery.com

Tom Hubbard
źródło
6
Podanie linku ( api.jquery.com/jQuery/#jQuery1 ) do poparcia Twojego oświadczenia prawdopodobnie przyniosłoby więcej ulepszeń :).
studgeek
1
Głosowano za dołączonym źródłem. Zawsze dobrze jest mieć dostęp do całego kontekstu. Bardziej bezpośredni link do powiązanego akapitu to: api.jquery.com/jQuery/#returning-empty-set
ksadowski
3

Moja rada brzmi: nie rób tego w ten sposób. Jest na to dużo łatwiejszych sposobów. Rozważać:

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

Dużo łatwiej. Zasadniczo podaj klasy, aby wskazać, co pokazać i ukryć, a wtedy nie jest wymagane śledzenie. Alternatywą jest:

$(function() {
  $("#select").change(function() {
    var val = $(this).val();
    $("div").each(function() {
      if ($(this).hasClass(val)) {
        $(this).show();
      } else {
        $(this).hide();
      }
    });
  });
});
cletus
źródło
-1

Spróbuj tego

 var new = $([]);

Nie jestem dobrym programistą, ale daje ci pusty obiekt :))

Bane Neba
źródło
Otrzymujesz głosy przeciw, ponieważ powtórzyłeś istniejącą (i bardzo starą) odpowiedź. To nie wnosi żadnej wartości do społeczności.
isherwood