Apa metode terbaik untuk menambahkan opsi ke <select>
dari objek JavaScript menggunakan jQuery?
Saya mencari sesuatu yang tidak perlu dilakukan oleh plugin, tetapi saya juga akan tertarik dengan plugin yang ada di luar sana.
Inilah yang saya lakukan:
selectValues = { "1": "test 1", "2": "test 2" };
for (key in selectValues) {
if (typeof (selectValues[key] == 'string') {
$('#mySelect').append('<option value="' + key + '">' + selectValues[key] + '</option>');
}
}
Solusi bersih / sederhana:
Ini adalah versi matdumsa yang dibersihkan dan disederhanakan :
$.each(selectValues, function(key, value) {
$('#mySelect')
.append($('<option>', { value : key })
.text(value));
});
Perubahan dari matdumsa's: (1) menghapus tag penutup untuk opsi di dalam append () dan (2) memindahkan properti / atribut ke peta sebagai parameter kedua append ().
javascript
jquery
arrays
html-select
Darryl Hein
sumber
sumber
value
ini adalah string (dan hard code) tidak perlu dikutip.Jawaban:
Sama seperti jawaban lain, dalam mode jQuery:
sumber
$("#mySelect")
untuk var, jika tidak memanggil$("#mySelect")
setiap kali di dalam loop sangat boros, seperti memperbarui DOM. Lihat poin # 3 dan # 6 di artzstudio.com/2009/04/jquery-performance-rules/…var mySelect = $("#mySelect") outside of the
loop masing-masing`. Itu akan jauh lebih efisien. Lihat jawaban Carl di bawah iniattr
dantext
sebenarnya adalah metode-$('<option/>')
objekDengan cara ini Anda "menyentuh DOM" hanya satu kali.
Saya tidak yakin apakah baris terbaru dapat dikonversi menjadi $ ('# mySelect'). Html (output.join ('')) karena saya tidak tahu internal jQuery (mungkin beberapa parsing di html () metode)sumber
key
ada beberapa kutipan atau>, <
di dalamnya.Ini sedikit lebih cepat dan lebih bersih.
sumber
jQuery
JavaScript vanila
sumber
Option
objek sebelumnya. Apakah itu dibangun di semua browser?new Option
, tetapi ternyata tidak bekerja di IE6 & 7. Saya tidak punya alasan mengapa, tetapi banyak opsi jQuery lengkap bekerja.new Option('display', value, true)
new Option('display', value, true, true)
( javascriptkit.com/jsref/select.shtml )Jika Anda tidak harus mendukung versi IE lama, menggunakan
Option
konstruktor jelas merupakan cara yang harus dilakukan, solusi yang mudah dibaca dan efisien :Ini fungsionalitasnya setara, tetapi lebih bersih dari:
sumber
Ini terlihat lebih bagus, memberikan keterbacaan, tetapi lebih lambat daripada metode lain.
Jika Anda menginginkan kecepatan, cara tercepat (teruji!) Adalah ini, menggunakan larik, bukan penggabungan string, dan hanya menggunakan satu panggilan tambahan.
sumber
Penyempurnaan dari jawaban @ joshperry yang lebih lama :
Tampaknya. Append juga berfungsi seperti yang diharapkan,
atau lebih pendek,
sumber
$.weakmap
untukGC
map()
konstruk secara tepat, dikombinasikan dengan propertiappend()
untuk menambahkan array objek dengan benar!Semua jawaban ini tampaknya tidak perlu rumit. Yang kamu butuhkan adalah:
Itu sepenuhnya kompatibel lintas browser.
sumber
new Option(value, key);
? Urutan parameter adalah Opsi (text_visible_part, value_behind_the_scenes).Diperingatkan ... Saya menggunakan jQuery Mobile 1.0b2 dengan PhoneGap 1.0.0 di ponsel Android 2.2 (Cyanogen 7.0.1) (T-Mobile G2) dan tidak bisa mendapatkan metode .append () untuk bekerja sama sekali. Saya harus menggunakan .html () seperti berikut:
sumber
Saya telah melakukan beberapa tes dan ini, saya percaya, melakukan pekerjaan tercepat. : P
sumber
Ada pendekatan menggunakan pendekatan Microsoft Templating yang saat ini sedang dalam proposal untuk dimasukkan ke dalam jQuery core. Ada lebih banyak kekuatan dalam menggunakan templating sehingga untuk skenario paling sederhana itu mungkin bukan pilihan terbaik. Untuk lebih jelasnya lihat posting Scott Gu menguraikan fitur.
Pertama termasuk file tempsating js, tersedia dari github .
Selanjutnya atur templat
Kemudian dengan panggilan data Anda metode .render ()
Saya telah membuat blog pendekatan ini secara lebih rinci.
sumber
Saya telah membuat sesuatu seperti ini, memuat item dropdown melalui Ajax . Tanggapan di atas juga dapat diterima, tetapi selalu baik untuk memiliki modifikasi DOM sesedikit mungkin untuk kinerja yang lebih baik.
Jadi daripada menambahkan setiap item di dalam satu lingkaran, lebih baik mengumpulkan item dalam satu lingkaran dan menambahkannya setelah selesai.
Tambahkan itu,
atau bahkan lebih baik
sumber
Cara sederhananya adalah:
sumber
Sebagian besar jawaban lain menggunakan
each
fungsi untuk beralih di atasselectValues
. Ini mensyaratkan bahwa append dipanggil untuk setiap elemen dan reflow dipicu ketika masing-masing ditambahkan secara individual.Memperbarui jawaban ini ke metode fungsional yang lebih idiomatis (menggunakan JS modern) dapat dibentuk
append
hanya untuk memanggil sekali, dengan arrayoption
elemen yang dibuat menggunakan peta danOption
konstruktor elemen.Menggunakan
Option
elemen DOM harus mengurangi overhead panggilan fungsi karenaoption
elemen tidak perlu diperbarui setelah pembuatan dan logika parsing jQuery tidak perlu dijalankan.Ini dapat disederhanakan lebih lanjut jika Anda membuat fungsi utilitas pabrik yang akan membuat objek opsi baru:
Maka ini dapat diberikan langsung ke
map
:Formulasi sebelumnya
Karena
append
juga memungkinkan lewat nilai sebagai jumlah variabel argumen, kita bisa membuat daftaroption
elemen peta dan menambahkannya sebagai argumen dalam satu panggilan dengan menggunakanapply
.Sepertinya itu di versi jQuery yang lebih baru,
append
juga menerima argumen array dan ini dapat disederhanakan:sumber
Ini bekerja dengan baik dengan jQuery 1.4.1.
Untuk artikel lengkap untuk menggunakan daftar dinamis dengan ASP.NET MVC & jQuery kunjungi:
Daftar Pilih Dinamis dengan MVC dan jQuery
sumber
Ada masalah pengurutan dengan solusi ini di Chrome (jQuery 1.7.1) (Chrome mengurutkan properti objek berdasarkan nama / nomor?) Jadi untuk menjaga urutannya (ya, itu penyalahgunaan objek), saya mengubah ini:
untuk ini
dan $ .each akan terlihat seperti:
sumber
Daripada mengulangi kode yang sama di mana-mana, saya akan menyarankan lebih diinginkan untuk menulis fungsi jQuery Anda sendiri seperti:
Kemudian untuk menambahkan opsi lakukan saja hal berikut:
sumber
Anda bisa mengulangi json array Anda dengan kode berikut
$('<option/>').attr("value","someValue").text("Option1").appendTo("#my-select-id");
sumber
Meskipun jawaban sebelumnya adalah semua jawaban yang valid - mungkin disarankan untuk menambahkan semua ini ke documentFragmnet terlebih dahulu, kemudian menambahkan fragmen dokumen sebagai elemen setelah ...
Lihat pemikiran John Resig tentang masalah ini ...
Sesuatu di sepanjang garis:
sumber
$.each
lebih lambat dari afor
loop$("#mySelect").append();
Jadi solusi terbaik adalah sebagai berikut
Jika data JSON
resp
adalahgunakan sebagai
sumber
Namun cara lain untuk melakukannya:
sumber
$('#mySelect')
lalu refactored @rocktheroad jawaban ... apa pun, ini adalah solusi yang lebih praktisIni memanipulasi DOM hanya sekali setelah pertama kali membangun string raksasa.
sumber
$("#myselect").empty().append(opts);
dengangetElementById('myselect').innerHtml = opts;
Itulah yang saya lakukan dengan array dua dimensi: Kolom pertama adalah item i, menambah
innerHTML
satu<option>
. Kolom kedua RECORD_ID i, menambahvalue
dari<option>
:PHP
JavaScript / Ajax
sumber
Plugin jQuery dapat ditemukan di sini: Pengisian Otomatis Select Boxes menggunakan jQuery & AJAX .
sumber
Saya menemukan bahwa ini sederhana dan berfungsi dengan baik.
sumber
Format JSON:
Dan kode jQuery untuk mengisi nilai ke Dropdown pada kesuksesan Ajax:
sumber
Dengan menggunakan fungsi $ .map (), Anda dapat melakukan ini dengan cara yang lebih elegan:
sumber
sumber
Tetapkan id pilih HTML Anda menjadi baris berikut di bawah ini. Di sini
mySelect
digunakan sebagai id dari elemen pilih.kemudian dapatkan objek yang merupakan selectValues dalam skenario ini dan set ke jquery untuk setiap loop. Ini akan menggunakan nilai dan teks objek sesuai dan menambahkannya ke dalam pilihan opsi sebagai berikut.
Ini akan menampilkan teks sebagai daftar opsi ketika daftar drop-down dipilih dan setelah teks dipilih nilai teks yang dipilih akan digunakan.
Misalnya.
"1": "test 1", "2": "test 2",
Dropdown,
nama tampilan: tes 1 -> nilai 1 nama tampilan: tes 2 -> nilai 2
sumber
Sebenarnya, untuk mendapatkan peningkatan kinerja, lebih baik membuat daftar opsi secara terpisah dan menambahkan untuk memilih id.
http://learn.jquery.com/performance/append-outside-loop/
sumber