Insertion d'un élément select alphabétiquement
Bonjour,
J'insère un élément ou plusieurs dans un select comportant plus de 1500 éléments.
Je souhaite que l'ordre alphabétique soit respecté.
J'ai donc créer un code avec passage par un tableau de travail :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| //******** Transfert des éléments sélectionnés d'une liste dans une autre *******
function transf_select(form,liste1,liste2)
{
try{
var nb_elt = document.getElementsByName(liste1)[0].length;
var tab = new Array(); // Tableau de travail dans lequel on copie les éléments sélectionnés
// de la liste1 puis les éléments déjà existants de la liste 2. On trie
// ensuite le tableau avant de remplacer les éléments de la liste 2 par
// les valeurs du tableau trié.
var texte = "";
var p = 0; // Position du dernier espace de chaque élément du tableau tab. Permet
// de récupérer la dernière valeur de chaque élément
var i = 0;
while(i < nb_elt)
{
if(document.getElementsByName(liste1)[0].options[i].selected == true)
{
// Initialisation de tab avec les valeurs sélectionnées de la liste1 (Nom+prénom+" "+identifiant)
texte = document.getElementsByName(liste1)[0].options[i].text+" "+
document.getElementsByName(liste1)[0].options[i].value;
tab.push(texte);
// Supprime l'élément de la liste1
document.forms[form].elements[liste1].options.remove(i);
nb_elt--;
}
else
i++;
}
// Ajoute à tab les valeurs de liste2
nb_elt = document.getElementsByName(liste2)[0].length;
i = nb_elt - 1;
while(i >= 0)
{
// Ajoute les éléments de la liste2 dans tab (Nom+prénom+" "+identifiant)
texte = document.getElementsByName(liste2)[0].options[i].text+" "+
document.getElementsByName(liste2)[0].options[i].value;
tab.push(texte);
// Supprime l'élément de la liste2
document.forms[form].elements[liste2].options.remove(i);
// Compte le nb d'éléments restant après suppression
i--;
}
// Tri du tableau
tab.sort();
// Recopie les valeurs de tab dans liste2
for (i=0;i<tab.length;i++)
{
// Cherche la position du dernier espace dans la chaine "Nom prénom identifiant"
p = tab[i].lastIndexOf(" ",tab[i].length);
// Initialise la variable texte avec le nom + prénom
texte = tab[i].substring(0,p);
// Initialise la variable valeur avec l'identifiant
valeur = tab[i].substring(p,tab[i].length);
// Ajoute un élément dans liste2
ajout_element(texte,valeur,form,liste2,-1);
}
// Déselectionne les éléments sélectionnés des 2 listes
document.getElementsByName(liste1)[0].selectedIndex = -1;
document.getElementsByName(liste2)[0].selectedIndex = -1;
}catch(err){ texte_err = "Une exception s'est produite lors de l'exécution de la fonction transf_select()\n\n";
texte_err+= "Nom de l'exception : " + err.name+"\n\n";
texte_err+= "Message d'erreur reçu : " + err.message+"\n\n";
texte_err+= "Merci de contacter le service Informatique.";
alert(texte_err);}
} |
Le traitement se déroule correctement mais est long.
Connaissez-vous une autre solution ?
Merci pour vos idées :)