5

私は同様の行にある他の議論を参照しました。ここにその議論へのリンクがあります。

pre 内のコードは IE8 では 1 行で表示されます

外側の HTML は正常に機能します。しかし、私の要件は内部 HTML です。外側の HTML を使用しない理由は、HTML 自体に条件がある AngularJS を使用しているためです。したがって、内容を innerHTML に追加する必要があります。

ここにHTMLがあります。

<p ng-show="preview=='text' && !file.showUploadPanel && file.fileContent!='null' && file.fileContent!='undefined'" ng-bind-html-unsafe="file.fileContent" class="pre fileContent"></p>

これをサポートしているJSは次のとおりです。

var elem = $(".pre.fileContent")[1];
if (elem.tagName == "P" && "innerHTML" in elem){
    elem.innerHTML = "<pre>" + elem.innerHTML + "</pre>";
}

"<pre>" + elem.innerHTML + "</pre>"また、スコープ変数に置き換えてみましたが、その結果、"<pre>" + $scope.file.fileContent + "</pre>";

これがIE8で発生しているエラーです。

Error: Unknown runtime errorundefined

<pre>エラーから削除するとelem.innerHTML、エラーは発生しません。また、outerHTML の場合、このエラーは表示されません。

これにどのように対処すればよいですか?

4

3 に答える 3

2

pre要素でコンテンツをラップしようとしているように見えますか? もしそうなら、あなたはこれを行うことができます:

var pre = document.createElement('pre');
while(elem.firstChild) pre.appendChild(elem.firstChild);
elem.appendChild(pre);

これには、プロパティ値とイベント ハンドラーを保持するという追加のボーナスがあります。

または、関連する要素に CSS を適用することもできます。

white-space:pre;
font-family:monospace;

<pre>編集: CSS ソリューションの方が優れている可能性があります。ブロックレベルの要素である を<p>タグ内に含めることは有効ではないと思います。

于 2013-05-09T04:54:29.033 に答える
2

私は実際に自分で答えを見つけました。私がAngularJS使用しているように、間違ったディレクティブを使用しましたng-bind-html-unsafe。に切り替えng-bind-html-unsafeたらng-bind、問題は解決しました!

みんな助けてくれてありがとう!

于 2013-05-12T03:33:42.653 に答える