आपकी समस्या यह है कि "शून्य" jQuery ऑब्जेक्ट्स नहीं हैं जिन्हें जोड़ा जा सकता है और "खाली" हो सकता है। आप पहले से ही खाली बनाने के कई तरीकों की पहचान कर चुके हैं, और जब भी अधिक हो, इससे कोई फर्क नहीं पड़ता - आप जो भी करने की कोशिश कर रहे हैं वह वह नहीं करेगा जो आप उम्मीद करते हैं, कोई फर्क नहीं पड़ता कि आप शुरू करें, क्योंकि ...
... append()
डीओएम को संशोधित करता है, jQuery ऑब्जेक्ट नहीं। और एक खाली jQuery ऑब्जेक्ट में कोई DOM नहीं है! Tomalak had the right idea, हालांकि आप इसे समझ नहीं सकते हैं।
मैं jQuery के बारे में तीन टिप्पणियों कि आप शायद पहले से ही पता चल सके बनाने के लिए जा रहा हूँ, लेकिन जो इस उत्तर के शेष को समझने में उपयोगी होते हैं और इसलिए भविष्य पाठकों को लाभ हो सकता है:
- एक jQuery वस्तु मूल रूप से डीओएम तत्वों के सेट है।
- कुछ jQuery विधियां सेट पर काम करती हैं, और कुछ पर सेट पर नोड्स पर काम करती हैं।
- कुछ jQuery विधियां सेट पर जोड़े गए पहले नोड पर केवल (या केवल जानकारी पुनर्प्राप्त करें) पर संचालित होती हैं।
मन में इन तीन टिप्पणियों के साथ
, के अपने उदाहरण पर विचार करें:
// 1. create an empty set somehow (doesn't matter how)
var $new = $();
// 2. iterate over something
$.each(..., function(...)
{
// 3. construct a DOM fragment from HTML, and append it
$new.append("<sometag>");
});
// 4. try to display HTML corresponding to the jQuery object
alert($new.html());
इस उदाहरण में, कदम # 3 कुछ भी उपयोगी करने के लिए असफल हो जायेगी क्योंकि append()
के प्रयोजन के लेने के लिए है जो कुछ भी डोम यह तत्व उन्हें सेट में प्रत्येक डोम तत्व के लिए बच्चों के रूप में दिया जाता है और उन्हें जोड़ दिया जाता है। चूंकि $new
खाली सेट है, इसमें कोई तत्व नहीं है, और ... कुछ भी नहीं होता है। चरण # 1 ठीक काम कर रहा है - लेकिन इसमें किसी भी DOM तत्वों के बिना सेट बनाकर, आपने स्वयं को विफल करने के लिए सेट अप किया है जब आप DOM को संशोधित करने के लिए मौजूद विधियों का उपयोग करने का प्रयास करते हैं! संदर्भ निरीक्षण # 2 ... सेट को संशोधित करने के लिए, आपको एक विधि को कॉल करने की आवश्यकता है जो वास्तव में सेट पर संचालित करता है।
ठीक है, तो चलो कहते हैं कि हम सेट संशोधन का उपयोग करते हैं विधि add()
बजाय:
$new = $new.add("<sometag>");
अब हम अच्छा, है न? लूप के माध्यम से प्रत्येक पास एक नया jQuery ऑब्जेक्ट तैयार करेगा जिसमें पिछले सेट + एक नव निर्मित तत्व शामिल होगा। खैर ...
... यह सिर्फ कुछ अजीब करने के लिए कदम # 4 का कारण होगा। देखें, html()
उन तरीकों मैं अवलोकन # 3 में वर्णित में से एक है - यह केवल सेट में पहला तत्व पर चल रही है। तो अनुक्रम की बजाय ("<sometag><sometag><sometag>..."
) आपको केवल लूप ("<sometag>"
) के माध्यम से पहले पास पर बनाए गए तत्व का HTML प्रतिनिधित्व प्राप्त होगा। सिवाय ... तुम भी कि प्राप्त करने के लिए, क्योंकि html()
तत्व के बच्चों का प्रतिनिधित्व बनाता है नहीं जा रहे हैं - तो आप क्या कर रहे हैं वास्तव में अंत करने के लिए जा ""
है ...
यह सब सिर्फ एक बड़ा निराशा थी: यदि आप सेट के साथ काम शुरू कर दिया (चरण # 1), तो (चरण # 3), और एक DOM एलीमेंट से डेटा खींचने की कोशिश कर से समाप्त (कि डोम पर काम करने की कोशिश की अस्तित्व में नहीं था) (और अगर ऐसा होता तो कोई डेटा नहीं होता) (चरण # 4)।
The solution you finally came up with भयानक नहीं है - आप अनिवार्य रूप से शुरू करने के लिए सेट एक मूल तत्व जोड़ सकते हैं और जब तक आप नए तत्वों को जोड़ने काम हो गया और उन पर काम करने के लिए तैयार कर रहे हैं इस डोम टुकड़ा पर पूरी तरह से संचालित करने के लिए चुन रहे । आपने इसे अपने संशोधित उदाहरण से छोड़ा है, लेकिन html()
भी काम करेगा, क्योंकि यह आपके रूट तत्व की सामग्री को बस डंप करेगा।
लेकिन अभी पूरा करने के लिए, मैं तुम्हें एक अंतिम उदाहरण है कि पर काम करता है दे देंगे सेट, एक खाली jQuery वस्तु के साथ शुरू:
var $new = $();
$.each([1, 2, 3, 4], function(i, v)
{
$new = $new.add("<div>");
});
alert($new.length == 4); // true
// alerts: <div></div><div></div><div></div><div></div>
alert($("<div>").append($new).html());
वहां बहुत कुछ "नहीं" हो सकता है, और बहुत कुछ नहीं "यहां ठीक है जो मैंने देखा"। –
भी संबंधित: http://stackoverflow.com/questions/897331/getting-an-empty-jquery-object। उत्तर jQuery के पुराने संस्करणों में '$ ([]) 'और' $()' नए लोगों में लगता है। आपको यह समझाने की प्रतीत नहीं होती है कि यह आपके लिए पर्याप्त क्यों नहीं है। –
यह एक डुप्लिकेट नहीं है! Jsfiddle उदाहरण देखें और ध्यान दें कि $ ([]) या $() दोनों अलर्ट में शून्य प्रदर्शित करते हैं। मैं एक खाली गैर शून्य वस्तु चाहता हूँ। जल्दी से मतदान करने से पहले मेरी पोस्ट देखें। मैंने पोस्ट में $ ([]) और $() का उल्लेख किया है! –