2009-08-06 9 views
51

का उपयोग कर संपूर्ण HTML नोड कैसे बदलूं मैं एक स्ट्रिंग जो लगता है कि है।मैं jQuery

मैं ब्राउज़र को उस स्ट्रिंग को प्रस्तुत और प्रदर्शित करना चाहता हूं। विचार कुछ ऐसा करना होगा:

$('html').parent().html(myString); 

अच्छा, यह काम नहीं करता है। मैंने एक आईएफआरएएम का उपयोग करने का प्रयास किया है, लेकिन मुझे यह नहीं पता है कि इसे कैसे काम करना है।

नोट: इस स्ट्रिंग को बदलने के लिए मेरे लिए असंभव है। सर्वर के बाद के कॉल में इस स्ट्रिंग को पुन: उत्पन्न करना मेरे लिए भी असंभव है (अन्यथा मैं ब्राउज़र को उस यूआरएल पर रीडायरेक्ट कर सकता हूं)।

+0

जहां तक ​​मुझे पता है कि 'html' तत्व, आईई 6 और आईई 7 के लिए कोई अभिभावक नहीं है। (लेकिन वे शायद ही गिनते हैं) तो आपको सीधे उन कार्यों को देखने की ज़रूरत है जो सीधे '$ (' html ') '- outerhtml ध्वनियों पर सीधे काम करते हैं। – wombleton

उत्तर

114

document.open/write/close तरीकों तुम क्या चाहते हो जाएगा:

var newDoc = document.open("text/html", "replace"); 
newDoc.write(myString); 
newDoc.close(); 

जब तक आप प्रतिस्थापन पैरामीटर में पास नहीं करते हैं, तो document.open कॉल पृष्ठ इतिहास जोड़ता है। इसलिए उपयोगकर्ताओं को पिछले पृष्ठ पर जाने के लिए दो बार क्लिक करना होगा।

+1

धन्यवाद, यह पूरी तरह से काम करता है। क्या आपको पता है कि यह किसी भी गैर-यानी ब्राउज़र में अलग-अलग व्यवहार करता है या नहीं? –

+1

चूंकि ये बहुत लंबे समय से डीओएम का हिस्सा रहे हैं, इसलिए मैं उन सभी आधुनिक ब्राउज़रों में सही ढंग से काम करने की अपेक्षा करता हूं। –

+1

हे, वर्तमान में समाधान का उपयोग करते समय फ़ायरफ़ॉक्स और हार्ड रीफ्रेश में समस्या है। क्या आजकल कोई कामकाज है? –

13

तुम बस html टैग को निकाल देते हैं सकता है, और फिर एचटीएमएल तत्व के अंदर सब कुछ डाल दिया:

$('html').html(myString.replace(/<html>(.*)<\/html>/, "$1")); 
+1

धन्यवाद लेकिन यह काम नहीं करता है। इससे कोई फर्क नहीं पड़ता कि मैं किस मूल्य का प्रयास करता हूं, '$ (' html ') का परिणाम। Html (somevalue) 'खाली खाली डोम (IE में) वाला एक खाली पृष्ठ है। –

+0

क्रोम और एफएफ में काम करने के लिए प्रकट होता है, वैसे! –

+4

'$ (" html ") को अलग करने की कोई आवश्यकता नहीं है। Html (myString) 'स्वचालित रूप से करता है। – inf3rno

4

एक और भिन्नता की कोशिश करने

$('html').replaceWith(myString); 

http://api.jquery.com/replaceWith/

+0

ध्यान दें कि यह jQuery ऑब्जेक्ट को भी बदल देता है, इसलिए यदि आप संदर्भ रखते हैं तो आपको उन्हें अपडेट करने की आवश्यकता है। –

+3

काम नहीं करता है। 'HierarchyRequestError: फ़ायरफ़ॉक्स में पदानुक्रम में निर्दिष्ट बिंदु पर नोड डाला नहीं जा सकता है। – inf3rno

+0

लगभग उसी परिणाम के रूप में inf3rno => नोड खुद को प्रतिस्थापित नहीं कर सकता – Mauro

5

कम से कम फ़ायरफ़ॉक्स में (47.0) समाधान हो सकता है:

var newDoc = document.open("text/html", "replace"); 
newDoc.write(response); 
newDoc.close(); 

काम नहीं करता है के रूप में पर वापस बटन दबाने के बाद से सुझाव फ़ायरफ़ॉक्स अभी भी पिछले इतिहास प्रविष्टि को लोड करता है - यानी "प्रतिस्थापन" का उपयोग करने का पूरा बिंदु यह है कि उपयोगकर्ताओं को अपने बैक बटन पर क्लिक करने से बचने के लिए केवल बधाई दी जाए आखिरी बार दस्तावेज़ .write() को कॉल किया गया था। कि ऊपर उल्लिखित प्रभाव का कारण नहीं है ऐसा करने का तरीका बस बुला रहा है सीधे दस्तावेज़ वस्तु पर विधि:

document.open("text/html", "replace"); 
document.write(response); 
document.close(); 

न केवल कचरा के साथ उपयोगकर्ताओं को इतिहास भरने टाल की जगह विकल्प का उपयोग, लेकिन यह भी से निपटने में मदद करता है ऐसे मुद्दे जो अजीब तरीकों से उत्पन्न होते हैं, जिनमें ब्राउज़र अक्सर जावास्क्रिप्ट द्वारा बनाई गई इतिहास प्रविष्टियों को संभालते हैं, क्योंकि कभी-कभी ब्राउजर को इतिहास में जावास्क्रिप्ट द्वारा दस्तावेज़ में किए गए परिवर्तनों को लॉग करने की अनुमति देने के लिए बैक/फॉरवर्ड ऑपरेशंस को संभालने पर अप्रत्याशित परिणाम हो सकते हैं (उदाहरण के लिए दस्तावेज़ पर एक document.write() करने के बाद url में 'wyciwyg: // (somenumber)' जोड़ना, जिसका इतिहास पिछले राज्य में वापस आया था)।