2009-03-06 11 views
15
<noscript><div id="example">I want to get this innerHTML</div></noscript> 

<script type="text/javascript"> alert($('example').innerHTML);</script> 

यह जावास्क्रिप्ट स्निपेट बस एक खाली स्ट्रिंग देता है। क्या नोस्क्रिप्ट नोड की सामग्री प्राप्त करने का कोई तरीका है?<noscript> के एक्सेस सामग्री जावास्क्रिप्ट

पेज। मैं इस विशेष परियोजना पर प्रोटोटाइप का उपयोग कर रहा हूँ।

+1

jQuery के साथ $ ($ ("नोस्क्रिप्ट")। टेक्स्ट()) आज़माएं। – sibidiba

+0

यह^काम करता है। कम से कम क्रोम 32. – Jazzy

उत्तर

12

यदि स्क्रिप्टिंग सक्षम है, the noscript element is defined as containing only text - हालांकि यह सामग्री पर कुछ प्रतिबंधों के साथ पार्सेबल टेक्स्ट होना चाहिए। इसे ध्यान में रखते हुए, आप पाठ निकालने में सक्षम होना चाहिए, इसे पार्स कर सकते हैं, और फिर अपना वांछित तत्व ढूंढ सकते हैं। इसका एक प्राथमिक उदाहरण निम्नानुसार है:

var nos = document.getElementsByTagName("noscript")[0]; 
// in some browsers, contents of noscript hang around in one form or another 
var nosHtml = nos.textContent||nos.innerHTML; 

if (nosHtml) 
{ 
    var temp = document.createElement("div"); 
    temp.innerHTML = nosHtml; 

    // lazy man's query library: add it, find it, remove it 
    document.body.appendChild(temp); 
    var ex = document.getElementById("example"); 
    document.body.removeChild(temp); 

    alert(ex.innerHTML); 
} 

ध्यान दें कि जब मैंने मूल रूप से यह उत्तर लिखा था, तो ऊपर Google क्रोम में विफल रहा; नोस्क्रिप्ट सामग्री तक पहुंच इन दिनों कुछ हद तक बेहतर साबित होती है, लेकिन यह अभी भी मुझे एक एज-केस के रूप में हमला करता है जो कि अन्य तत्वों की तुलना में कुछ हद तक अधिक संभावना है - यदि आपके पास अन्य विकल्प हैं तो मैं इससे बचूंगा।

+0

यह आईई 7 (एक्सपी) पर काम नहीं करता है। हालांकि, मैं आईई 6 पर काम करता हूं। – pixelastic

+1

jQuery के साथ $ ($ ("नोस्क्रिप्ट")। टेक्स्ट()) आज़माएं। – sibidiba

+0

@ शोग 9 इस बार बाद में, क्या आप इस उत्तर के बारे में कुछ स्पष्ट कर सकते हैं? 'Google के क्रोम में, नोस्क्रिप्ट तत्व में डोम में कोई बच्चा नहीं है - अगर मैं इसे सही ढंग से समझता हूं, तो क्या आप क्रोम का संस्करण कह रहे हैं, जब आप जावास्क्रिप्ट सक्षम होने पर' नोस्क्रिप्ट 'टैग की सामग्री को पूरी तरह से खाली कर चुके थे, इस प्रकार अपनी आंतरिक सामग्री को खाली कर रहा है? यदि सही है, तो यह एक अजीब लगता है।मैं आज कुछ इसी तरह लागू करने की कोशिश कर रहा हूं, लेकिन यह मुझे आश्चर्यचकित कर रहा है कि 'नोस्क्रिप्ट' विनिर्देश इसकी सामग्री के साथ क्या करना है, इस बारे में विस्तृत नहीं करता है। –

3

फ़ायरफ़ॉक्स 3.0.7, सफारी 3.2.2, और एमएसआईई 7.0.5730.13 (सभी WinXP SP3 पर) के साथ परीक्षण यह प्रतीत होता है कि <noscript> टैग के भीतर सब कुछ पूरी तरह से डीओएम पेड़ से छोड़ा जाता है।

हालांकि, <noscript> तत्व का उपयोग करना संभव हो सकता है, और उसके बाद अपने बच्चे तत्वों को बदलने के लिए डीओएम विधियों का उपयोग करना संभव हो सकता है।

+0

अन्य दो की कोशिश नहीं की, लेकिन FF3.0.7 टेक्स्ट सामग्री के माध्यम से सामग्री का खुलासा करता है। – Shog9

3

HTML 4.0 spec से:

NOSCRIPT तत्व जब एक स्क्रिप्ट निष्पादित नहीं है लेखकों वैकल्पिक सामग्री उपलब्ध कराने के लिए अनुमति देता है। एनओएससीआरआईपीटी तत्व की सामग्री को निम्नलिखित मामलों में केवल स्क्रिप्ट-जागरूक उपयोगकर्ता एजेंट द्वारा प्रस्तुत किया जाना चाहिए:

  • उपयोगकर्ता एजेंट को स्क्रिप्ट का मूल्यांकन न करने के लिए कॉन्फ़िगर किया गया है।
  • उपयोगकर्ता एजेंट पहले दस्तावेज़ में SCRIPT तत्व द्वारा आवंटित एक स्क्रिप्टिंग भाषा का समर्थन नहीं करता है।

मुझे ऐसा लगता है यह संकेत मिलता है कि कि NOSCRIPT टैग की सारी सामग्री (इस मामले में, अपने div) पूरी तरह नजरअंदाज कर दिया जाता है, तो पटकथा ब्राउज़र में सक्षम है। क्या आपने सत्यापित किया है कि "उदाहरण" div आपके मामले में डीओएम के माध्यम से सुलभ है?

+0

मैंने वास्तव में इसका परीक्षण किया है (मेरा जवाब देखें) - div DOM में नहीं है। – Alnitak

3

मैं प्रोटोटाइप के बारे में यकीन नहीं है, लेकिन यह jQuery के साथ क्रोम में काम करता है: (। $ ("नोस्क्रिप्ट") पाठ())

$('noscript').before($('noscript').text()); 
+1

मैंने इसे IE9, FF9, और क्रोम 16.0.912.77 के साथ सफलतापूर्वक उपयोग किया है। आईई 8 (और शायद पहले) के लिए एक कार्य-आसपास का उपयोग करना होगा, मेरे मामले में, एक jQuery यूआई टैब में डालने के लिए AJAX के माध्यम से वर्तमान यूआरएल पर सामग्री को पुनर्प्राप्त करने के लिए, गैर-रूट यूआरएल से वास्तविक टैबबड सामग्री की सेवा की जाती है एक पूर्ण अनुरोध के लिए डिफ़ॉल्ट रूप से एक नोस्क्रिप्ट टैग में, केवल AJAX अनुरोध पर टैब सामग्री। – tvanfosson

2

$ प्रयास करें jQuery के साथ।

+0

यह दिलचस्प है, और सादे पाठ को पुनः प्राप्त करने के लिए उपयोगी है। लेकिन अगर आप टैग के साथ कोई मार्कअप पुनर्प्राप्त करने का प्रयास करते हैं तो Sizzle (1.9.1) एक "अपरिचित अभिव्यक्ति" त्रुटि फेंकता है। – Ben

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