Manière la plus efficace d'effacer une liste d'options d'un select

Manière la plus efficace d'effacer une liste d'options d'un select - HTML/CSS - Programmation

Marsh Posté le 25-07-2006 à 14:35:31    

Voilà, tout est dans le titre :
 
soit un :
 

Code :
  1. <select id="id-select-test">
  2. <option value="zobi zobi !">kikou !</option>
  3. <option value="1">10</option>
  4. <option value="2">20</option>
  5. <option value="3">30</option>
  6. </select>


 
Les options peuvent sans problèmes être créées de la manière suivante :
 

Code :
  1. var option_supplementaires = document.createElement("option" );
  2. option_supplementaires.appendChild(document.createTextNode('kikou !'));
  3. option_supplementaires.value = 'zobi zobi !';
  4. document.getElementById('id-select-test').appendChild(option_supplementaires);


 
Ma question :
 
Comment supprimer toutes les options de 'id-select-test' ? Solution DOM uniquement.  
 
Merci

Reply

Marsh Posté le 25-07-2006 à 14:35:31   

Reply

Marsh Posté le 25-07-2006 à 14:48:42    

Allez deux solutions pour le coup ;)
Avec removeChild ( pas ma préféré, vu que t'es obligé de te coltiner un boucle):

Code :
  1. var opt = document.getElementById('a').getElementsByTagName('option');
  2.     for(var j=opt.length-1; j>=0; j--){
  3.       document.getElementById('a').removeChild(opt[j]);
  4.     }


Note: attention, tu es obligé de faire une boucle en --, car opt est une référence sur le getElementsByTagName, donc chaque fois que tu fais un removeChild sa length diminue.
 
Avec replaceNode et CloneNode ( beaucoup plus joli):

Code :
  1. var selNode = document.getElementById('a');
  2.     selNode.parentNode.replaceChild(selNode.cloneNode(false), selNode);


le false dans cloneNode précise qu'il ne faut pas copier ses enfants.

Reply

Marsh Posté le 25-07-2006 à 15:01:19    

Je ne comprends pas très bien cette manie de vouloir tout faire en DOM.
 
Le (X)HTML se démarque du XML par la présence d'objets métiers. Je pense que ce n'est pas un luxe que de les utiliser, si ?
 
Ils sont là justement pour que :
1/ Le code soit plus lisible
2/ Qu'on ne puisse pas se retrouver avec des Options dans un checkbox
3/ Vérifier la cohérence des éléments modifiés par JS
 
Sans compter qu'ils sont censés être plus efficaces que la manipulation DOM en terme de performances...
Comprend pas.
 
http://www.w3schools.com/js/tryit. [...] ect_remove
 
Avec ce code :

Code :
  1. function removeOption()
  2. {
  3. var x=document.getElementById("mySelect" )
  4. while (x.length > 0)
  5. x.remove(0);
  6. }

Message cité 1 fois
Message édité par Arjuna le 25-07-2006 à 15:06:57
Reply

Marsh Posté le 25-07-2006 à 15:03:26    

Arjuna a écrit :

Je ne comprends pas très bien cette manie de vouloir tout faire en DOM.


 
On en reparlera dans quelques années. ;)

Reply

Marsh Posté le 25-07-2006 à 15:06:49    

anapajari a écrit :


Avec replaceNode et CloneNode ( beaucoup plus joli):

Code :
  1. var selNode = document.getElementById('a');
  2.     selNode.parentNode.replaceChild(selNode.cloneNode(false), selNode);


le false dans cloneNode précise qu'il ne faut pas copier ses enfants.


 
 :jap:  :jap:  Très bon et très pratique. Merci bcp.
 
Une surprise vous attend pour bientôt sur ce forum... (je n'en dit pas plus pour le moment).  :D  

Reply

Marsh Posté le 25-07-2006 à 15:09:38    

Hermes le Messager a écrit :

On en reparlera dans quelques années. ;)


C'est tout vu.
 
En C++ aussi on peut travailler uniquement avec des pointeurs nons typés, et lancer des méthodes en bidouillant à une adresse mémoire.
 
Pourtant, on a misen place des conceptes complexes comme l'héritage et la dérivation afin de justement, avoir des variables typées de façon la plus proche de leur contenu.
 
Là, on est en train de faire un retour en arrière. Tout est de type "xmlnode", on sait pas ce qu'on fait ni dans quoi, et au final, moi je préconise qu'on travaille ligne par ligne en mode texte, vous verrez c'est encore plus souple pour programmer.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed