189 votes

Comment effacer toutes les options d'une liste déroulante ?

Mon code fonctionne dans IE mais se casse dans Safari, Firefox et Opera. (grosse surprise)

document.getElementById("DropList").options.length=0;

Après avoir cherché, j'ai appris que c'est la length=0 qu'il n'aime pas.
J'ai essayé ...options=null et var clear=0; ...length=clear avec le même résultat.

Je fais cela sur plusieurs objets à la fois, donc je cherche un code JS léger.

0 votes

A détruire toutes les options ( !?), et à propos de la réinitialisation de l'historique des options sélectionnées du navigateur après le rafraîchissement de la page, d'utiliser la fonction HTML <option selected> ? ? (google nous a mis ici mais ce n'est pas ici)... Voir document.getElementById("form1").reset() véritable solution.

330voto

Fabiano Points 656

Pour supprimer les options d'un élément HTML de select vous pouvez utiliser le remove() méthode :

function removeOptions(selectElement) {
   var i, L = selectElement.options.length - 1;
   for(i = L; i >= 0; i--) {
      selectElement.remove(i);
   }
}

// using the function:
removeOptions(document.getElementById('DropList'));

Il est important de retirer le options en arrière ; comme le remove() réorganise la méthode options collection. De cette façon, il est garanti que l'élément à retirer existe toujours !

10 votes

Merci pour cela @Fabiano, cela supprime réellement les éléments contrairement aux autres suggestions.

4 votes

La clé ici est la traversée en arrière de la selectbox.options je pense....cette solution a échoué quand j'ai essayé la traversée en avant

7 votes

Oui, cela échouera car la méthode remove() réarrangera le tableau. En procédant à l'envers, on garantit que l'élément à supprimer existe.

143voto

Kangkan Points 7119

Si vous souhaitez avoir un script léger, alors optez pour jQuery. Dans jQuery, la solution pour supprimer toutes les options sera comme :

$("#droplist").empty();

54 votes

Je dirais que le fait même d'ajouter jQuery est le contraire de "léger" lorsque for (a in select.options) { select.options.remove(0); } fait très bien le travail.

8 votes

Cela dépend du contexte. Dans une application web, la lisibilité d'une centaine de lignes de $("#droplist").empty(); par rapport à des milliers de lignes de JS classique, cela vaut vraiment la peine d'ajouter jQuery. Si nous parlons de balisage/cosmétique pour une simple page web, vous avez 100% raison.

4 votes

@AdamIngmansson Je trouve curieux que les gens dénigrent l'utilisation de JQuery. J'utiliserais une méthode comme celle-ci en partant du principe que les ingénieurs derrière JQ ont effectué toutes sortes de tests pour trouver le moyen le meilleur, le plus rapide et surtout le plus fiable d'effectuer une tâche (utilitaire) donnée. L'intérêt de JQ (ou de toute bonne bibliothèque) est de prendre en charge les tâches banales afin que vous puissiez vous concentrer sur les choses intéressantes.

117voto

Ce n'est sans doute pas la solution la plus propre, mais c'est certainement plus simple que de les supprimer un par un :

document.getElementById("DropList").innerHTML = "";

0 votes

D'habitude, j'évite innertHTML comme la peste. Mais cela rend les choses tellement plus simples que je l'apprécie vraiment.

1 votes

Je n'ai pas réussi à le faire fonctionner. Je ne sais pas pourquoi les options de sélection ne sont pas effacées de cette façon.

0 votes

@MikaelL, c'est utile si vous ajoutez dans quel navigateur cela se produit. Et sa version, si vous pouvez vous en souvenir.

82voto

Rodrigo Longo Points 131

C'est le meilleur moyen :

function (comboBox) {
    while (comboBox.options.length > 0) {                
        comboBox.remove(0);
    }        
}

0 votes

Cela m'a sauvé aujourd'hui, car le mécanisme "for() { selectbox.remove()}" n'efface pas toutes les options. Merci.

6 votes

Légèrement plus courte que while (comboBox.options.length) comboBox.remove(0);

45voto

Nick Craver Points 313913

Vous pouvez utiliser ce qui suit pour effacer tous les éléments.

var select = document.getElementById("DropList");
var length = select.options.length;
for (i = length-1; i >= 0; i--) {
  select.options[i] = null;
}

1 votes

Il s'est toujours planté quand j'ai essayé le JS ci-dessus... probablement un autre code conflictuel. Je n'avais pas pensé à jQuery. Je pense que c'est exactement ce que je cherche...mais peut-être pour enlever l'enfant de l'option entière : $("select[id$=DropList] > option").remove() ;

17 votes

MooTools a également empty() donc vous feriez $("DropList").empty();

52 votes

Cela semble être une mauvaise idée - mettre les éléments à null n'est pas la même chose que les supprimer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X