Quiero que este JavaScript cree opciones del 12 al 100 en una selección con id = "mainSelect", porque no quiero crear todas las etiquetas de opciones manualmente. ¿Me puede dar algunos consejos? Gracias
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 el destripador
fuente
fuente
mySelect.options[mySelect.options.length] = new Option('Text 1', 'Value1');
Respuestas:
Puede lograr esto con un simple
for
bucle:Demostración de JS Fiddle .
La comparación de JS Perf de la respuesta mía y de Sime Vidas se ejecutó porque pensé que la suya parecía un poco más comprensible / intuitiva que la mía y me pregunté cómo se traduciría eso en la implementación. De acuerdo con Chromium 14 / Ubuntu 11.04, la mía es algo más rápida, aunque es probable que otros navegadores / plataformas tengan resultados diferentes.
Editado en respuesta al comentario de OP:
Demostración de JS Fiddle .
Y, finalmente (después de bastante retraso ...), un enfoque que extiende el prototipo del
HTMLSelectElement
para encadenar lapopulate()
función, como método, al nodo DOM:Demostración de JS Fiddle .
Referencias
node.appendChild()
.document.getElementById()
.element.innerHTML
.fuente
innerText
lugar deinnerHTML
evitar vulnerabilidades de secuencias de comandos entre sitios. ¿Qué te parece @DavidThomas?Aqui tienes:
Demostración en vivo: http://jsfiddle.net/mwPb5/
Actualización: ya que desea reutilizar este código, aquí está la función para ello:
Uso:
Demostración en vivo: http://jsfiddle.net/mwPb5/1/
fuente
La forma más concisa e intuitiva sería:
También puede diferenciar el nombre y el valor o agregar elementos al comienzo de la lista con parámetros adicionales a las funciones utilizadas:
HTMLSelect Element .add (elemento [, antes]);
nueva Opción (texto, valor, predeterminado Seleccionado, seleccionado);
fuente
No recomiendo hacer manipulaciones DOM dentro de un ciclo, eso puede ser costoso en grandes conjuntos de datos. En cambio, haría algo como esto:
Puede leer más sobre DocumentFragment en MDN , pero aquí está la esencia:
fuente
Lo único que evitaría es realizar operaciones DOM en un bucle para evitar repeticiones repetidas de la página.
Editar: eliminó la función para mostrar cómo puede asignar el html que ha creado a otro elemento de selección, evitando así el bucle innecesario repitiendo la llamada a la función.
fuente
Consulte: ¿Cuál es la mejor manera de agregar opciones a una selección de una matriz con jQuery?
fuente
Cuando crea un nuevo
Option
objeto, debe pasar dos parámetros: el primero es el texto que desea que aparezca en la lista y el segundo el valor que se asignará a la opción.Luego, simplemente asigne este
Option
objeto a un elemento de matriz vacío, por ejemplo:fuente
Ninguna de las soluciones anteriores funcionó para mí. El método Append no dio error cuando lo intenté, pero no resolvió mi problema. Al final resolví mi problema con la propiedad de datos de select2. Utilicé json y obtuve la matriz y luego le doy en select2 element initialize. Para obtener más detalles, puede ver mi respuesta en la siguiente publicación.
https://stackoverflow.com/a/41297283/4928277
fuente
A menudo tiene una serie de registros relacionados, me resulta fácil y bastante declarativo llenar de
select
esta manera:Esto reemplazará las opciones existentes.
Puede usar
selectEl.insertAdjacentHTML('afterbegin', str);
para agregarlos a la parte superior en su lugar.Y
selectEl.insertAdjacentHTML('beforeend', str);
para agregarlos al final de la lista.Sintaxis compatible con IE11:
fuente