IE11 で element.innerHTML の動作が非常に奇妙です。
ご覧のとおり:出典: amazonaws.com一部のriotjs
式は評価されません。
原因は 2 つに絞られました:
- その上にあるユーロ記号。これは としてエンコードされていますが、または€
でも同じ動作をします。これは通貨記号範囲のすべての文字、および他の範囲で発生します。標準文字を削除または使用しても問題は発生しません。- 方法はカスタム タグとテンプレートを作成します。基本的には次のようになります:\u20AC
€
riotjs
var html = "{reward.amount.toLocaleString()}<span>€</span>{moment(expiracyDate).format('DD/MM/YYYY')}";
var e = document.createElement('div');
e.innerHTML = html;
結果のe
ノードでは、e.childNodes
次の配列が返されます。
[0]: {reward.amount.toLocaleString()}
[1]: <span>€</span>
[2]: {
[3]: moment(expiracyDate).format('DD/MM/YYYY')}
明らかに、ノード 2 と 3 は 1 つだけである必要があります。これらを分割すると、評価する式が認識されなくなり、問題が発生します。
しかし、それだけではありません。この問題は一貫しておらず、たとえばフィドルでは再現できません。https://jsfiddle.net/5wg3zxk5/4/、HTML 文字列が正しく解析されます。
私の質問は、特定の文字によって element.innerHTML が入力を解析する方法がどのように変わるのか、ということだと思います。どうすれば解決できるでしょうか?
ベストアンサー1
.childNodes
は、生成された配列 (... NodeList) であり、次の値で埋められますが、次のELEMENT_NODE
値で埋められる場合もあります: 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
おそらくあなたはノードのみタイプから:ELEMENT_NODE
(divとか)そしておそらくまたTEXT_NODE
。
単純なループを使用して、 を持つノードだけを保持します.nodeType === Element.ELEMENT_NODE
(または、 である列挙型と比較します1
)。
よりシンプルな代替手段である を使用することもできます.children
。