2012-12-17 19 views
5

को समझना मैं जावास्क्रिप्ट और डोम के साथ शुरू कर रहा हूं, कम से कम थोड़ी देर के लिए, जानबूझकर jQuery से दूर रहना चाहता हूं। इसे ध्यान में रखते, ट्यूटोरियल आम तौर पर एक उदाहरण इस जैसे प्रदान करते हैं: यह सरल बनाने और चर से बचने के प्रयास मेंबुनियादी डोम चेनिंग

h = document.createElement("h1"); 
t = document.createTextNode("Hello."); 
h.appendChild(t); 
document.body.appendChild(h); 

, मैं सफलतापूर्वक निम्नलिखित श्रृंखलित: एक ओर जहां यह काम करता है

document.body.appendChild(document.createElement("h1")).appendChild(document.createTextNode("Hello.")); 

, मैंने कोशिश की

h = document.createElement("h1"); 
t = document.createTextNode("Put this on top."); 
h.appendChild(t); 
document.body.insertBefore(h,document.body.firstChild); 
निम्नलिखित के साथ

:

निम्नलिखित आगे जोड़ते आपरेशन छोटा करने के लिए

लेकिन इस बार यह वांछित के रूप में काम नहीं करता था: टेक्स्ट बॉडी तत्व के बहुत ही अंत में रखा गया है, एक प्रीपेन्ड के बजाय एक संलग्नक प्राप्त करना।

मुझे लगता है कि सफल पहला मामला सिर्फ एक झलक है, लेकिन मैं नहीं देख सकता कि इस श्रृंखला के साथ क्या गलत है।

+1

आप अपने 'insertBefore (बंद कर दिया है) 'createElement()' के बाद माता-पिता। इसलिए लगता है कि श्रृंखला 'appendChild()' विधि के साथ जारी रही है। जो मुझे आश्चर्यचकित करता है, मुझे एक त्रुटि की उम्मीद होगी। –

+1

हालांकि इस तरह की चेनिंग यह समझने के तरीके के रूप में दिलचस्प है कि ये विधियां कैसे काम करती हैं, परिणाम पढ़ने के लिए कठिन होता है। पूरे कथन को देखने के लिए दाएं स्क्रॉल करने के लिए परेशान करना बहुत ही कठिन है, लेकिन आप '.appendChild()' से पहले या एक या अधिक तरीकों से शुरुआती माता-पिता के बाद लाइन ब्रेक डाल सकते हैं ... – nnnnnn

+1

"स्ट्रीमलाइन और" चर से बचें "- आप बस अपना कोड पढ़ने, बनाए रखने और विस्तार करने के लिए कठिन बना रहे हैं। – jbabey

उत्तर

6

आपके पास गलत जगहों पर ब्रांडेसिस है। आपका पंक्ति:

document.body.insertBefore(document.createElement("h1")) 
.appendChild(document.createTextNode("Put this on top."), document.body.firstChild); 

यह कैसे किया जाना चाहिए:

document.body.insertBefore(
    document.createElement("h1").appendChild(
     document.createTextNode("Put this on top.")), document.body.firstChild); 

अब आप समझ क्यों यह आम तौर पर एक बुरा विचार एक पंक्ति में सभी मर्ज करने के लिए है।

ठीक है, यह निश्चित रेखा आपको चर के साथ 'कोड' के सटीक व्यवहार नहीं देगी। ऐसा इसलिए है क्योंकि .appendChild आपके मामले में बच्चे DOM तत्व (<INPUT>) देता है, न कि माता-पिता (<H1> आपके मामले में)। लेकिन आप चाहते हैं कि सभी <H1> दस्तावेज़ की शुरुआत में DOM तत्व जोड़ा गया था। एक पंक्ति में इस लक्ष्य को हासिल करने के लिए आप .parentNode संपत्ति का उपयोग करने की जरूरत है:

document.body.insertBefore(
    document.createElement("h1").appendChild(
     document.createTextNode("Put this on top.")).parentNode, document.body.firstChild) 

दोस्तों, कृपया इस तरह के कोड का उपयोग नहीं करते, यह सिर्फ शैक्षिक उद्देश्यों के लिए है)))

+0

ध्यान दें कि '.appendChild()' _child_ तत्व लौटाता है, इसलिए केवल कोष्ठक के चारों ओर स्विच करने से समस्या हल नहीं होगी। – nnnnnn

+0

यह "समस्या" नहीं है)) मैंने अभी उसे ब्रांड्स में अपनी त्रुटि दिखाई है। यहां सभी अन्य कोड "चर से बचें" हैं, जो कम से कम – SergeyS

+0

सभी ओपी "आवश्यकताओं" को संतुष्ट करने के लिए अद्यतन उत्तर देखें, – SergeyS

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