2015-11-27 22 views
28

आईई 11 में element.innerHTML के साथ मेरा बहुत अजीब व्यवहार है।आईई 11 आंतरिक HTML अजीब व्यवहार

जैसा कि आप वहां देख सकते हैं: http://pe281.s3.amazonaws.com/index.html, कुछ riotjs अभिव्यक्तियों का मूल्यांकन नहीं किया जाता है। - यह ऊपर यूरो संकेत
:

enter image description here

मैं इसे 2 बातें करने के लिए नीचे ट्रैक करने के बाद। इसे € के रूप में एन्कोड किया गया है, लेकिन मेरे पास \u20AC या € के साथ समान व्यवहार है। यह मुद्रा प्रतीकों की सीमा के सभी पात्रों, और कुछ अन्य श्रेणियों के साथ होता है। मानक चरित्र को हटाने या उपयोग करने से समस्या उत्पन्न नहीं होती है।
- जिस तरह से riotjs एक कस्टम टैग और टेम्पलेट बनाता है। मूल रूप से यह करता है:

[0]: {reward.amount.toLocaleString()} 
[1]: <span>€</span> 
[2]: { 
[3]: moment(expiracyDate).format('DD/MM/YYYY')} 

जाहिर है 2 नोड्स और 3 केवल एक ही होना चाहिए:

var html = "{reward.amount.toLocaleString()}<span>&#8364;</span>{moment(expiracyDate).format('DD/MM/YYYY')}"; 
var e = document.createElement('div'); 
e.innerHTML = html; 

जिसके परिणामस्वरूप e नोड में, e.childNodes निम्नलिखित सरणी देता है। उन्हें विभाजित करने के लिए दंगा को मूल्यांकन करने के लिए एक अभिव्यक्ति को मान्यता नहीं दी जाती है, इसलिए समस्या।

लेकिन और भी है: समस्या सुसंगत नहीं है, और उदाहरण के लिए एक पहेली पर पुन: उत्पन्न नहीं किया जा सकता है: https://jsfiddle.net/5wg3zxk5/4/, जहां HTML स्ट्रिंग सही ढंग से पार्स किया गया है।

तो मुझे लगता है कि मेरा प्रश्न यह है कि कुछ विशिष्ट वर्ण तत्व के तरीके को कैसे बदल सकते हैं .innerHTML इसके इनपुट को पार करता है? इसे कैसे हल किया जा सकता है?

+0

को दोगुना कर दिया है, जब मैं आपके प्रश्न में लिंक किए गए पृष्ठ पर जाता हूं और इसे IE11 में देखता हूं तो मैं इस समस्या को फिर से बनाने में सक्षम नहीं हूं? क्या यह हल हो गया था? –

+0

हल नहीं हुआ, लेकिन मैंने एक (गंदे) कामकाज का उपयोग किया: HTML में यूरो साइन नहीं है लेकिन एक सीएसएस की सामग्री के रूप में 'छद्म-तत्व के बाद। लिंक हमारे स्टेजिंग एनवी है, और फिक्स तैनात किया गया है। यद्यपि हल नहीं किया गया। – Antoine

+0

क्या कोई तरीका है कि हम इस त्रुटि को पुन: पेश कर सकते हैं ताकि हम यह पता लगा सकें कि क्या हो रहा है? चूंकि आपने इसे पैच किया है, इसलिए मुझे यकीन है कि यह जांचने के लिए कि क्या हो रहा है। –

उत्तर

-2

मुझे लगता है कि यह कुछ इस तरह होना चाहिए:

var html = {reward.amount.toLocaleString()} + "&euro;<br>" +{moment(expiracyDate).format('DD/MM/YYYY')} + " <br>"; 
var e = document.createElement('div'); 
e.innerHTML = html; 

सामान मैं उद्धरण से हटा चर या अन्य सामान, और न कोई स्ट्रिंग होने लगते हैं, तो यह उद्धरण में नहीं होना चाहिए। ATTRIBUTE_NODE, TEXT_NODE, CDATA_SECTION_NODE, ENTITY_REFERENCE_NODE, ENTITY_NODE, PROCESSING_INSTRUCTION_NODE, COMMENT_NODE, DOCUMENT_NODE, DOCUMENT_TYPE_NODE, DOCUMENT_FRAGMENT_NODE, NOTATION_NODE:

+1

वह सामान 'riotjs' templating इंजन का हिस्सा है, इसलिए हाँ, यह उद्धरणों में होना चाहिए। – Antoine

1

.childNodes एक उत्पन्न सरणी (... अच्छी तरह से NodeList) ELEMENT_NODE से भर जाता है, लेकिन यह भी से भरा जा सकता है ...

आप शायद चाहते ही प्रकार से नोड: ELEMENT_NODE(div और ऐसे ..) और शायद TEXT_NODE भी।

.nodeType === Element.ELEMENT_NODE के साथ केवल उन नोड्स को रखने के लिए एक साधारण पाश का उपयोग करें (या इसकी तुलना इसकी एनम से करें जो 1 है)।

आप .children के अधिक सरल विकल्प का भी उपयोग कर सकते हैं।

+0

यह लक्षणों को ठीक कर रहा है, मूल कारण के किसी सबूत नहीं। इसके अलावा, कोड में 'बाल नोड्स' का उपयोग नहीं किया जाता है, यह केवल समस्या को दिखाने के लिए है। – Antoine

0

के साथ <br> बदलें (वे स्वयं बंद टैग हैं)। आईई आपके लिए टैग बंद करने की कोशिश कर रहा है।यही कारण है कि आपने br टैग

+0

इसका '
' से कोई लेना देना नहीं है। 'Br' के बिना अपडेट किए गए उदाहरण के साथ मेरा संपादन देखें, लेकिन फिर भी समस्या। – Antoine