2010-03-19 8 views
51

पर एक HTMLElement को कैसे परिवर्तित करें मैं सर्वर पक्ष के साथ डेटा का आदान-प्रदान करने के लिए जावास्क्रिप्ट में एक XML तत्व बनाने जा रहा हूं। मैंने पाया कि मैं इसे document.createElement के साथ कर सकता हूं। लेकिन मुझे नहीं पता कि इसे स्ट्रिंग में कैसे परिवर्तित किया जाए। क्या ब्राउज़र में कोई एपीआई आसान बनाने के लिए है? या क्या इस एपीआई को लेकर कोई जेएस lib है?एक स्ट्रिंग

अग्रिम धन्यवाद।

// संशोधन

मुझे लगता है कि ब्राउज़र एपीआई XmlSerializer पाया, यह स्ट्रिंग के लिए क्रमानुसार करने सही तरीके से होना चाहिए।

+0

क्षमा करें, मैं तुम्हें पकड़ नहीं किया था। तो क्या मुझे और जवाब स्वीकार करना चाहिए? लेकिन ऐसा लगता है कि उनमें से कुछ को accetped नहीं किया जा सकता है। –

+0

संभव डुप्लिकेट [अंतर्निहित डीओएम विधियों या प्रोटोटाइप का उपयोग कर एक HTML स्ट्रिंग से एक नया डोम तत्व बनाना] (http://stackoverflow.com/questions/494143/creating-a-new-dom-element-from-an- एचटीएमएल-स्ट्रिंग-इन-वर्ड-इन-डोम-विधियों-या-प्रो) –

उत्तर

31

आप 'बाहरी-एचटीएमएल' तत्व क्लोनिंग, एक खाली, 'गुप्त' कंटेनर में जोड़कर, प्राप्त कर सकते हैं और कंटेनर के आंतरिक HTML को पढ़ना।

यह उदाहरण एक वैकल्पिक दूसरा पैरामीटर लेता है।

तत्व के वंशज शामिल करने के लिए दस्तावेज़.getHTML (तत्व, सत्य) पर कॉल करें।

document.getHTML= function(who, deep){ 
    if(!who || !who.tagName) return ''; 
    var txt, ax, el= document.createElement("div"); 
    el.appendChild(who.cloneNode(false)); 
    txt= el.innerHTML; 
    if(deep){ 
     ax= txt.indexOf('>')+1; 
     txt= txt.substring(0, ax)+who.innerHTML+ txt.substring(ax); 
    } 
    el= null; 
    return txt; 
} 
0

वहाँ एक tagName संपत्ति है, और एक attributes रूप में अच्छी तरह संपत्ति:

var element = document.getElementById("wtv"); 
var openTag = "<"+element.tagName; 
for (var i = 0; i < element.attributes.length; i++) { 
    var attrib = element.attributes[i]; 
    openTag += " "+attrib.name + "=" + attrib.value; 
} 
openTag += ">"; 
alert(openTag); 

भी देखें How to iterate through all attributes in an HTML element? (मैंने किया था!) ​​

खुले और बंद टैग आप शायद innerHTML इस्तेमाल कर सकते हैं के बीच सामग्री प्राप्त करने के लिए यदि आप सभी बाल तत्वों पर पुन: प्रयास नहीं करना चाहते हैं ...

alert(element.innerHTML); 

... और फिर tagName के साथ फिर से बंद टैग प्राप्त करें।

var closeTag = "</"+element.tagName+">"; 
alert(closeTag); 
+0

मुझे डर है कि कभी-कभी कोड लिखने के लिए यह पूरे मार्कअप को प्राप्त करता है। –

+0

यदि इसका एक्सएमएल यह सब एक रूट नोड में होना चाहिए, हाँ? यदि ऐसा है, तो आपको केवल रूट नोड के लिए ऐसा करना होगा - आंतरिक HTML सभी प्रमुख ब्राउज़रों पर समर्थित है, और आपको रूट नोड में एक्स (एच) टीएमएल निहित किया जाएगा। (यानी सब कुछ!) –

+1

तत्व के गुणों पर लूपिंग क्यों परेशान करते हैं और इससे एक स्ट्रिंग 'टैग' बनाते हैं? तत्व को किसी अन्य तत्व में लपेटें, और उस नए मूल तत्व के आंतरिक HTML को लें। वोला, बाहरी HTML के लिए तत्काल कामकाज। –

76

तत्व outerHTML संपत्ति (ध्यान दें: supported by Firefox after version 11) पूरे तत्व के एचटीएमएल देता है।

उदाहरण

<div id="new-element-1">Hello world.</div> 

<script type="text/javascript"><!-- 

var element = document.getElementById("new-element-1"); 
var elementHtml = element.outerHTML; 
// <div id="new-element-1">Hello world.</div> 

--></script> 

इसी तरह, आप innerHTMLinnerText का उपयोग एचटीएमएल एक दिया तत्व के भीतर निहित पाने के लिए कर सकते हैं या एक तत्व (बिना HTML मार्कअप) के अंदर का पाठ मिलता है।

भी देखें

  1. outerHTML - Javascript Property
  2. Javascript Reference - Elements
+0

लेकिन ऐसा लगता है कि मुझे संपत्ति बाहरी HTML के साथ अंदरूनी पाठ नहीं मिल सकता है। मुझे लगता है कि मैं वास्तव में क्या चाहता हूं HTML मार्कअप है। –

+0

जावास्क्रिप्ट बाहरी HTML वास्तव में काम करता है? –

+0

बाहरी HTML संपत्ति क्रोम में ठीक काम करती है। –

0

यह हर किसी के मामले पर लागू नहीं हो सकता है, लेकिन जब एक्सएमएल से निकालने मैं इस समस्या है, जो मैं इस के साथ हल किया था।

function grab_xml(what){ 
var return_xml =null; 
    $.ajax({ 
       type: "GET", 
       url: what, 
       success:function(xml){return_xml =xml;}, 
     async: false 
     }); 
return(return_xml); 
} 

तो एक्सएमएल मिलती है:

var sector_xml=grab_xml("p/sector.xml"); 
var tt=$(sector_xml).find("pt"); 

फिर मैं तो इस समारोह बना एक्सएमएल लाइन निकालने के लिए, जब मैं एक XML फ़ाइल से पढ़ने की जरूरत है, एचटीएमएल टैग युक्त।

function extract_xml_line(who){ 
    var tmp = document.createElement("div"); 
    tmp.appendChild(who[0]); 
    var tmp=$(tmp.innerHTML).html(); 
    return(tmp); 
} 

और अब समाप्त करने के लिए:

var str_of_html= extract_xml_line(tt.find("intro")); //outputs the intro tag and whats inside it: helllo <b>in bold</b> 
1

ऐसा करने का सबसे आसान तरीका है कि तत्व चर tmp और यह खाली है, तो नए तत्व संलग्न करने के लिए की प्रतिलिपि innerHTML है, और उस की नकल वापस tmp के बाद इसके लिए चर। यहां एक उदाहरण है जिसका उपयोग मैं शीर्ष पर शीर्ष पर jquery स्क्रिप्ट जोड़ता था।

var imported = document.createElement('script'); 
imported.src = 'http://code.jquery.com/jquery-1.7.1.js'; 
var tmpHead = document.head.innerHTML; 
document.head.innerHTML = ""; 
document.head.append(imported); 
document.head.innerHTML += tmpHead; 

कि सरल :)