2012-02-10 12 views
13

का उपयोग करने के बीच अंतर इन दो jQuery स्निपेट का उपयोग करने के बीच क्या अंतर है?.html() और .contents()

.append($(this).contents()); 
// and 
.append($(this).html()); 
+10

क्या आपने दस्तावेज़ पढ़े? – mkoryak

+0

http://api.jquery.com/contents/ – kobe

+4

हर कोई प्रश्न के '.append()' भाग को अनदेखा कर रहा है। –

उत्तर

21

.contents() तत्वों को लौटाता है, इस प्रकार उन्हें स्थानांतरित करता है। http://api.jquery.com/contents/

.html() एक स्ट्रिंग देता है, इस प्रकार तत्वों की प्रतिलिपि बनाते हैं। http://api.jquery.com/html/

+0

+1 के लिए है समझ लिया दस्तावेज़ों से जुड़ने वाला पहला व्यक्ति होने के नाते :) – AlienWebguy

+2

32 बिटकिड सही है। सवाल का '.append()' हिस्सा मायने रखता है। अधिक विशेष रूप से, '.contents()' के लिए यह प्रभावी रूप से उन तत्वों को स्थानांतरित करेगा, '.html()' के लिए यह उन तत्वों की प्रतिलिपि बनायेगा। –

+0

@ टिमोथीएरॉन मुझे लगता है कि तत्वों के एचटीएमएल की प्रतिलिपि एक उथली प्रतिलिपि के समान है, न कि एक गहरी प्रति (जो ईवेंट हैंडलर और आगे के साथ लाएगी)। इस प्रकार यदि हैंडलर की प्रतिलिपि बनाना वांछित है, तो '.contents() क्लोन() 'का उपयोग किया जाना चाहिए। – Blazemonger

25

हाँ, वे पूरी तरह से अलग

  • .contents() आप युक्त सभी बच्चे डोम नोड तत्व की एक jQuery वस्तु देता है कर रहे हैं।

  • .html() आप एचटीएमएल की एक स्ट्रिंग तत्व के वंशज नोड से गाया देता है।

तो जब आप contents().append(), आप एक नए स्थान पर नोड्स स्थानांतरित कर रहे हैं।

जब आप .append().html(), तो आप HTML स्ट्रिंग से नए नोड्स उत्पन्न कर रहे हैं।


मन क्लाइंट की तरफ, कोई एचटीएमएल है कि में रखें। आपके पास केवल डोम है।

यह देखते हुए कि ...

  • ... जब आप .html() करते हैं, क्या हो रहा है कि सभी वंशज डोम नोड्स का विश्लेषण किया जा रहा है, और एक HTML स्ट्रिंग बनाया जा रहा है और वापस लौटा है।

  • ... जब आप .html('<b>some HTML content</b>') करते हैं, एचटीएमएल स्वयं स्ट्रिंग डोम को नहीं जोड़ा गया है, बल्कि स्ट्रिंग, पार्स, और नए डोम नोड्स उत्पन्न कर रहे हैं है जो तब डोम में जुड़ जाते हैं।


एक टिप्पणी के बारे में काटने और नकल के आधार पर यह है जैसे कि आप अभी भी लगता है कि आप सर्वर से भेजे मूल HTML तार के साथ काम कर रहे हैं लगता है।

आप नहीं हैं।

आप जावास्क्रिप्ट के साथ काम कर रहे हैं वस्तुओं (अच्छी तरह से, मेजबान वस्तुओं) कि एक दूसरे के भीतर नेस्टेड रहते हैं वस्तुओं (माता-पिता, बच्चों, पोते, आदि) के एक पदानुक्रम के रूप में। आप पदानुक्रम के भीतर किसी अन्य स्थान पर उस पदानुक्रम के एक भाग को स्थानांतरित कर सकते हैं।

तत्वों के इस पदानुक्रम को डोम, या दस्तावेज़ ऑब्जेक्ट मॉडल कहा जाता है।

दुर्भाग्य से, चूंकि jQuery की .append() एक HTML स्ट्रिंग स्वीकार करता है, यह भ्रम में जोड़ता है कि आप वास्तव में वस्तुओं के बजाय HTML मार्कअप से निपट रहे हैं।

तो मैं इसे फिर से राज्य होगा ...

  • .html()एक नया HTML स्ट्रिंग उत्पन्न करता है। जब आप .append() पर स्ट्रिंग देते हैं, तो यह उस स्ट्रिंग के आधार पर नए नोड्स बनाएगा, और उन्हें सम्मिलित करेगा।

  • .contents() बस मौजूदा नोड्स का चयन करता है, और उन्हें डाल देता है। चूंकि एक नोड एक ही समय में दो स्थानों में नहीं हो सकता है, इसलिए नोड्स को डीओएम में स्थान पर स्थानांतरित किया जाता है जहां उन्हें जोड़ा जा रहा है।

+4

+1 जो ".append()' का उत्तर देने के लिए करता है, जब स्ट्रिंग से नोड्स का संग्रह बनाते हैं। –

+0

तो, (सिद्धांत रूप में), '.contents() 'कम प्रसंस्करण का उपयोग करता है? –

+2

@ ब्रैंडन लेबेडेव: वे प्रश्न हमेशा कार्यान्वयन के सापेक्ष होते हैं, लेकिन एक विस्तृत बयान देने के लिए, मैं कहूंगा * हाँ *। याद रखें कि क्लाइंट साइड पर, आपके पास काम करने के लिए * कोई * HTML नहीं है। तो जब आप '.html()' करते हैं तो यह DOM का विश्लेषण करता है, और * HTML की स्ट्रिंग बनाता है। जब आप '.html ('कुछ HTML सामग्री') करते हैं, तो यह स्ट्रिंग को पार करता है, और नए डोम नोड उत्पन्न करता है। –

संबंधित मुद्दे