Pertanyaan:
Apa cara paling efisien untuk membuat elemen HTML menggunakan jQuery?
Menjawab:
Karena sudah sekitar jQuerymaka saya pikir lebih baik menggunakan pendekatan (bersih) ini (Anda menggunakan)
$('<div/>', {
'id':'myDiv',
'class':'myClass',
'text':'Text Only',
}).on('click', function(){
alert(this.id); // myDiv
}).appendTo('body');
DEMO.
Dengan cara ini, Anda bahkan dapat menggunakan penangan acara untuk elemen tertentu seperti
$('<div/>', {
'id':'myDiv',
'class':'myClass',
'style':'cursor:pointer;font-weight:bold;',
'html':'<span>For HTML</span>',
'click':function(){ alert(this.id) },
'mouseenter':function(){ $(this).css('color', 'red'); },
'mouseleave':function(){ $(this).css('color', 'black'); }
}).appendTo('body');
DEMO.
Tetapi ketika Anda berurusan dengan banyak elemen dinamis, Anda harus menghindari menambahkan peristiwa handlersdalam elemen tertentu, sebagai gantinya, Anda harus menggunakan event handler yang didelegasikan, seperti
$(document).on('click', '.myClass', function(){
alert(this.innerHTML);
});
var i=1;
for(;i<=200;i++){
$('<div/>', {
'class':'myClass',
'html':'<span>Element'+i+'</span>'
}).appendTo('body');
}
DEMO.
Jadi, jika Anda membuat dan menambahkan ratusan elemen dengan kelas yang sama, yaitu ( myClass) maka lebih sedikit memori akan digunakan untuk penanganan acara, karena hanya ada satu penangan yang akan melakukan pekerjaan untuk semua elemen yang dimasukkan secara dinamis.
Pembaruan: Karena kita dapat menggunakan pendekatan berikut untuk membuat elemen dinamis
$('<input/>', {
'type': 'Text',
'value':'Some Text',
'size': '30'
}).appendTo("body");
Tetapi sizeatribut tidak dapat diatur menggunakan pendekatan ini menggunakan jQuery-1.8.0atau yang lebih baru dan ini adalah laporan bug lama , lihat contoh ini menggunakan jQuery-1.7.2yang menunjukkan bahwa sizeatribut diatur untuk 30menggunakan contoh di atas tetapi menggunakan pendekatan yang sama kita tidak dapat mengatur sizeatribut menggunakan jQuery-1.8.3, di sini adalah biola yang tidak bekerja . Jadi, untuk mengatur sizeatribut, kita bisa menggunakan pendekatan berikut
$('<input/>', {
'type': 'Text',
'value':'Some Text',
attr: { size: "30" }
}).appendTo("body");
Atau yang ini
$('<input/>', {
'type': 'Text',
'value':'Some Text',
prop: { size: "30" }
}).appendTo("body");
Kita bisa lulus attr/propsebagai objek anak-anak tetapi berfungsi dalam jQuery-1.8.0 and laterversi memeriksa contoh ini tetapi tidak akan berhasil masukjQuery-1.7.2 or earlier (tidak diuji di semua versi sebelumnya).
BTW, diambil dari jQuerylaporan bug
Ada beberapa solusi. Yang pertama adalah untuk tidak menggunakannya sama sekali, karena tidak menghemat ruang apa pun dan ini meningkatkan kejelasan kode:
Mereka menyarankan untuk menggunakan pendekatan berikut ( bekerja di yang sebelumnya juga, diuji dalam 1.6.4)
$('<input/>')
.attr( { type:'text', size:50, autofocus:1 } )
.val("Some text").appendTo("body");
Jadi, lebih baik menggunakan pendekatan ini, IMO. Pembaruan ini dibuat setelah saya membaca / menemukan jawaban ini dan dalam jawaban ini menunjukkan bahwa jika Anda menggunakan 'Size'(capital S)alih-alih 'size'itu hanya akan berfungsi dengan baik , bahkan diversion-2.0.2
$('<input>', {
'type' : 'text',
'Size' : '50', // size won't work
'autofocus' : 'true'
}).appendTo('body');
Baca juga tentang prop , karena ada perbedaan Attributes vs. Properties,, itu bervariasi melalui versi.