2009-05-22 15 views
106

En el siguiente código configuro un manejador de cambios en un cuadro de selección para mostrar y ocultar algunas preguntas de seguimiento en función del valor de la selección.Obteniendo un objeto JQuery vacío

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

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

Sería bueno inicializar Anterior a un objeto JQuery vacío para no tener que hacer la comprobación adicional para null.

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

¿Hay una manera de crear un objeto jQuery vacío?

 
//Init function. 
$(function(){ 
//Hold the previously selected object for the account type selection. 

var Previous = null; //Here is where I would like to initialize. 
         //something like Previous = $(); 


$("SELECT[name='AccountType']").change(
    function() { 
     //Hide Previous message if there was one. 
     if(Previous == null || Previous.size() > 0){ 
      Previous.hide(); 
     } 

     //Show the message if found and save it as previous. 
     Previous = $("#"+this.value+"_Msg").show(); 

     //Get fisrt question 
     var FirstQuestion = $(".FirstQuestion"); 
     if(this.value === ''){ 
      FirstQuestion.hide(); 
     }else{ 
      //Manually show FirstQuestion. 
      FirstQuestion.show(); 
     } 
    }); 
} 

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

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

pero que parece un exceso.

Respuesta

197

Esto crea un vacío jQuery a objetos:

$([]) 

Actualización: En las nuevas versiones de jQuery (1.4+), que puede utilizar:

$() 
+6

1 respuesta preciosa, nunca lo hubiera pensado de ese :) –

+0

No veo cómo esto es diferente de '$()'. ¿Alguien puede arrojar una luz? – cregox

+3

A partir de jQuery 1.4, no lo es. La pregunta fue hecha antes de eso. – Magnar

3

Mi consejo es don' t lo haces de esa manera. Hay formas mucho más sencillas de hacer esto. Considere:

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

Volviendo un conjunto vacío

A partir de jQuery 1.4, llamando al método jQuery() sin argumentos devuelve un conjunto de jQuery vacía (con un .length propiedad de 0) En versiones anteriores de jQuery, esto devolvería un conjunto que contiene el nodo del documento.

Fuente: api.jquery.com

+5

Si proporcionas el enlace (http://api.jquery.com/jQuery/#jQuery1) para respaldar tu declaración probablemente obtendrás más actualizaciones :). – studgeek

Cuestiones relacionadas