2011-09-27 5 views
5

मैं डीओएम के हिस्से को एक्सएचटीएमएल (वैध एक्सएमएल) में क्रमबद्ध करना चाहता हूं।जावास्क्रिप्ट में, डीओएम का सीरियलाइज़र हिस्सा एक्सएचटीएमएल कैसे कर सकता है?

<div> 
    <hr> 
    <img src="/foo.png"> 
</div> 
इस के साथ

, document.innerHTML मुझे देता है मैं लगभग क्या चाहते हैं, को छोड़कर यह एचटीएमएल देता है, नहीं एक्सएचटीएमएल (यानी <hr>: चलो मैं <body> अंदर सिर्फ एक तत्व है, और है कि इस तत्व मैं क्रमानुसार करने चाहते है मान लेते हैं और <img> ठीक से बंद नहीं किया जाएगा)। चूंकि innerHTML चाल नहीं करता है, इसलिए मैं डीओएम का हिस्सा एक्सएचटीएमएल में कैसे क्रमबद्ध कर सकता हूं?

+1

आप किस ब्राउज़र संगतता के बाद हैं? [यह मेरे लिए फ़ायरफ़ॉक्स और क्रोम में काम करता है] (https://developer.mozilla.org/en/XMLSerializer)। हालांकि मैं आईई के बारे में नहीं जानता। मैंने पाया कि वे कुछ रैपर का उपयोग करते हैं जैसे 'if (! Window.XMLSerializer) {window.XMLSerializer = function() {}; window.XMLSerializer.prototype.serializeToString = फ़ंक्शन (XMLObject) {return XMLObject.xml || ''; };} ', हालांकि मुझे नहीं पता कि यह कौन सा ब्राउज़र है (मैक -> परीक्षण करने के लिए कोई आईई नहीं)। –

+0

** लाइव डेमो: ** http://jsfiddle.net/qUwXE/ (लेकिन यह क्रोम और सफारी में काम नहीं करता है) –

+0

@ imeimeidas: धन्यवाद ... वास्तव में मैंने इसे एक पार्स किए गए XML दस्तावेज़ पर उपयोग किया, जहां यह क्रोम में भी काम किया। बहुत बुरा यह HTML के साथ काम नहीं करता है। –

उत्तर

3

मुझे यकीन है कि अगर (JavaScript इंजन के शीर्ष पर) अन्य भाषा का उपयोग नहीं कर रहा हूँ है एक विकल्प।

<script type="application/xquery"> 
    serialize(b:dom()//div) 
</script> 

उदाहरण के लिए, निम्नलिखित पृष्ठ में, धारावाहिक एक्सएचटीएमएल स्क्रिप्ट टैग के बजाय पृष्ठ पर पाठ के रूप में लिखा है: यह किसी भी मदद की है, तो यह XQuery (XQIB) यह ऐसा करने का तरीका क्या होगा , div टैग के बाद:

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
    <title>Serializing part of the DOM</title> 
    <meta charset="UTF-8"/> 
    <script type="text/javascript" src="mxqueryjs/mxqueryjs.nocache.js"></script> 
    </head> 
    <body> 
    <div> 
     <hr> 
     <img src="/foo.png"> 
    </div> 
    <script type="application/xquery"> 
     serialize(b:dom()//div) 
    </script> 
    </body> 
</html> 

एचटीएमएल डोम XQuery डाटा मॉडल (एक्सएमएल के शीर्ष पर एक डाटा मॉडल) के लिए मैप किया गया है। बी: डोम() पृष्ठ के दस्तावेज़ नोड को लौटाता है, और // div सभी वंशज div टैग्स पर नेविगेट करता है। Serialize समारोह फिर एक स्ट्रिंग को serializes।

हालांकि, यह IE9 + (6+ नहीं) और क्रोम, फ़ायरफ़ॉक्स, सफारी, ओपेरा के हाल के संस्करणों के लिए काम करेगा।

http://dev.abiss.gr/sarissa/jsdoc/symbols/XMLSerializer.htm

They also have an example of how to use it, जो सिर्फ है:

var xmlString = new XMLSerializer().serializeToString(someXmlDomNode); 
उनके मुताबिक

,

0
इस

कोड परीक्षण किया जाता है नहीं है, लेकिन मैं रिकर्सिवली पेरेंट तत्व के बच्चों को स्कैन और इस तरह एक्सएचटीएमएल का निर्माण होगा:

var parent; 
var parse = function(el) { 
    var res = ""; 
    for(var i=0; i < el.childNodes.length; i++) { 
    var child = el.childNodes[i]; 
    res += "<"+child.tagName; 
    // scan through attributes 
    for(var k=0; k < child.attributes.length; k++) { 
     var attr = child.attributes[k]; 
     res += " "+attr.name+"='"+attr.value+"'"; 
    } 
    res += ">"; 
    res += parse(child); 
    res += "</"+child.tagName+">"; 
    } 
    return res; 
} 
var xhtml = parse(parent); 
+3

शायद मैन्युअल रूप से क्रमबद्ध करना एकमात्र क्रॉस-ब्राउज़र अनुपालन तरीका है, लेकिन यह थोड़ा और जटिल है। आपका कोड यह काम नहीं करता है। इसके लिए कहीं पुस्तकालय होना चाहिए। –

0

Sarissa, क्रॉस-ब्राउज़र जावास्क्रिप्ट संगतता पुस्तकालय ब्राउज़र है कि एक कमी के लिए एक XmlSerializer कार्यान्वयन है उनकी लाइब्रेरी के लिए ब्राउज़र समर्थन अच्छा है:

समर्थित ब्राउज़र मोज़िला हैं - फ़ायरफ़ॉक्स और परिवार, एमएसएक्सएमएल 3.0 और ऊपर के साथ इंटरनेट एक्सप्लोरर, कॉन्करर (निश्चित रूप से केडीई 3.3+), सफारी और ओपेरा।

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