2011-07-02 48 views
0
r = r.replace(/<TR><TD><\/TD><\/TR>/gi, rider_html); 

...在IE中不起作用,但在所有其他瀏覽器中起作用。IE正在更新中,請稍候...正則表達式替換

任何意見或方案?

+1

是什麼'r'樣子? – alex

+1

*「在IE中不起作用」*是什麼意思?什麼「不起作用」?使用正則表達式在**瀏覽器中處理HTML似乎......很奇怪。爲什麼不將HTML轉換爲DOM?這是超級容易在瀏覽器中...... –

+0

[你不能解析(X)HTML使用正則表達式(http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained標籤都有效/ 1732454#1732454)。在瀏覽器中這樣做是沒有意義的。只需使用DOM(或由jQuery提供的封裝)即可。 – You

回答

0

我來的變量R不能有它,你期待,因爲正則表達式替換應正常工作,如果確實有匹配值的結論。您可以在this jsFiddle中看到,如果「r」實際上與它匹配,則替換工作正常。

這是從小提琴的代碼並將其顯示在IE中適當的更換。

var r = "aa<TR><TD></TD></TR>bb"; 
var rider_html = " foo "; 

r = r.replace(/<TR><TD><\/TD><\/TR>/gi, rider_html); 
alert(r); 

所以,我們真的不能走得更遠不知道是什麼的「R」的值和診斷從哪裏來或瞭解更具體的瞭解,你在運行IE的版本的東西(在這種情況下,你可以自己試試那個版本的小提琴)。

如果R從文件的HTML來了,然後在其上字符串匹配是一件壞事,因爲IE不保留原有的HTML左右。相反,從解析頁面需要時重新組成它,它把一些事情在不同的順序(如屬性),不同的或沒有引號的屬性,不同資本,不同的間距,等等

+0

您不應該使用'innerHTML'添加表格結構。 – lonesomeday

+0

是的,我通常不會因爲很多原因而使用表格。我已經在不同的方向編輯我的文章,因爲原始文章真的只是顯示字符串操作,而不是DOM操作。 – jfriend00

0

你可以做這樣的事情:

var rows = document.getElementsByTagName('tr'); 
for (var i = 0; i < rows.length; i++) { 
    var children = rows[i].children; 
    if (children.length === 1 && children[0].nodeName.toLowerCase() === 'td') { 
     children[0].innerHTML = someHTMLdata 
    } 
} 

注意,這將表格單元格的值,而不是替換整行。如果你想做其他的事情,你必須使用DOM方法而不是innerHTML,並確切地指定你真正想要的。