Soru:
JQuery kullanarak HTML öğeleri oluşturmanın en etkili yolu nedir?
Cevap:
O zamandan beri, jQuerybu (temiz) yaklaşımı kullanmak daha iyi olduğunu düşünüyorum (kullanıyorsunuz)
$('<div/>', {
'id':'myDiv',
'class':'myClass',
'text':'Text Only',
}).on('click', function(){
alert(this.id); // myDiv
}).appendTo('body');
DEMO.
Bu şekilde, aşağıdaki gibi belirli bir öğe için olay işleyicileri bile kullanabilirsiniz
$('<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.
Ancak çok sayıda dinamik handlersöğeyle uğraşırken , belirli bir öğeye etkinlik eklemekten kaçınmalısınız , bunun yerine, yetkilendirilmiş bir olay işleyicisi kullanmalısınız.
$(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.
Bu nedenle, aynı sınıfa (yani myClass) sahip yüzlerce öğe oluşturup eklerseniz, olay işleme için daha az bellek tüketilir, çünkü tüm dinamik olarak eklenen öğeler için işi yapmak için yalnızca bir işleyici olacaktır.
Güncelleme: Dinamik bir öğe oluşturmak için aşağıdaki yaklaşımı kullanabileceğimizden
$('<input/>', {
'type': 'Text',
'value':'Some Text',
'size': '30'
}).appendTo("body");
Ama sizenitelik kullanarak bu yaklaşımı kullanarak ayarlanamaz jQuery-1.8.0burada eski veya üstü ve hata raporu olarak, göz bu örnekte kullanarak jQuery-1.7.2o hangi gösterileri sizenitelik olarak ayarlanır 30örneğin yukarıda kullanarak ama biz seti aynı yaklaşımı olamaz kullanarak sizekullanarak niteliği jQuery-1.8.3burada, bir olan olmayan çalışma keman . Yani, özelliği ayarlamak için sizeaşağıdaki yaklaşımı kullanabiliriz
$('<input/>', {
'type': 'Text',
'value':'Some Text',
attr: { size: "30" }
}).appendTo("body");
Ya da bu
$('<input/>', {
'type': 'Text',
'value':'Some Text',
prop: { size: "30" }
}).appendTo("body");
Biz geçebilir attr/propbir alt nesne olarak değil, o çalışır jQuery-1.8.0 and latersürümleri kontrol bu örneği ama işe yaramaz içinde jQuery-1.7.2 or earlier(bütün önceki sürümlerinde test edilmedi).
BTW, jQueryhata raporundan alındı
Birkaç çözüm var. Birincisi, hiç kullanmamanız, çünkü size yer kazandırmaz ve bu kodun netliğini artırır:
Aşağıdaki yaklaşımı kullanmanızı tavsiye ettiler ( daha önce yapılanlarda da test edildi 1.6.4)
$('<input/>')
.attr( { type:'text', size:50, autofocus:1 } )
.val("Some text").appendTo("body");
Dolayısıyla, bu yaklaşımı kullanmak daha iyidir, IMO. Bu güncelleştirme okudum sonra / buldum yapılır bu cevabı ve bu cevabı gösterir o kullanırsanız 'Size'(capital S)yerine 'size'şimdi geçecek sadece iş para cezası , hatta içindeversion-2.0.2
$('<input>', {
'type' : 'text',
'Size' : '50', // size won't work
'autofocus' : 'true'
}).appendTo('body');
Ayrıca prop hakkında okuyun , çünkü bir fark var, Attributes vs. Propertiesversiyonlara göre değişir.