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

Fermé
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 8 nov. 2011 à 19:56
coeus Messages postés 3021 Date d'inscription samedi 13 janvier 2007 Statut Membre Dernière intervention 19 juin 2013 - 9 nov. 2011 à 17:28
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 !
A voir également:

1 réponse

coeus Messages postés 3021 Date d'inscription samedi 13 janvier 2007 Statut Membre Dernière intervention 19 juin 2013 119
8 nov. 2011 à 23:35
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 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
9 nov. 2011 à 10:48
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 samedi 13 janvier 2007 Statut Membre Dernière intervention 19 juin 2013 119
9 nov. 2011 à 15:31
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 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
9 nov. 2011 à 17:17
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 samedi 13 janvier 2007 Statut Membre Dernière intervention 19 juin 2013 119
9 nov. 2011 à 17:28
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