2011-11-10 11 views
9

मैं jQuery 1.5 के साथ नई $.parseXML() विधि का उपयोग कर रहा हूं। जब भी मैं XML ऑब्जेक्ट में कोई नया तत्व डालता हूं, तो वह नया तत्व स्वचालित रूप से 'x.w3.org/1999/xhtml "मान के साथ' xmlns 'विशेषता प्राप्त करता है।मैं किसी XML ऑब्जेक्ट में 'xmlns' विशेषता डालने से jQuery को कैसे रोकूं?

<five xmlns="http://www.w3.org/1999/xhtml">some value</five> 

मैं कैसे 'xmlns' विशेषता डालने से jQuery रोकूँ:

var myXml = "<one attr='a'><two attr='b'/><three attr='c'><four attr='d'/></three></one>"; 
myXml = $.parseXML(myXml); 
$(myXml).find('three').append($('<five>some value</five>')); 

कोड निम्नलिखित तत्व बनाता है: उदाहरण के लिए, नीचे दिए कोड स्निपेट देखते हैं? मैंने .removeAttr() विधि का उपयोग करने का प्रयास किया है, लेकिन यह भी काम नहीं करता है। कोई विचार?

अद्यतन: सुझाव है कि उपयोगकर्ता nrabinowitz की पेशकश इस समस्या को हल करने में सहायक थी। शीर्ष स्तर तत्व में xlmns विशेषता जोड़ना xlmns विशेषता को प्रत्येक नए तत्व को स्वचालित रूप से असाइन करने से रोकता है। फिर भी, मैंने अपने विशेष कार्यक्रम के लिए एक और समाधान का चयन किया। मैंने एक्सएमएल ऑब्जेक्ट को एक स्ट्रिंग में परिवर्तित करने के बाद (वेब ​​पेज पर प्रदर्शित होने के बाद) सभी xlmns विशेषताओं को हटाने के लिए .replace() विधि का उपयोग किया।

+3

क्या आपने रूट तत्व में अपना स्वयं का XMLNS विशेषता जोड़ने का प्रयास किया है? मुझे संदेह है कि एक स्पष्ट नामस्थान की अनुपस्थिति में, jQuery एक्सएचटीएमएल पर डिफ़ॉल्ट है। – nrabinowitz

+3

मुझे नहीं लगता कि jQuery स्वयं ही कोई एक्सएमएल पार्सिंग करता है। इसके बजाए, यह ब्राउज़र को ऐसा करने देता है। (यदि jQuery में एक पूर्ण एक्सएमएल पार्सर बनाया गया था, तो यह और भी बड़ा होगा :-) * संपादित करें * yup ने स्रोत की जांच की - यह सिर्फ आपके XML को "DOMParser" उदाहरण पर रखता है। – Pointy

उत्तर

3

उपयोग करने के लिए

$(myXml).find('three').append('<five>some value</five>'); 
+0

यह मेरे लिए धन्यवाद, धन्यवाद। – Chris

+0

मेरे लिए भी काम करता था, लेकिन मामला ' को जोड़ रहा था> तत्व वांछित – BobbyTables

+0

क्रोम में सही काम किया, लेकिन आईई 11 में कुछ भी शामिल नहीं है। इसका परीक्षण करें: http://jsfiddle.net/eygqwwgt/2/ क्या आपके पास कोई सुराग है? – Bjoerg

0

आप इस तरह करने की ज़रूरत का प्रयास करें:

var myXml = "<one attr='a'><two attr='b'/><three attr='c'><four attr='d'/></three></one>"; 

myXml = $.parseXML(myXml); 

var el=xmlDoc.createElement("yourElement"); 

$(myXml).find('three').append($(el)); 
+0

आपका समाधान अभी भी "yourElement" टैग के भीतर नेमस्पेस देता है। यहां देखें: http://jsfiddle.net/Lzfg7zpv/ – Bjoerg

1

क्या होता है कि नोड आप डालने कर रहे हैं एक और namespaceURI संपत्ति है।

नोड

$($.parseXML('<node/>'))[0].namespaceURI 
// null 

$ .parseXML से प्राप्त आपका बनाया नोड

$('<node>')[0].namespaceURI 
// "http://www.w3.org/1999/xhtml" 

आप अपने बनाया नोड भी मूल्य null के namespaceURI करना चाहते हैं।

बनाए गए नोड को jQuery का उपयोग करके नेमस्पेस का उत्तराधिकारी बनाने के लिए, मूल नोड को $ 0 () जैसे दूसरे तर्क के रूप में प्रदान करें।

var myXml = "<one attr='a'><two attr='b'/><three attr='c'><four attr='d'/></three></one>"; 
myXml = $.parseXML(myXml); 
$(myXml).find('three').append($('<five>some value</five>', myXml)); 
संबंधित मुद्दे