Obtendo um Objeto JQuery Vazio

120

No código a seguir, configurei um manipulador de alterações em uma caixa de seleção para mostrar e ocultar algumas perguntas de acompanhamento com base no valor da seleção.

Além disso, para alguns valores da seleção, é exibida uma mensagem extra.

Para verificar se preciso ocultar a mensagem extra, mantenho uma variável chamada Anterior. Na execução do manipulador, verifico se Previous é nulo ou se o tamanho é 0.

Seria bom inicializar o Previous para um objeto JQuery vazio para não precisar fazer a verificação extra para nulo.

Fazer um $ () retorna um objeto com o tamanho de 1.

Existe uma maneira de criar um objeto Jquery vazio?

// Função inicial.
$ (function () {
// Segure o objeto selecionado anteriormente para a seleção do tipo de conta.

var Anterior = nulo; // Aqui é onde eu gostaria de inicializar.
                      // algo como Previous = $ ();


$ ("SELECT [name = 'AccountType']"). Change (
    function () {
        // Ocultar mensagem anterior se houver uma.
        if (Previous == null || Previous.size ()> 0) { 
            Previous.hide ();
        }

        // Mostra a mensagem se encontrada e salve-a como anterior.
        Anterior = $ ("#" + this.value + "_ Msg"). Show ();

        // Obter a primeira pergunta
        var FirstQuestion = $ (". FirstQuestion");
        if (this.value === '') {
            FirstQuestion.hide ();
        }outro{
            // Mostra manualmente a FirstQuestion.
            FirstQuestion.show ();
        }
    });
}

No pior dos casos, eu poderia fazer algo assim:

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

mas isso parece exagero.

Tom Hubbard
fonte

Respostas:

222

Isso cria um objeto jQuery vazio:

$([])

Atualização: nas versões mais recentes do jQuery (1.4+), você pode usar:

$()
Magnar
fonte
obrigado. Então, qual é o melhor para manter a compatibilidade com versões anteriores e posteriores? - De qualquer forma, ainda não consigo entender por que nem funcionou no meu caso. Talvez eu deva abrir uma pergunta sobre isso, mas resolvi usando o PHP em vez do jQuery, para que eu não possa cavar mais detalhes agora.
Cregox 02/03
2
teste fino: $ (). add ($ ("div")). css ('cor', 'vermelho');
Zloctb
23
$();

Retornando um conjunto vazio

A partir do jQuery 1.4, chamar o jQuery()método sem argumentos retorna um conjunto jQuery vazio (com uma .lengthpropriedade 0). Nas versões anteriores do jQuery, isso retornaria um conjunto contendo o nó do documento.

Fonte: api.jquery.com

Tom Hubbard
fonte
6
Fornecer o link ( api.jquery.com/jQuery/#jQuery1 ) para fazer backup de sua declaração provavelmente levaria mais altos :).
studgeek
1
Voto positivo para a fonte incluída. Sempre bom ter todo o contexto disponível. Um link mais direto para o parágrafo relacionado seria: api.jquery.com/jQuery/#returning-empty-set
ksadowski
3

Meu conselho é não fazer dessa maneira. Existem maneiras muito mais fáceis de fazer isso. Considerar:

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

Muito mais fácil Basicamente, forneça classes para indicar o que mostrar e ocultar e, em seguida, não há rastreamento necessário. Uma alternativa é:

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

tente isso

 var new = $([]);

Eu não sou um bom programador, mas lhe dá um objeto vazio :))

Bane Neba
fonte
Você está recebendo votos negativos porque repetiu uma resposta existente (e muito antiga). Isso não agrega valor à comunidade.
isherwood 30/04