Quero que esse javascript crie opções de 12 a 100 em um select com id = "mainSelect", porque não quero criar todas as tags de opção manualmente. Você pode me dar algumas dicas? obrigado
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 o Estripador
fonte
fonte
mySelect.options[mySelect.options.length] = new Option('Text 1', 'Value1');
Respostas:
Você pode conseguir isso com um
for
loop simples :Demonstração JS Fiddle .
A comparação JS Perf da resposta da minha e da Sime Vidas foi executada porque achei que a dele parecia um pouco mais compreensível / intuitiva do que a minha e fiquei imaginando como isso se traduziria em implementação. De acordo com o Chromium 14 / Ubuntu 11.04, a mina é um pouco mais rápida, mas é provável que outros navegadores / plataformas tenham resultados diferentes.
Editado em resposta ao comentário do OP:
Demonstração JS Fiddle .
E, finalmente (depois de um atraso ...), uma abordagem estendendo o protótipo do
HTMLSelectElement
para encadear apopulate()
função, como método, para o nó DOM:Demonstração JS Fiddle .
Referências:
node.appendChild()
.document.getElementById()
.element.innerHTML
.fonte
innerText
vez deinnerHTML
evitar vulnerabilidades de script entre sites. O que você acha @DavidThomas?Aqui está:
Demonstração ao vivo: http://jsfiddle.net/mwPb5/
Atualização: como você deseja reutilizar esse código, aqui está a função:
Uso:
Demonstração ao vivo: http://jsfiddle.net/mwPb5/1/
fonte
A maneira mais concisa e intuitiva seria:
Você também pode diferenciar o nome e o valor ou adicionar itens no início da lista com parâmetros adicionais às funções usadas:
Elemento HTMLSelect .add (item [, before]);
nova opção (texto, valor, defaultSelected, selected);
fonte
Eu não recomendo fazer manipulações DOM dentro de um loop - que podem ficar caras em grandes conjuntos de dados. Em vez disso, eu faria algo assim:
Você pode ler mais sobre o DocumentFragment no MDN , mas aqui está a essência:
fonte
A única coisa que eu evitaria é realizar operações DOM em um loop para evitar repetições repetidas da página.
Edit: removeu a função para mostrar como você pode atribuir o html que você criou a outro elemento de seleção - evitando assim o loop desnecessário repetindo a chamada de função.
fonte
Veja: Qual é a melhor maneira de adicionar opções a uma seleção de uma matriz com jQuery?
fonte
Quando você cria um novo
Option
objeto, há dois parâmetros a serem passados: o primeiro é o texto que você deseja que apareça na lista e o segundo o valor a ser atribuído à opção.Você simplesmente atribui esse
Option
objeto a um elemento vazio da matriz, por exemplo:fonte
Nenhuma das soluções acima funcionou para mim. Anexar método não deu erro quando tentei, mas não resolveu o meu problema. No final, resolvi meu problema com a propriedade de dados select2. Eu usei json e peguei o array e, em seguida, forneço no elemento select2 initialize. Para mais detalhes, você pode ver minha resposta no post abaixo.
https://stackoverflow.com/a/41297283/4928277
fonte
Muitas vezes você tem uma matriz de registros relacionados, acho fácil e bastante declarativo preencher
select
dessa maneira:Isso substituirá as opções existentes.
Você pode usar
selectEl.insertAdjacentHTML('afterbegin', str);
para adicioná-los ao topo.E
selectEl.insertAdjacentHTML('beforeend', str);
para adicioná-los ao final da lista.Sintaxe compatível com IE11:
fonte