Je veux que ce javascript crée des options de 12 à 100 dans une sélection avec id = "mainSelect", car je ne veux pas créer toutes les balises d'option manuellement. Pouvez-vous me donner quelques conseils? Merci
function selectOptionCreate() {
var age = 88;
line = "";
for (var i = 0; i < 90; i++) {
line += "<option>";
line += age + i;
line += "</option>";
}
return line;
}
javascript
html
Jack l'éventreur
la source
la source
mySelect.options[mySelect.options.length] = new Option('Text 1', 'Value1');
Réponses:
Vous pouvez y parvenir avec une simple
for
boucle:Démo de JS Fiddle .
Comparaison JS Perf de la mienne et de la réponse de Sime Vidas , exécutée parce que je pensais que la sienne avait l'air un peu plus compréhensible / intuitive que la mienne et je me demandais comment cela se traduirait par une implémentation. Selon Chromium 14 / Ubuntu 11.04, le mien est un peu plus rapide, mais d'autres navigateurs / plates-formes auront probablement des résultats différents.
Modifié en réponse au commentaire de OP:
Démo de JS Fiddle .
Et, enfin (après un certain temps ...), une approche étendant le prototype du
HTMLSelectElement
afin de chaîner lapopulate()
fonction, en tant que méthode, au nœud DOM:Démo de JS Fiddle .
Références:
node.appendChild()
.document.getElementById()
.element.innerHTML
.la source
innerText
plutôt queinnerHTML
pour éviter les vulnérabilités de script intersite. Que pensez-vous @DavidThomas?Voici:
Démo en direct: http://jsfiddle.net/mwPb5/
Mise à jour: puisque vous souhaitez réutiliser ce code, voici la fonction pour cela:
Usage:
Démo en direct: http://jsfiddle.net/mwPb5/1/
la source
La manière la plus concise et la plus intuitive serait:
Vous pouvez également différencier le nom et la valeur ou ajouter des éléments au début de la liste avec des paramètres supplémentaires aux fonctions utilisées:
HTMLSelect Element .add (item [, before]);
nouvelle option (texte, valeur, defaultSelected, selected);
la source
Je ne recommande pas de faire des manipulations DOM à l'intérieur d'une boucle - cela peut coûter cher dans les grands ensembles de données. Au lieu de cela, je ferais quelque chose comme ceci:
Vous pouvez en savoir plus sur DocumentFragment sur MDN , mais voici l'essentiel:
la source
La seule chose que j'éviterais est de faire des opérations DOM en boucle pour éviter les re-rendus répétés de la page.
Edit: supprimé la fonction pour montrer comment vous pouvez simplement attribuer le code HTML que vous avez construit à un autre élément de sélection - évitant ainsi les boucles inutiles en répétant l'appel de fonction.
la source
Voir: Quelle est la meilleure façon d'ajouter des options à une sélection dans un tableau avec jQuery?
la source
Lorsque vous créez un nouvel
Option
objet, il y a deux paramètres à passer: le premier est le texte que vous souhaitez voir apparaître dans la liste, et le second la valeur à attribuer à l'option.Vous affectez ensuite simplement cet
Option
objet à un élément de tableau vide, par exemple:la source
Aucune des solutions ci-dessus n'a fonctionné pour moi. La méthode Append n'a pas donné d'erreur lorsque j'ai essayé, mais elle n'a pas résolu mon problème. En fin de compte, j'ai résolu mon problème avec la propriété data de select2. J'ai utilisé json et j'ai obtenu le tableau, puis je l'ai donné dans l'élément select2 initialize. Pour plus de détails, vous pouvez voir ma réponse ci-dessous.
https://stackoverflow.com/a/41297283/4928277
la source
Souvent, vous avez un tableau d'enregistrements associés, je trouve qu'il est facile et assez déclaratif de remplir de
select
cette façon:Cela remplacera les options existantes.
Vous pouvez utiliser
selectEl.insertAdjacentHTML('afterbegin', str);
pour les ajouter à la place.Et
selectEl.insertAdjacentHTML('beforeend', str);
de les ajouter au bas de la liste.Syntaxe compatible IE11:
la source