2012-02-17 13 views
5

जावास्क्रिप्ट में मार्कअप स्ट्रिंग को नोड ऑब्जेक्ट में कनवर्ट करने का कोई तरीका है? असल में मैं के लिए subsitute रहा हूँ:मार्कअप स्ट्रिंग से नोड बनाएं

document.getElementById("divOne").innerHTML += "<table><tbody><tr><td><input type='text' value='0' /></td></tr></tbody></table>" 

कुछ

तरह
document.getElementById("divOne").appendChild(document.createNodeFromString("<table><tbody><tr><td><input type='text' value='0' /></td></tr></tbody></table>")) 

बल्कि createNodeFromString तालिका तत्व बनाने तब तो इसकी बच्चे तत्वों संलग्न उनके संबंधित विशेषताओं और मूल्यों देते हैं का उपयोग कर!

+1

मुझे उत्सुकता है कि आंतरिक HTML सेटिंग क्यों आपके लिए काम नहीं करती है। आंतरिक HTML सेट करने के बाद आप अपने divOne से पूछकर परिणामी तत्व प्राप्त कर सकते हैं। – akonsu

+0

@akonsu, माना जाता है कि आपके पास div इनपुट में <इनपुट प्रकार = टेक्स्ट /> है और इस div के बाहर आपके पास onclick = innerHTML-method वाला बटन है। अब, एफएफ 10 और आईई 9 (दस्तावेज़ मोड आईई 9 के साथ) टेक्स्टबॉक्स में कुछ दर्ज करें और बटन दबाएं, इनपुट का मूल्य रीसेट हो जाएगा! मैं यह देखने की कोशिश कर रहा हूं कि एपेंड चाइल्ड के साथ ऐसा ही होगा। बीटीडब्ल्यू, आईई 8 संगतता मोड में, इनपुट तत्व का मूल्य लगातार है .. –

+0

क्या आप कह रहे हैं कि यदि आपके पास टेक्स्ट इनपुट फ़ील्ड और बटन है, तो जब आप बटन दबाते हैं तो इनपुट फ़ील्ड का मान साफ़ हो जाता है? क्या आप इसे jsbin.com पर कह सकते हैं? – akonsu

उत्तर

15

इसके लिए कोई मौजूदा क्रॉस-ब्राउज़र फ़ंक्शन नहीं है।

function appendStringAsNodes(element, html) { 
    var frag = document.createDocumentFragment(), 
     tmp = document.createElement('body'), child; 
    tmp.innerHTML = html; 
    // Append elements in a loop to a DocumentFragment, so that the browser does 
    // not re-render the document for each node 
    while (child = tmp.firstChild) { 
     frag.appendChild(child); 
    } 
    element.appendChild(frag); // Now, append all elements at once 
    frag = tmp = null; 
} 

उपयोग (पठनीयता के लिए दांतेदार बनाना): निम्न विधि वांछित प्रभाव (एक अनुकूलित प्रदर्शन के लिए एक DocumentFragment का उपयोग कर, this answer के आधार पर) प्राप्त करने के लिए इस्तेमाल किया जा सकता

appendStringAsNodes(
    document.getElementById("divOne"), 
    "<table><tbody><tr><td><input type='text' value='0' /></td></tr></tbody></table>" 
); 
+0

डेन्डी! इस उत्कृष्ट कामकाज के लिए धन्यवाद। –

2

हाँ, आप कर सकते हैं वो करें।

var myNewTable = document.createElement("table"); 
myNewTable.innerHTML = "<tbody><tr><td><input type='text' value='0' /></td></tr></tbody>" 
document.getElementById("divOne").appendChild(myNewTable); 
+0

पुराने आईई संस्करण इस बारे में शिकायत करेंगे, क्योंकि वे '

' सहित कुछ तत्वों पर 'आंतरिक HTML' संपत्ति को सेट करने में संभाल नहीं सकते हैं। यह भी देखें [यह आलेख] (http://support.microsoft.com/kb/239832)। –

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