2012-08-10 55 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()方法中獲得匹配。