28

IE11 の element.innerHTML で非常に奇妙な動作をします。

http://pe281.s3.amazonaws.com/index.htmlでわかるように、一部のriotjs式は評価されません。

ここに画像の説明を入力

私はそれを2つのことまで追跡しました:
- その上のユーロ記号。としてエンコードされていますが、 or€と同じ動作をしています。これは、通貨記号の範囲内のすべての文字と、その他の範囲の一部で発生します。標準文字を削除または使用しても問題は発生しません。 -カスタムタグとテンプレートを作成する方法。基本的にはこれを行います:\u20AC€
riotjs

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、次の配列を返します。

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

明らかに、ノード 2 と 3 は 1 つだけである必要があります。それらを分割すると、暴動が評価する式を認識しないため、問題が発生します。

しかし、それ以上の問題があります。問題は一貫しておらず、たとえば、https ://jsfiddle.net/5wg3zxk5/4/ というフィドルでは再現できません。ここでは、html 文字列が正しく解析されています。

だから私の質問は、特定の文字が element.innerHTML がその入力を解析する方法をどのように変更できるかということだと思いますか? どうすれば解決できますか?

4

3 に答える 3

1

.childNodes生成された配列 (... まあ NodeList) であり、次のELEMENT_NODEもので埋められます: ATTRIBUTE_NODETEXT_NODECDATA_SECTION_NODEENTITY_REFERENCE_NODEENTITY_NODEPROCESSING_INSTRUCTION_NODECOMMENT_NODEDOCUMENT_NODEDOCUMENT_TYPE_NODE、...DOCUMENT_FRAGMENT_NODENOTATION_NODE

タイプのノードのみが必要になる可能性があります: (div など..)および.ELEMENT_NODE TEXT_NODE

単純なループを使用して、それらのノードのみを保持します.nodeType === Element.ELEMENT_NODE(または、それをその列挙型と比較します1)。

のはるかに単純な代替手段を使用することもできます.children

于 2015-12-02T01:05:07.783 に答える
0

(自己終了タグです) に<br>置き換えます。<br />IE がタグを閉じようとしています。brタグが二重になっているのはそのためです

于 2015-12-02T10:02:39.050 に答える
-2

私はそれが次のようなものであるべきだと思います:

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

引用符から削除したものは、変数またはその他のものであり、文字列ではないように見えるため、引用符で囲む必要はありません。

于 2015-12-01T22:19:43.733 に答える