Soru:
JQuery kullanarak HTML öğeleri oluşturmanın en etkili yolu nedir?
Cevap:
O zamandan beri, jQuery
bu (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 size
nitelik kullanarak bu yaklaşımı kullanarak ayarlanamaz jQuery-1.8.0
burada eski veya üstü ve hata raporu olarak, göz bu örnekte kullanarak jQuery-1.7.2
o hangi gösterileri size
nitelik olarak ayarlanır 30
örneğin yukarıda kullanarak ama biz seti aynı yaklaşımı olamaz kullanarak size
kullanarak niteliği jQuery-1.8.3
burada, bir olan olmayan çalışma keman . Yani, özelliği ayarlamak için size
aş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/prop
bir alt nesne olarak değil, o çalışır jQuery-1.8.0 and later
sü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, jQuery
hata 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. Properties
versiyonlara göre değişir.