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 在所有代码之后得到以下内容(替换在那里但似乎什么都不做):( <DL contenteditable=false> <DT>Spoiler:</DT> <DD class=codebox contenteditable=true>someTextToBeSpoiled</DD></DL>是的,那些奇怪的新行没有理由存在)
替换似乎对这些新行没有做任何事情,并且无法在输入中添加新行(由于 ie8 的不可预测性)。

应该存在的结束文本是: [spoiler]someTextToBeSpoiled[/spoiler]

这样的事情怎么解决?我整天都在纠结这个:(

4

1 回答 1

0

这变得相当骇人听闻,但我相信我找到了一个可能的解决方案。

IE8 的问题是在一些标签之后添加了 \r\n,原因我只是不明白

与规范中所说的不同,如果您使用.replace("\n", "")this不是全局替换,则 ie8 会 .replace(/\n/, "")代替.replace(/\n/gm, ""). 另外,因为它添加了一个\r\n而不仅仅是\n,所以替换是不够的,这就是让我最困惑的地方。为了获得您需要的正确替换.replace(/\r\n/mg, "")(不需要管道字符,它不是 OR,它是 \r 后跟 \n)。

最后,这可能而且可能是hackish,但据我所知,这是处理IE8及之前的方法......

通过使用.replace(/\r\n/mg, ""),我能够在 exec() 方法中获得匹配。

于 2012-08-12T11:47:32.260 回答