我正在一个项目中工作,我被要求制作,它必须在其他浏览器中以与 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]
这样的事情怎么解决?我整天都在纠结这个:(