在与IE8兼容的文档片段中查找数据

时间:2012-08-10 22:37:04

标签: javascript internet-explorer-8 bbcode

我正在处理一个我被要求制作的项目,它必须在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 =“

Spoiler:
”+“”+“”;

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]

怎样才能解决这个问题?我一整天都在困惑:(

1 个答案:

答案 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()方法中获得匹配。