Pertanyaan:
Apa cara paling efisien untuk membuat elemen HTML menggunakan jQuery?
Menjawab:
Karena sudah sekitar jQuery
maka 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 handlers
dalam 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 size
atribut tidak dapat diatur menggunakan pendekatan ini menggunakan jQuery-1.8.0
atau yang lebih baru dan ini adalah laporan bug lama , lihat contoh ini menggunakan jQuery-1.7.2
yang menunjukkan bahwa size
atribut diatur untuk 30
menggunakan contoh di atas tetapi menggunakan pendekatan yang sama kita tidak dapat mengatur size
atribut menggunakan jQuery-1.8.3
, di sini adalah biola yang tidak bekerja . Jadi, untuk mengatur size
atribut, 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/prop
sebagai objek anak-anak tetapi berfungsi dalam jQuery-1.8.0 and later
versi memeriksa contoh ini tetapi tidak akan berhasil masukjQuery-1.7.2 or earlier
(tidak diuji di semua versi sebelumnya).
BTW, diambil dari jQuery
laporan 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.