2008-09-30 17 views
6

सेट करते समय आईई अप्रत्याशित त्रुटियों क्यों देता है मैंने फ़ायरफ़ॉक्स में किसी तत्व पर आंतरिक HTML सेट करने का प्रयास किया और यह ठीक काम किया, आईई में इसकी कोशिश की और बिना किसी स्पष्ट कारण के अप्रत्याशित त्रुटियां मिलीं।आंतरिक HTML

उदाहरण के लिए यदि आप किसी तालिका के आंतरिक HTML को "stu से hi" पर आज़माएं और सेट करें तो यह असफल हो जाएगा, क्योंकि तालिका को अनुक्रम के बाद पालन किया जाना चाहिए।

+1

एक कोड अंश उपयोगी हो सकता था ... –

उत्तर

0

"जाहिर है फ़ायरफ़ॉक्स इस picky नहीं है" ==> जाहिर है फ़ायर्फ़ॉक्स तो गाड़ी, कि यह मूल HTML पर घोंसला बनाने वाले नियमों के इस स्पष्ट उल्लंघन पंजीकृत नहीं करता है ...

के रूप में किसी अन्य में बताया फोरम, फ़ायरफ़ॉक्स स्वीकार करेगा, कि आप एक संपूर्ण एचटीएमएल दस्तावेज़ को फॉर्म-फ़ील्ड या यहां तक ​​कि एक छवि के बच्चे के रूप में जोड़ते हैं, - (

+6

ब्राउज़रों का उद्देश्य उपयोगकर्ता को प्रदान की गई जानकारी को यथासंभव सर्वोत्तम प्रस्तुत करना है - इसका मतलब है कि लेखक त्रुटियों से पुनर्प्राप्त करने का प्रयास करना। – Quentin

-2

मुझे अभी पता चला है कि यदि आप IE में किसी तत्व पर आंतरिक HTML सेट करने का प्रयास करते हैं जो तर्कसंगत रूप से सही नहीं है तो यह इस त्रुटि को फेंक देगा। उदाहरण के लिए यदि आप किसी तालिका के आंतरिक HTML को "" stu से हाय "पर सेट करने की कोशिश करते हैं, तो यह विफल हो जाएगा, क्योंकि तालिका को अनुक्रम के बाद पालन किया जाना चाहिए। स्पष्ट रूप से फ़ायरफ़ॉक्स यह picky नहीं है। उम्मीद है कि यह मदद करता है।

+0

मेरे यहां मुद्दा यह था: Stackoverflow एक बनना था जगह जहां लोग तकनीकी सवालों के अच्छे तकनीकी उत्तर के लिए जा सकते हैं। मुझे कुछ स्पष्ट नहीं मिला और सोचा कि मैं इसे ज्ञानबेस में जोड़ दूंगा। ऐसा कोई प्रश्न लिखने के बिना ऐसा करने का कोई तरीका नहीं है, इसलिए मैंने किया और इसका उत्तर दिया। – stu

+0

आप डाउनवॉटेड हो सकते हैं क्योंकि इनमें से अधिकतर उत्तर वास्तव में प्रश्न में हैं - आपने मूल रूप से यह नहीं कहा था कि आप क्या करने की कोशिश कर रहे थे। मैंने इसे अभी प्रश्न में ले जाया है। –

0

क्या आपने आंतरिक टेक्स्ट और/या टेक्स्ट सामग्री सेट करने का प्रयास किया है? कुछ नोड्स (जैसे एससीआरआईपीटी टैग) जब आप IE में अपने आंतरिक HTML को बदलने का प्रयास करते हैं तो अपेक्षित व्यवहार नहीं करेंगे। टेक्स्ट के विपरीत आंतरिक टेक्स्ट के बारे में यहां अधिक जानकारी:

http://blog.coderlab.us/2006/04/18/the-textcontent-and-innertext-properties/

3

पता नहीं क्यों आप स्टू के सवाल के लिए नीचे दिए गए हैं, क्योंकि यह हाल ही में मैंने हल किया है। यह चाल एचटीएमएल को एक डीओएम तत्व में 'गड़बड़' करने के लिए है कि वर्तमान में दस्तावेज़ पेड़ से जुड़ा हुआ नहीं है। यहाँ कोड का टुकड़ा है कि यह करता है:

// removing the scripts to avoid any 'Permission Denied' errors in IE 
var cleaned = html.replace(/<script(.|\s)*?\/script>/g, ""); 

// IE is stricter on malformed HTML injecting direct into DOM. By injecting into 
// an element that's not yet part of DOM it's more lenient and will clean it up. 
if (jQuery.browser.msie) 
{ 
    var tempElement = document.createElement("DIV"); 
    tempElement.innerHTML = cleaned; 
    cleaned = tempElement.innerHTML; 
    tempElement = null; 
} 
// now 'cleaned' is ready to use... 

नोट हम केवल उपयोग कर रहे हैं यहाँ इस स्निपेट में jQuery का उपयोग कर कि ब्राउज़र आईई है के लिए परीक्षण करने के लिए, वहाँ jQuery पर कोई मुश्किल निर्भरता है।

0

क्या आप आंतरिक HTML में एक पूरी तरह से अलग आंतरिक HTML सेट कर रहे हैं या पैटर्न को बदल रहे हैं? मैं पूछता हूं क्योंकि यदि आप आंतरिक HTML की 'शक्ति' के माध्यम से एक छोटी सी खोज/प्रतिस्थापन करने की कोशिश कर रहे हैं, तो आपको कुछ प्रकार के तत्व IE में नहीं खेलेंगे।

यह कोशिश/पकड़ में अपने प्रयास के आसपास सावधानीपूर्वक उपचार किया जा सकता है और जब तक आप इसे सफलतापूर्वक प्रबंधित नहीं कर लेते हैं तब तक डॉम को पेरेंट नोड के माध्यम से बुलबुला कर सकते हैं।

लेकिन यदि आप ब्रांड-नई सामग्री डालने में सक्षम नहीं हैं तो यह उपयुक्त नहीं होगा।

1

उस तत्व का दायरा जांचें जिसे आप आंतरिक HTML सेट करने का प्रयास कर रहे हैं। चूंकि एफएफ और आईई इसे अलग तरीके से संभालते हैं

14

आप उस व्यवहार को देख रहे हैं क्योंकि आंतरिक HTML केवल आईई में तालिका तत्वों के लिए पढ़ा जाता है। MSDN के innerHTML Property प्रलेखन से:, कर्नल, COLGROUP, FRAMESET, प्रमुख, एचटीएमएल, स्टाइल, टेबल, tbody, tfoot:

संपत्ति पढ़ा जाता है निम्नलिखित को छोड़कर सभी वस्तुओं, जिसके लिए यह केवल पढ़ने के लिए है के लिए/लिखने थीम, शीर्षक, टीआर।

+0

यह एससीआरआईपीटी ऑब्जेक्ट पर मेरे लिए भी समस्याएं पैदा करता है। –

1
+0

दिलचस्प कहानी। यह एक बड़ा सौदा नहीं है कि आईई में यह बग है। हालांकि, मैं पागल हूं कि वे कम से कम 12 वर्षों तक इस बग के बारे में जानते हैं और यह अभी भी तय नहीं है। यह आईई 8 में है। –

1

मैं किसी तालिका में लिंक का एक अलग सूची के साथ लिंक की एक सूची की जगह की समस्या से जूझ रहे की है। उपर्युक्त के रूप में, समस्या आईई और तालिका तत्वों की इसकी केवल पढ़ने वाली संपत्ति के साथ आता है।

मेरे लिए परिशिष्ट एक विकल्प नहीं था इसलिए मैंने (अंततः) यह काम किया है (जो च, एफएफ और आईई 8.0 के लिए काम करता है (अभी तक दूसरों को आजमाने की कोशिश करता है - लेकिन मुझे उम्मीद है))। मेरे लिए

replaceInReadOnly(document.getElementById("links"), "<a href>........etc</a>"); 

function replaceInReadOnly(element, content){ 
    var newNode = document.createElement(); 
    newNode.innerHTML = content; 
    var oldNode = element.firstChild; 
    var output = element.replaceChild(newNode, oldNode); 
} 

वर्क्स - मैं यह काम करता है आप

0

आप व्यवहार को संशोधित कर सकते हैं के लिए उम्मीद है। यहाँ कुछ कोड है कि IE में अन्यथा संदर्भित तत्वों का कचरा संग्रहण से बचाता है:

if (/(msie|trident)/i.test(navigator.userAgent)) { 
var innerhtml_get = Object.getOwnPropertyDescriptor(HTMLElement.prototype, "innerHTML").get 
var innerhtml_set = Object.getOwnPropertyDescriptor(HTMLElement.prototype, "innerHTML").set 
Object.defineProperty(HTMLElement.prototype, "innerHTML", { 
    get: function() {return innerhtml_get.call (this)}, 
    set: function(new_html) { 
    var childNodes = this.childNodes 
    for (var curlen = childNodes.length, i = curlen; i > 0; i--) { 
    this.removeChild (childNodes[0]) 
    } 
    innerhtml_set.call (this, new_html) 
    } 
}) 
} 

var mydiv = document.createElement ('div') 
mydiv.innerHTML = "test" 
document.body.appendChild (mydiv) 

document.body.innerHTML = "" 
console.log (mydiv.innerHTML) 

http://jsfiddle.net/DLLbc/9/

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