सवाल:
JQuery का उपयोग करके HTML तत्वों को बनाने का सबसे कुशल तरीका क्या है?
उत्तर:
चूंकि यह jQueryतब है, मुझे लगता है कि इस (स्वच्छ) दृष्टिकोण का उपयोग करना बेहतर है (आप उपयोग कर रहे हैं)
$('<div/>', {
'id':'myDiv',
'class':'myClass',
'text':'Text Only',
}).on('click', function(){
alert(this.id); // myDiv
}).appendTo('body');
डेमो।
इस तरह, आप विशिष्ट तत्व जैसे इवेंट हैंडलर का भी उपयोग कर सकते हैं
$('<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');
डेमो।
लेकिन जब आप बहुत सारे गतिशील तत्वों के साथ काम कर रहे होते हैं, तो आपको handlersविशेष तत्व में ईवेंट को जोड़ने से बचना चाहिए , इसके बजाय, आपको एक प्रत्यायित ईवेंट प्लेयर का उपयोग करना चाहिए, जैसे
$(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');
}
डेमो।
इसलिए, यदि आप एक ही वर्ग के सैकड़ों तत्वों को बनाते हैं और उन्हें जोड़ते हैं, myClassतो ईवेंट हैंडलिंग के लिए कम मेमोरी का उपभोग किया जाएगा, क्योंकि सभी गतिशील रूप से सम्मिलित तत्वों के लिए काम करने के लिए केवल एक हैंडलर होगा।
अद्यतन: चूंकि हम गतिशील तत्व बनाने के लिए निम्नलिखित दृष्टिकोण का उपयोग कर सकते हैं
$('<input/>', {
'type': 'Text',
'value':'Some Text',
'size': '30'
}).appendTo("body");
लेकिन sizeविशेषता इस दृष्टिकोण का उपयोग करके jQuery-1.8.0या बाद में सेट नहीं की जा सकती है और यहां एक पुरानी बग रिपोर्ट है , इस उदाहरण को देखें jQuery-1.7.2जिसमें दिखाया गया है कि sizeविशेषता 30उपरोक्त उदाहरण का उपयोग करने के लिए सेट है लेकिन उसी दृष्टिकोण का उपयोग करके हम sizeविशेषता का उपयोग कर सेट नहीं कर सकते हैं jQuery-1.8.3, यहां एक गैर-काम करने वाला बेला है । इसलिए, sizeविशेषता सेट करने के लिए, हम निम्नलिखित दृष्टिकोण का उपयोग कर सकते हैं
$('<input/>', {
'type': 'Text',
'value':'Some Text',
attr: { size: "30" }
}).appendTo("body");
या यह एक
$('<input/>', {
'type': 'Text',
'value':'Some Text',
prop: { size: "30" }
}).appendTo("body");
हम पारित कर सकते हैं attr/propएक बच्चे को वस्तु के रूप में, लेकिन यह काम करता है jQuery-1.8.0 and laterसंस्करण की जाँच इस उदाहरण है, लेकिन यह काम नहीं करेगा में jQuery-1.7.2 or earlier(सभी पिछले संस्करणों में परीक्षण नहीं)।
jQueryबग रिपोर्ट से लिया गया बीटीडब्ल्यू
कई समाधान हैं। सबसे पहले इसका उपयोग नहीं करना है, क्योंकि यह आपको कोई स्थान नहीं बचाता है और इससे कोड की स्पष्टता में सुधार होता है:
उन्होंने निम्नलिखित दृष्टिकोण का उपयोग करने की सलाह दी ( पहले वाले कार्यों में भी, परीक्षण किया गया 1.6.4)
$('<input/>')
.attr( { type:'text', size:50, autofocus:1 } )
.val("Some text").appendTo("body");
इसलिए, इस दृष्टिकोण का उपयोग करना बेहतर है, आईएमओ। यह अद्यतन करने के बाद मैंने पढ़ा / पाया जाता है इस सवाल का जवाब और इस उत्तर के शो में है कि आप का उपयोग करता है, तो 'Size'(capital S)बजाय 'size'तो यह होगा सिर्फ काम ठीक है, यहाँ तक मेंversion-2.0.2
$('<input>', {
'type' : 'text',
'Size' : '50', // size won't work
'autofocus' : 'true'
}).appendTo('body');
प्रोप के बारे में भी पढ़ें , क्योंकि एक अंतर है Attributes vs. Properties, यह संस्करणों के माध्यम से भिन्न होता है।