2010-07-28 19 views
12

मैं की तरह HTML है निम्नलिखित:जावास्क्रिप्ट सम्मिलित करने से पहले() एक टेक्स्ट नोड से पहले सम्मिलित करने के लिए?

<div id="move-me"> 
    <a href="#">I'm a link</a> 
</div> 

<div id="new-parent"> 
    Some plain text. 
</div> 

मैं ऊपर पाठ, जावास्क्रिप्ट कि पूरे # चाल-मुझे # नई माता पिता div अंदर div चले जाएँगे, लिखने के लिए तो जैसे कोशिश कर रहा हूँ:

<div id="new-parent"> 
    <div id="move-me"> 
     <a href="#">I'm a link</a> 
    </div> 
    Some plain text. 
</div> 

यहाँ जावास्क्रिप्ट है मेरे पास है:

function moveDiv() { 
    var moveable = document.getElementById('move-me'); 
    var newParent = document.getElementById('new-parent'); 
    newParent.parentNode.insertBefore(moveable, newParent.firstChild); 
} 

मैं डिबग करने के लिए Firebug उपयोग कर रहा हूँ, और मैं देख सकता हूँ कि +०१२३३८८४८१६एक TextNode है, लेकिन मैं हमेशा निम्न त्रुटि प्राप्त:

Node was not found" code: "8 
newParent.parentNode.insertBefore(moveable, newParent.firstChild); 

यह insertBefore की तरह लगता है एक तत्व नोड की आवश्यकता है और एक पाठ नोड पर काम नहीं करेगा ... कि सही है? यदि हां, तो ऐसा करने के लिए कोई और अच्छी विधि है?

नोट: मैं अनुच्छेद टैग को शामिल करने या सफेद स्थान को हटाने के लिए HTML को संशोधित या साफ़ नहीं कर सकता।

उत्तर

13

नहीं, insertBefore टेक्स्ट नोड के साथ ठीक काम करेगा क्योंकि नोड को पहले डाला जाना चाहिए। समस्या यह है कि जिस नोड को आप पहले डालने की कोशिश कर रहे हैं वह उस नोड का बच्चा नहीं है जिसमें आप डालने वाले हैं। आप .parentNode बिट को हटाने की जरूरत:

newParent.insertBefore(moveable, newParent.firstChild); 
+0

धन्यवाद, धन्यवाद। आपकी व्याख्या बहुत मदद करता है; मैंने इसे जोड़ दिया है, मैं भी सोचता हूं। –

+0

मैं देखता हूं - सम्मिलित करें कंटेनर/पैरेंट नोड पर पहले कहा जाना चाहिए जिसमें नोड शामिल है जिसे मैं पहले डालना चाहता हूं। – kermit

2

आपको अपने निवेशन बयान से ".parentNode" को दूर करने की जरूरत है। एक टेक्स्ट नोड अभी भी एक नोड है और हर दूसरे नोड की तरह संदर्भित किया जा सकता है।

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