2012-08-10 36 views
0

我在一个项目中工作,我被要求制作,它必须在IE8中以与预期相同的方式在其他浏览器中工作。查找与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("<!\\-\\- [email protected]!!# \\-\\->", "(.*?)") 

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

这变得相当的hackish,但我相信,我发现了一个可能的解决方案。

与IE8的问题是增加了\ r \ n一些标签是有原因的后我只是不明白

不像它在规范中说,如果你使用.replace("\n", "")这是不是全局替换,IE8的确 .replace(/\n/, "")而不是.replace(/\n/gm, "")。另外,因为它增加了一个\ r \ n而不仅仅是\ n,那个替换是不够,这就是我最困惑的事情。为了得到正确的替换,你需要.replace(/\r\n/mg, "")(不需要管道字符,它不是OR,它是\ n之后的\ r)。

最后,这可能也可能是黑客,但这是对付IE8和以前的方式,据我所知....

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