Chcę, aby ten javascript tworzył opcje od 12 do 100 w zaznaczeniu z id = "mainSelect", ponieważ nie chcę ręcznie tworzyć wszystkich tagów opcji. Czy możesz dać mi kilka wskazówek? Dzięki
function selectOptionCreate() {
var age = 88;
line = "";
for (var i = 0; i < 90; i++) {
line += "<option>";
line += age + i;
line += "</option>";
}
return line;
}
javascript
html
Kuba Rozpruwacz
źródło
źródło
mySelect.options[mySelect.options.length] = new Option('Text 1', 'Value1');
Odpowiedzi:
Możesz to osiągnąć za pomocą prostej
for
pętli:Demo JS Fiddle .
Porównanie JS Perf zarówno mojej odpowiedzi , jak i odpowiedzi Sime'a Vidasa , uruchomiłem, ponieważ pomyślałem, że jego wyglądał na trochę bardziej zrozumiały / intuicyjny niż mój i zastanawiałem się, jak to przełoży się na wdrożenie. Według Chromium 14 / Ubuntu 11.04 kopalnia jest nieco szybsza, ale inne przeglądarki / platformy prawdopodobnie będą miały inne wyniki.
Edytowano w odpowiedzi na komentarz OP:
Demo JS Fiddle .
I na koniec (po dość dużym opóźnieniu ...) podejście rozszerzające prototyp funkcji
HTMLSelectElement
w celu powiązaniapopulate()
funkcji, jako metody, do węzła DOM:Demo JS Fiddle .
Bibliografia:
node.appendChild()
.document.getElementById()
.element.innerHTML
.źródło
innerText
zamiastinnerHTML
unikać luk w zabezpieczeniach skryptów między witrynami. Co myślisz @DavidThomas?Proszę bardzo:
Demo na żywo: http://jsfiddle.net/mwPb5/
Aktualizacja: Ponieważ chcesz ponownie użyć tego kodu, oto odpowiednia funkcja:
Stosowanie:
Demo na żywo: http://jsfiddle.net/mwPb5/1/
źródło
Najbardziej zwięzłym i intuicyjnym sposobem byłoby:
Możesz także rozróżnić nazwę i wartość lub dodać pozycje na początku listy z dodatkowymi parametrami do używanych funkcji:
HTMLSelect Element .add (item [, before]);
nowa opcja (tekst, wartość, defaultSelected, zaznaczone);
źródło
Nie polecam wykonywania manipulacji DOM wewnątrz pętli - może to być kosztowne w przypadku dużych zbiorów danych. Zamiast tego zrobiłbym coś takiego:
Możesz przeczytać więcej o DocumentFragment na MDN , ale oto istota tego:
źródło
Jedyną rzeczą, której bym unikał, jest wykonywanie operacji DOM w pętli, aby uniknąć wielokrotnego renderowania strony.
Edycja: usunięto funkcję, aby pokazać, jak możesz po prostu przypisać utworzony kod HTML do innego elementu select - w ten sposób unikając niepotrzebnego zapętlenia przez powtarzanie wywołania funkcji.
źródło
Zobacz: Jaki jest najlepszy sposób dodawania opcji do zaznaczenia z tablicy za pomocą jQuery?
źródło
Podczas tworzenia nowego
Option
obiektu należy przekazać dwa parametry: pierwszy to tekst, który ma się pojawić na liście, a drugi wartość, która ma być przypisana do opcji.Następnie po prostu przypisujesz ten
Option
obiekt do pustego elementu tablicy, na przykład:źródło
Żadne z powyższych rozwiązań nie zadziałało. Metoda dołączania nie dawała błędu, gdy próbowałem, ale nie rozwiązała mojego problemu. W końcu rozwiązałem swój problem z właściwością danych select2. Użyłem json i otrzymałem tablicę, a następnie dałem ją w inicjalizacji elementu select2. Po więcej szczegółów możesz zobaczyć moją odpowiedź w poniższym poście.
https://stackoverflow.com/a/41297283/4928277
źródło
Często masz tablicę powiązanych rekordów, uważam, że wypełnienie w
select
ten sposób jest łatwe i dość deklaratywne :Zastąpi to istniejące opcje.
Zamiast tego możesz użyć,
selectEl.insertAdjacentHTML('afterbegin', str);
aby dodać je do góry.I
selectEl.insertAdjacentHTML('beforeend', str);
dodać je na dole listy.Składnia zgodna z IE11:
źródło