Obteniendo un objeto JQuery vacío

120

En el siguiente código configuré un controlador de cambios en un cuadro de selección para mostrar y ocultar algunas preguntas de seguimiento basadas en el valor de la selección.

Además, para algunos valores de la selección, se muestra un mensaje adicional.

Para verificar si necesito ocultar el mensaje adicional, mantengo una variable llamada Anterior. Tras la ejecución del controlador, verifico si Previous es nulo o si el tamaño es 0.

Sería bueno inicializar Previous en un objeto JQuery vacío para no tener que hacer la verificación adicional de nulo.

Hacer un $ () devuelve un objeto con el tamaño de 1.

¿Hay alguna forma de crear un objeto Jquery vacío?

// Función de inicio.
$ (función () {
// Mantenga el objeto seleccionado previamente para la selección del tipo de cuenta.

var Anterior = nulo; // Aquí es donde me gustaría inicializar.
                      // algo como Anterior = $ ();


$ ("SELECT [name = 'AccountType']"). Change (
    function () {
        // Ocultar el mensaje anterior si había uno.
        if (Anterior == nulo || Anterior.size ()> 0) { 
            Previous.hide ();
        }

        // Muestra el mensaje si lo encuentra y guárdalo como anterior.
        Anterior = $ ("#" + este.valor + "_ Msj"). Show ();

        // Obtener la primera pregunta
        var FirstQuestion = $ (". FirstQuestion");
        si (este.valor === '') {
            FirstQuestion.hide ();
        }más{
            // Muestra manualmente FirstQuestion.
            FirstQuestion.show ();
        }
    });
}

En el peor de los casos, podría hacer algo como esto:

    var Anterior = {tamaño: función () {retorno 0; }};

pero eso parece una exageración.

Tom Hubbard
fuente

Respuestas:

222

Esto crea un objeto jQuery vacío:

$([])

Actualización: en las versiones más recientes de jQuery (1.4+), puede usar:

$()
Magnar
fuente
Gracias. Entonces, ¿cuál es mejor para mantener la compatibilidad con versiones anteriores y posteriores? - De todos modos, todavía no puedo entender por qué ninguno funcionó en mi caso. Tal vez debería abrir una pregunta al respecto, pero lo resolví usando PHP en lugar de jQuery, por lo que realmente no puedo profundizar más en este momento.
cregox
2
prueba fina: $ (). add ($ ("div")). css ('color', 'red');
zloctb
24
$();

Devolver un juego vacío

A partir de jQuery 1.4, llamar al jQuery()método sin argumentos devuelve un conjunto de jQuery vacío (con una .lengthpropiedad de 0). En versiones anteriores de jQuery, esto devolvería un conjunto que contenía el nodo del documento.

Fuente: api.jquery.com

Tom Hubbard
fuente
6
Si proporciona el enlace ( api.jquery.com/jQuery/#jQuery1 ) para hacer una copia de seguridad de su declaración, probablemente obtendrá más actualizaciones :).
studgeek
1
Votó a favor de la fuente incluida. Siempre es bueno tener todo el contexto disponible. Un enlace más directo al párrafo relacionado sería: api.jquery.com/jQuery/#returning-empty-set
ksadowski
3

Mi consejo es que no lo hagas de esa manera. Hay formas mucho más sencillas de hacer esto. 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();
  });
});

Mucho más fácil. Básicamente, da clases para indicar qué mostrar y ocultar y luego no se requiere seguimiento. Una alternativa es:

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

prueba esto

 var new = $([]);

No soy un buen programador pero te da un objeto vacío :))

Bane Neba
fuente
Recibes votos negativos porque has repetido una respuesta existente (y muy antigua). Eso no agrega ningún valor a la comunidad.
Isherwood