我正在处理一个我被要求制作的项目,它必须在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中不可用的方法使用更好的解决方案,BTW,它们可以非常快速地解决它。)
`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在所有代码之后得到以下内容(替换是存在但似乎什么都不做):
<DL contenteditable=false>
<DT>Spoiler:</DT>
<DD class=codebox contenteditable=true>someTextToBeSpoiled</DD></DL>
(是的,有那些奇怪的新线,没有理由存在)
替换似乎对这些新行没有任何作用,并且无法在输入中添加新行(由于ie8的不可预测性)。
应该存在的最终文本是:
[spoiler]someTextToBeSpoiled[/spoiler]
怎样才能解决这个问题?我一整天都在困惑:(
答案 0 :(得分:0)
这变得相当hackish但我相信我找到了一个可能的解决方案。
IE8的问题是在某些标签之后添加了\ r \ n,原因我只是不明白
与规范中的内容不同,如果您使用.replace("\n", "")
,则不全局替换,ie8
.replace(/\n/, "")
代替.replace(/\n/gm, "")
。此外,因为它添加了 \ r \ n 而不仅仅是 \ n ,这种替换还不够,这让我感到很困惑。为了获得正确的替换,你需要.replace(/\r\n/mg, "")
(不需要管道字符,它不是OR,它是\ r后跟\ n)。
最后,这可能也可能是hackish,但据我所知,这是处理IE8的方式......
通过使用.replace(/\r\n/mg, "")
,我能够在exec()方法中获得匹配。