Mendapatkan objek JQuery kosong

120

Dalam kode berikut saya menyiapkan penangan perubahan pada kotak pilih untuk menampilkan dan menyembunyikan beberapa pertanyaan tindak lanjut berdasarkan nilai pilihan.

Selanjutnya, untuk beberapa nilai pemilihan ada pesan tambahan yang ditampilkan.

Untuk memeriksa apakah saya perlu menyembunyikan pesan tambahan, saya menyimpan variabel yang disebut Sebelumnya. Setelah eksekusi penangan saya memeriksa untuk melihat apakah Sebelumnya nol atau jika ukurannya 0.

Alangkah baiknya untuk menginisialisasi Sebelumnya ke objek JQuery kosong agar tidak perlu melakukan pemeriksaan ekstra untuk null.

Melakukan $ () mengembalikan objek dengan ukuran 1.

Apakah ada cara untuk membuat objek Jquery kosong?

// Fungsi init.
$ (function () {
// Tahan objek yang dipilih sebelumnya untuk pemilihan tipe akun.

var Sebelumnya = null; // Di sinilah saya ingin menginisialisasi.
                      // sesuatu seperti Sebelumnya = $ ();


$ ("SELECT [name = 'AccountType']"). Change (
    fungsi () {
        // Sembunyikan pesan sebelumnya jika ada.
        if (Sebelumnya == null || Sebelumnya.size ()> 0) { 
            Sebelumnya.hide ();
        }

        // Tampilkan pesan jika ditemukan dan simpan seperti sebelumnya.
        Sebelumnya = $ ("#" + this.value + "_ Msg"). Show ();

        // Dapatkan pertanyaan pertama
        var FirstQuestion = $ (". FirstQuestion");
        if (this.value === '') {
            FirstQuestion.hide ();
        }lain{
            // Perlihatkan FirstQuestion secara manual.
            FirstQuestion.show ();
        }
    });
}

Dalam kasus terburuk saya bisa melakukan sesuatu seperti ini:

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

tapi sepertinya itu berlebihan.

Tom Hubbard
sumber

Jawaban:

222

Ini membuat objek jQuery kosong:

$([])

Pembaruan: Di versi jQuery (1.4+) yang lebih baru, Anda dapat menggunakan:

$()
Magnar
sumber
Terima kasih. Jadi mana yang lebih baik untuk menjaga kompatibilitas dengan versi sebelumnya dan selanjutnya? - Bagaimanapun, saya masih tidak tahu mengapa tidak ada yang berhasil dalam kasus saya. Mungkin saya harus membuka pertanyaan tentang itu, tetapi saya menyelesaikannya dengan menggunakan PHP dan bukan jQuery jadi saya tidak bisa menggali lebih dalam sekarang.
Cregox
2
tes bagus: $ (). add ($ ("div")). css ('color', 'red');
zloctb
24
$();

Mengembalikan Set Kosong

Mulai jQuery 1.4, memanggil jQuery()metode tanpa argumen akan mengembalikan set jQuery kosong (dengan .lengthproperti 0). Di versi jQuery sebelumnya, ini akan mengembalikan satu set yang berisi node dokumen.

Sumber: api.jquery.com

Tom Hubbard
sumber
6
Memberikan tautan ( api.jquery.com/jQuery/#jQuery1 ) untuk mendukung pernyataan Anda mungkin akan memberi Anda lebih banyak lagi :).
studgeek
1
Suara positif untuk sumber yang disertakan. Selalu menyenangkan memiliki semua konteks yang tersedia. Tautan yang lebih langsung ke paragraf terkait adalah: api.jquery.com/jQuery/#returning-empty-set
ksadowski
3

Saran saya, jangan lakukan seperti itu. Ada banyak cara yang lebih mudah untuk melakukan ini. Mempertimbangkan:

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

Jauh lebih mudah. Pada dasarnya berikan kelas untuk menunjukkan apa yang harus ditampilkan dan disembunyikan dan kemudian tidak diperlukan pelacakan. Alternatifnya adalah:

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

coba ini

 var new = $([]);

Saya bukan programmer yang baik tetapi itu memberi Anda objek kosong :))

Bane Neba
sumber
Anda mendapatkan suara negatif karena Anda telah mengulangi jawaban yang ada (dan sangat lama). Itu tidak menambah nilai apa pun bagi komunitas.
Isherwood