Vous pouvez y parvenir avec une simple boucle for
:
var min = 12,
max = 100,
select = document.getElementById('selectElementId');
for (var i = min; i<=max; i++){
var opt = document.createElement('option');
opt.value = i;
opt.innerHTML = i;
select.appendChild(opt);
}
Démo JS Fiddle.
Comparaison JS Perf des deux réponses, la mienne et celle de Sime Vidas, exécutée car je trouvais la sienne un peu plus compréhensible/intuitive que la mienne et je me demandais comment cela se traduirait dans l'implémentation. Selon Chromium 14/Ubuntu 11.04, la mienne est légèrement plus rapide, cependant d'autres navigateurs/plateformes sont susceptibles d'avoir des résultats différents.
Édité en réponse au commentaire de l'OP :
Comment puis-je appliquer ceci à plus d'un élément ?
function populateSelect(cible, min, max){
if (!cible){
return false;
}
else {
var min = min || 0,
max = max || min + 100;
select = document.getElementById(cible);
for (var i = min; i<=max; i++){
var opt = document.createElement('option');
opt.value = i;
opt.innerHTML = i;
select.appendChild(opt);
}
}
}
// appel de la fonction avec tous les trois valeurs :
populateSelect('selectElementId',12,100);
// appel de la fonction avec seulement l'« id » (« min » et « max » sont définis par défaut) :
populateSelect('anotherSelect');
// appel de la fonction avec l'« id » et le « min » (le « max » est défini par défaut) :
populateSelect('moreSelects', 50);
Démo JS Fiddle.
Et enfin (après un certain retard...), une approche étendant le prototype de l'élément HTMLSelectElement
afin d'enchaîner la fonction populate()
, en tant que méthode, à l'élément du DOM :
HTMLSelectElement.prototype.populate = function (opts) {
var settings = {};
settings.min = 0;
settings.max = settings.min + 100;
for (var userOpt in opts) {
if (opts.hasOwnProperty(userOpt)) {
settings[userOpt] = opts[userOpt];
}
}
for (var i = settings.min; i <= settings.max; i++) {
this.appendChild(new Option(i, i));
}
};
document.getElementById('selectElementId').populate({
'min': 12,
'max': 40
});
Démo JS Fiddle.
Références :
0 votes
Voir stackoverflow.com/questions/170986/…
15 votes
Voter pour rouvrir, car le 'doublon' lié contient uniquement des réponses basées sur jQuery, alors que celui-ci nécessite (ou du moins implique une nécessité) du JavaScript standard.
3 votes
Bonne réponse ici:
mySelect.options[mySelect.options.length] = new Option('Texte 1', 'Valeur1');