0

私は作成を依頼されたプロジェクトに取り組んでおり、IE8 で期待されるのと同じように他のブラウザーでも動作する必要があります。

これは、HTML を BBCode に、またはその逆に変換するために使用されるシステムです。

私の現在の問題は、HTML を BBCode に変換することです (BBCode から HTML への変換は解決されました (希望))。

例として、翻訳するこの種の入力があります(これはスポイラーです)

<DL contenteditable=false><DT>Spoiler:</DT><DD class=codebox contenteditable=true>someTextToBeSpoiled</DD></DL>

複数の行がある場合はさらに悪いです!

<DL contenteditable=false><DT>Spoiler:</DT><DD class=codebox contenteditable=true>Line1</DD><DD class=codebox contenteditable=true>Line2</DD><DD class=codebox contenteditable=true>line3</DD></DL>

この翻訳に使用しなければならないコードは、ほとんどすべての HTML 構造で機能するジェネラリスト コードに (ちょっと) 書き換え可能である必要があるため、スポイラー タグのこの特定のコードは、他のコードと同じように機能するはずです。私はデータがそれぞれのどこにあるか知っています。

ie8でこれを解決しようとします(他の人にとっては、ie8では利用できない方法を使用してより良い解決策を使用しますが、ところで、彼らはそれを非常に速く解決します)。

` var theOuterHTML = document.createElement('div'); theOuterHTML.innerHTML = "

ネタバレ:
" + "" + "";

var searchContent = regexEscape(theOuterHTML.innerHTML).replace("<!\\-\\- !!@here1!!# \\-\\->", "(.*?)")

searchContent = searchContent.replace("\n", "");

new RegExp(searchContent, "gm").exec(param1['context'].outerHTML)[1]

`

問題は、すべてのコードの後に​​ var searchContent が次のようになることです (replace はありますが、何もしないようです): <DL contenteditable=false> <DT>Spoiler:</DT> <DD class=codebox contenteditable=true>someTextToBeSpoiled</DD></DL>(はい、存在する理由のない奇妙な新しい行があります)
replace はそれらの新しい行について何もしないように見え、入力に新しい行を追加することはできません (ie8 の予測不可能性のため)。

存在する必要がある終了テキストは次のとおりです。 [spoiler]someTextToBeSpoiled[/spoiler]

そのようなことはどのように解決できますか?私はこれに一日中戸惑いました:(

4

1 に答える 1

0

これはかなりハックになりますが、可能な解決策を見つけたと思います。

IE8の問題は、いくつかのタグの後に \r\n が追加されることです。理由はわかりません

仕様で述べられていることとは異なり、これを使用する場合、.replace("\n", "")これはグローバルな置換ではなく、ie8 が .replace(/\n/, "")代わりに.replace(/\n/gm, ""). また、 \ nだけでなく\r\nを追加するため、その置換では十分ではありません。必要な適切な置換を取得するには(パイプ文字は必要ありません。OR ではなく、\r の後に \n が続きます)。.replace(/\r\n/mg, "")

結局のところ、これはハックかもしれませんし、おそらくハックかもしれませんが、私が知る限り、それがIE8以前を扱う方法です....

を使用.replace(/\r\n/mg, "")することで、exec() メソッドで一致を得ることができました。

于 2012-08-12T11:47:32.260 に答える