Mais c'est probablement mieux de se demander pourquoi et ce que vous essayez d'accomplir.
+1, basé uniquement sur ce qu'il faudrait faire sans jQuery (voir la réponse ci-dessous).
Cela a très bien fonctionné pour moi. Ma liste déroulante est renseigné sur le changement d'une autre liste déroulante. Ce code a fait l'affaire! Merci @mastro
<selectid="foo"size="10"><optionvalue="3">three</option><optionvalue="1">one</option><optionvalue="0">zero</option><optionvalue="2">two</option></select><script>//WARN: won't handle OPTGROUPs!var sel = document.getElementById('foo');//convert OPTIONs NodeList to an Array//- keep in mind that we're using the original OPTION objectsvar ary =(function(nl){var a =[];for(var i =0, len = nl.length; i < len; i++)
a.push(nl.item(i));return a;})(sel.options);//sort OPTIONs Array
ary.sort(function(a,b){//sort by "value"? (numeric comparison)//NOTE: please remember what ".value" means for OPTION objectsreturn a.value - b.value;//or by "label"? (lexicographic comparison) - case sensitive//return a.text < b.text ? -1 : a.text > b.text ? 1 : 0;//or by "label"? (lexicographic comparison) - case insensitive//var aText = a.text.toLowerCase();//var bText = b.text.toLowerCase();//return aText < bText ? -1 : aText > bText ? 1 : 0;});//remove all OPTIONs from SELECT (don't worry, the original//OPTION objects are still referenced in "ary") ;-)for(var i =0, len = ary.length; i < len; i++)
sel.remove(ary[i].index);//(re)add re-ordered OPTIONs to SELECTfor(var i =0, len = ary.length; i < len; i++)
sel.add(ary[i],null);</script>
.la comparaison de la valeur ne fonctionne que pour les objets numériques; pour le tri lexicographique voir le comparateur de masto de réponse.
Désolé, mais je ne comprends pas quel est le point de votre commentaire, je suis sûr que vous avez regardé UNE ligne en dessous de cette comparaison numérique qui fait exactement un, devinez quoi, "lexicographique" de comparaison sur les options "texte"?! 🙁
Belle utilisation de <select> spécifique ajouter()/remove()
cette solution conserve tous les attribut attaché à ces options; dans le cas où vous utilisez ceux-ci pour stocker des données: il ne sera pas perdu sur la re-commande. Très sympa! c'est une alternative à l'ordre par l'un de ces attributs dans l'aire.fonction de tri : var aPosition = parseInt( un.getAttribute('Position') ); var bPosition = parseInt( b.getAttribute('Position') ); return aPosition < bPosition ? -1 : aPosition > bPosition ? 1 : 0;
Mettre les valeurs d'option et texte dans un tableau, trier le tableau, puis de remplacer l'option éléments avec de nouveaux éléments construits à partir du tableau trié.
Si vous souhaitez trier les éléments en fonction de l' valeur plutôt que le texte, puis la fonction de lecture: function (a, b) { return a.value - b.value })
$(document).ready(function(){
$.when($('select').addClass('auto-drop-sort')).then($.fn.sortDropOptions("auto-drop-sort"))})/*sort all dropdown*/
$.fn.sortDropOptions =function(dropdown_class){var prePrepend =".";if(dropdown_class.match("^.")==".") prePrepend ="";var myParent = $(prePrepend + dropdown_class);
$.each(myParent,function(index, val){/*if any select tag has this class 'manual-drop-sort' this function wont work for that particular*/if(! $(val).hasClass('manual-drop-sort')){var selectedVal = $(val).val()
$(val).html($(val).find('option').sort(function(a, b){if( a.value !=-1&& a.value !=0&& a.value !=''){return a.text == b.text ?0: a.text < b.text ?-1:1}}));
$(val).val(selectedVal)}else{/* set custom sort for individual select tag using name/id */}});}
Vous pouvez utiliser jQuery et quelque chose comme ceci:
Mais c'est probablement mieux de se demander pourquoi et ce que vous essayez d'accomplir.
Vous pouvez essayer de JQuery fonction de tri pour ce travail --
Essayez ceci
CODE HTML -
JQUERY -
OU
vous pouvez également utiliser le tableau de tri pour cette -
Essayez Ceci
Mettre les valeurs d'option et texte dans un tableau, trier le tableau, puis de remplacer l'option éléments avec de nouveaux éléments construits à partir du tableau trié.
DÉPEND DE JQUERY
Exemples:
<select id="mon-list-id"> est triée avec:
OU
function (a, b) { return a.value - b.value })
POUR DÉROULANTE POUR L'ENSEMBLE DU PROJET