[JQuery] créer un <select> trié

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -  
coeus Messages postés 3021 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je débute en JQuery, et je n'arrive pas à manipuler les balises <select> comme je le voudrais.

J'ai une balise <select id="start"></select> dans mon code html, et je veux la remplir.
J'ai un objet "marks" qui contient les données que je veux et qu'on peut manipuler comme ceci :

$("#start").append(new Option("Départ","null"));

for (var id in marks)
{
	var m = marks[id];
/*
	m["id"];	// un string : on a toujours marks[x]["id"]==x
	m["index"];	// un entier unique entre 1 et marks.length
 	m["tag"];	// un string
*/	
	// Voici ce que j'ai essayé de faire :
 	$("#start").append(new Option(m["tag"],m["index"]));
}

Mon problème, c'est que mes options apparaissent dans l'ordre où je les ai ajoutés, c'est à dire l'ordre des "id". J'avoue que c'était prévisible, mais ce n'est pas ce que je veux.
Ce que je voudrais c'est avoir les options dans l'ordre des "index" (en conservant "null" en tout premier), donc comme c'est des entiers j'aimerais avoir les valeurs successives :

<select id="start">
	<option value="null">Départ</option>
	<option value=1>Toto</option>
	<option value=2>Tata</option>
	<option value=3>Titi</option>
	...
</select>

Est-ce que quelqu'un saurait me débloquer ce problème ? Je l'en remercie d'avance !

1 réponse

coeus Messages postés 3021 Date d'inscription   Statut Membre Dernière intervention   119
 
Salut,

Mmmmmmm je pense que t'auras pas trop le choix. Ce qui me paraît le mieux, c'est de mettre toutes tes valeurs dans un array, puis ordonner cet array à ta convenance, et alors seulement créer ta liste avec des append()...
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Je te remercie de ta réponse, je vais essayer de voir ce que ça peut donner...
0
coeus Messages postés 3021 Date d'inscription   Statut Membre Dernière intervention   119
 
Reviens-nous avec ta solution si tu peux ! Ça va peut-être en aider d'autres qui se posent la même question que toi ! ;-)
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Oui, oui, je reviens, mais il fallait que je regarde ce que ça donne avant ^^

var marksT=[];

$.each(marks, function(id,m)
{
	marksT[marksT.length]=m;
});

marksT.sort(function(a,b)
{
	return a["index"]-b["index"];		
});	

$("#start").append(new Option("Départ","null"));

$.each(marksT, function(index, m)
{
	$("#start").append(new Option(m["tag"],m["index"]));
});

On va dire que le problème est résolu, mais je reste ouvert à toute proposition améliorante ;-)
0
coeus Messages postés 3021 Date d'inscription   Statut Membre Dernière intervention   119
 
Si tu veux d'autres avis, tu devrais peut-être le laisser en non-résolu pendant quelques jours... Marqué résolu, plus personne ne viendra le voir... ;-)
Fais un "up" ou deux, au pire.
0