2010-10-11 5 views
8

मुझे किसी वेब पेज में किसी तत्व का वास्तविक HTML कोड प्राप्त करने की आवश्यकता है।कच्चे HTML कोड प्राप्त करने के लिए जावास्क्रिप्ट का उपयोग करें

उदाहरण के लिए यदि तत्व के अंदर वास्तविक html कोड "How to fix"

इस जावास्क्रिप्ट getElementById ('Mye') चल रहा है। InnerHTML मुझे "How to fix" जो डीकोड रूप

मैं कैसे प्राप्त कर सकता है देता है जावास्क्रिप्ट का उपयोग कर "How to fix"?

+1

सही जावास्क्रिप्ट प्रॉपर्टी 'आंतरिक HTML' है, न कि 'innerHtml' – romaintaz

+0

सुनिश्चित करें कि जब आप' getElementById ('myE') से स्ट्रिंग प्रदर्शित कर रहे हों। आंतरिक HTML 'जिसे HTML के रूप में पुन: व्याख्या नहीं किया जा रहा है जिसके परिणामस्वरूप नहीं गैर-ब्रेकिंग स्पेस कोड दिखा रहा है। –

उत्तर

4

आप काम करना चाहिए है क्या:

तत्व परीक्षण:

<div id="myE">How to&nbsp;fix</div>​ 

जावास्क्रिप्ट परीक्षण:

alert(document.getElementById("myE​​​​​​​​").innerHTML); //alerts "How to&nbsp;fix" 

You can try it out here। सुनिश्चित करें कि का उपयोग कर जहां भी &nbsp; एक स्थान के रूप में दिखाई नहीं दे रहा है, जो संभवतः मामला है। यदि आप इसे कहीं भी दिखाना चाहते हैं जो HTML के लिए डिज़ाइन किया गया है, तो आपको इसे से बचने की आवश्यकता होगी।

+3

यह केवल कुछ इकाइयों के लिए काम करता है। '& Eacute; 'जैसे इकाई संदर्भ' आंतरिक HMTML' में दिखाई नहीं देते हैं; इसके बजाए वर्णित चरित्र, जैसे 'é', वहां दिखाई देता है। –

17

आप वास्तविक अपने वेब पेज के हिस्से के HTML स्रोत प्राप्त नहीं कर सकते हैं।

जब आप कोई वेब ब्राउज़र एक HTML पृष्ठ देते हैं, तो यह HTML को कुछ डोम नोड्स में पार्स करता है जो आपके दस्तावेज़ का निश्चित संस्करण है जहां तक ​​ब्राउज़र का संबंध है। डीओएम एचटीएमएल से महत्वपूर्ण जानकारी रखता है जैसे कि आपने fix शब्द से पहले यूनिकोड चरित्र यू +00 ए0 गैर-ब्रेकिंग स्पेस का उपयोग किया- लेकिन यह कच्ची टाइपिंग की बजाय इकाई संदर्भ के माध्यम से उपयोग की जाने वाली अपरिवर्तनीय जानकारी नहीं है ( )।

जब आप किसी तत्व नोड के innerHTML के लिए ब्राउज़र से पूछते हैं, तो यह आपको मूल HTML स्रोत नहीं देता है जिसे उस नोड को उत्पन्न करने के लिए पार्स किया गया था, क्योंकि इसमें अब यह जानकारी नहीं है। इसके बजाए, यह डीओएम में संग्रहीत डेटा से नया HTML उत्पन्न करता है। ब्राउज़र उस HTML क्रमबद्धता को प्रारूपित करने का निर्णय लेता है; विभिन्न ब्राउज़र अलग-अलग HTML उत्पन्न करते हैं, और संभावना है कि यह वैसे ही नहीं होगा जैसा आपने इसे मूल रूप से स्वरूपित किया था।

विशेष रूप से,

  • तत्व नाम ऊपरी या निचले मामलों हो सकता है;

  • विशेषताएं उसी क्रम में नहीं हो सकतीं जैसा आपने उन्हें HTML में बताया था;

  • विशेषता उद्धरण आपके स्रोत के समान नहीं हो सकता है। आईई अक्सर अनगिनत विशेषताओं को उत्पन्न करता है जो वैध HTML भी नहीं हैं; आप सभी को यह सुनिश्चित हो सकता है कि innerHTML जेनरेट किया गया है, उसी ब्राउज़र में इसे अन्य तत्व के innerHTML पर लिखकर सुरक्षित होगा;

  • यह किसी भी चीज़ के लिए इकाई संदर्भों का उपयोग नहीं कर सकता है, लेकिन ऐसे वर्ण जो अन्यथा टेक्स्ट सामग्री में शामिल करना असंभव होगा: एम्परसैंड, कम-थान और विशेषता-मूल्य-उद्धरण। &nbsp; लौटने के बजाय यह आपको केवल कच्चे   वर्ण दे सकता है।

आप सक्षम करने के लिए देखते हैं कि है कि एक नॉन-ब्रेकिंग स्पेस है नहीं हो सकता है, लेकिन यह अभी भी एक है और यदि आप किसी अन्य तत्व में है कि HTML सम्मिलित यह एक के रूप में कार्य करेगा।

x= el.innerHTML.replace(/\xA0/g, '&nbsp;') 

लेकिन यह है कि केवल भागने है: यदि आप ऐसा करेंगे, किसी कारण से, आपको लगता है कि ऐसा करने से प्राप्त कर सकते हैं एक नॉन-ब्रेकिंग स्पेस कैरेक्टर एंटिटी-भाग निकले &nbsp; लिए किया जा रहा है पर कहीं भी भरोसा करने की जरूरत नहीं होनी चाहिए ... यू +00 ए 0 और अन्य हजारों संभावित यूनिकोड वर्णों में से कोई भी नहीं, इसलिए यह थोड़ा संदिग्ध है।

तुम सच में वास्तव में अपने पृष्ठ की वास्तविक स्रोत HTML प्राप्त करने की आवश्यकता है, तो आप अपने खुद के यूआरएल (location.href) के लिए एक XMLHttpRequest बना सकते हैं और responseText में पूर्ण, अन-पार्स HTML स्रोत मिलता है। ऐसा करने का लगभग कोई अच्छा कारण नहीं है।

+1

अच्छी सामग्री @bobince। मुझे आपके XMLHttpRequest विचार के लिए एक हास्यास्पद उपयोग केस मिला। मैं एक [ पॉलीफिल] (https://github.com/scottjehl/picturefill) के साथ काम कर रहा हूं और आईई 9 _helpfully_ डीओएम से बाल तत्वों को अलग कर रहा है। अनपेक्षित HTML प्राप्त करना चाल चल रहा है। – Pat

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