2009-05-22 7 views
106

Dans le code suivant, j'ai configuré un gestionnaire de changement dans une zone de sélection pour afficher et masquer certaines questions de suivi en fonction de la valeur de la sélection.Obtention d'un objet JQuery vide

En outre, pour certaines valeurs de la sélection, un message supplémentaire s'affiche.

Afin de vérifier si j'ai besoin de cacher le message supplémentaire, je garde une variable appelée Précédent. À l'exécution du gestionnaire, je vérifie si Previous est nul ou si la taille est 0.

Il serait bien d'initialiser Previous à un objet JQuery vide afin de ne pas avoir à faire la vérification supplémentaire pour null.

Faire un $() retourne un objet avec la taille de 1.

Est-il possible de créer un objet Jquery vide?

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

Dans le pire des cas que je pouvais faire quelque chose comme ceci:

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

mais qui semble exagéré.

Répondre

197

Cela crée un vide jQuery objet:

$([]) 

Mise à jour: Dans les nouvelles versions de jQuery (1.4+), vous pouvez utiliser:

$() 
+6

1 belle réponse, je ne aurais jamais pensé que :) –

+0

Je ne vois pas comment cela est différent de '$()'. Quelqu'un peut-il jeter une lumière? – cregox

+3

À partir de jQuery 1.4, ce n'est pas le cas. Une question a été posée avant cela. – Magnar

3

Mon conseil est don » Je fais ça comme ça. Il y a beaucoup de façons plus simples de le faire. Considérez:

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

Beaucoup plus facile. Fondamentalement donner des classes pour indiquer ce qu'il faut montrer et cacher et puis il n'y a pas de suivi requis. Une alternative est:

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

Retour d'un ensemble vide

À partir de jQuery 1.4, appelant la méthode jQuery() sans argument renvoie un ensemble jQuery vide (avec une propriété .length de 0). Dans les versions précédentes de jQuery, cela renvoyait un ensemble contenant le noeud de document.

Source: api.jquery.com

+5

Fournir le lien (http://api.jquery.com/jQuery/#jQuery1) pour sauvegarder votre déclaration vous rapportera probablement plus de choses :). – studgeek

Questions connexes