सवाल:
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
, यह संस्करणों के माध्यम से भिन्न होता है।