2010-10-23 6 views
2

J'ai un champ de sélection sur ma page HTML qui est rempli avec quelques éléments par défaut. Avec l'aide d'AJAX, je remplace le contenu (options) dans le champ de sélection par des options appropriées.jQuery: Stockage du contenu de select-box à variable?

Comment puis-je stocker le contenu (options) de mon champ select dans une variable, puis le charger de nouveau dans le select? Il serait utile de pouvoir récupérer les options par défaut du champ select.

Merci!

+0

vous pouvez stocker à droite l'objet côté client, vous pouvez lire quand vous voulez agian, essayez de stocker dans un objecct global dans javscript. – kobe

+0

@gov Je ne recommanderais pas de créer des membres globaux –

+0

@sime, je suis d'accord, nous pouvons utiliser .data qui est sympa. – kobe

Répondre

4

Vous pouvez utiliser jQuery's .clone() method sur les éléments d'origine afin de garder une référence à une copie de dans son état d'origine.

var $default_opts = $('#mySelect').children()//.clone(); 

J'utilisé jQuery's .children() ici pour garder un peu plus générique dans le cas où vous utilisez <optgroup> éléments.

Quand vient le temps de revenir aux originaux, vous pouvez faire quelque chose comme ceci:

$('#mySelect').empty().append($default_opts.clone()); 

Ce vide le <select> de son contenu actuel, et ajoute un clone des paramètres par défaut afin que votre copie est conservée dans son état d'origine.


EDIT: J'ai mal lu partie de la question. Vous n'auriez pas besoin de la première .clone().

0

Mon chemin serait d'utiliser la fonction .data de jQuery pour stocker les options html.

select_box = $("#select-box"); 
select_box.data("orginal_options", select_box.html()); 
select_box.html("<option value='1'>New Option</option>"); 

Pour resotre:

select_box.html(select_box.data("original_options")); 

Bien sûr, ce sont les idées de base, comme je ne sais pas vraiment comment est votre logique. (Et s'il vous plaît corrigez-moi si je me trompe).

+0

Oui, j'ai oublié. Data, c'est une fonctionnalité très intéressante dans jquery. – kobe

+0

J'utilisais le plugin jquery.metdata.js pour créer et accéder aux données dynimaic. – kobe

+0

En fait, nous pourrions garder les données stockées en séquence afin d'avoir un historique de la modification du contenu de select. 'select_box.data (" original_options "). push (select_box.html());' si vous l'avez initialisé dans un tableau. – PeterWong

2

Si vous souhaitez restaurer les objets au lieu du html() - chaîne, vous pouvez utiliser Détacher()

//remove options from select and hold them inside a variable 
var defaults=$('select option').detach(); 

//clear select and restore the defaults 
$('select').empty().append(defaults); 

Un exemple comment l'utiliser avec replaceWith():

<select id="target" size="3"> 
<option>a 
<option>b 
</select> 
<input type="button" 
    value="replace" 
    onclick="fx($('#target'),this)" 
    /> 

<script type='text/javascript'> 
function fx(o,b) 
{ 
if(b.value==='replace') 
{ 
    o.data('defaults',$('option',o).replaceWith('<option>1</option><option>2</option>')); 
    $(b).val('restore'); 
} 
else 
{ 
    $(o).empty().append($(o).data('defaults')); 
    $(b).val('replace'); 
} 
} 
</script> 

http://jsfiddle.net/doktormolle/Sgn72/

+0

La méthode '.detach()' n'est pas tout à fait appropriée pour cela. Je ne pense pas que OP veut vraiment supprimer les éléments du DOM, mais veut plutôt garder une référence à eux dans leur état d'origine. – user113716

+0

html() et clone()/cloneNode() ne donneront pas une référence aux objets d'origine. S'il veut remplacer les valeurs par défaut au lieu de les supprimer en premier, il peut utiliser replaceWith(), cela retournera aussi les options supprimées. –

+0

Oui, '.replaceWith()' serait bien, mais avec quoi le remplacer? Vous devrez toujours (par certains moyens) faire un clone des originaux à remettre en place. Même chose si vous '.detach()'. : o) – user113716

Questions connexes