使用Javascript Regex替换的IE问题

时间:2011-07-02 09:29:37

标签: javascript regex internet-explorer

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

...在IE中不起作用,但适用于所有其他浏览器。

任何想法或替代方案?

2 个答案:

答案 0 :(得分: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并准确指定你真正想要的东西。

答案 1 :(得分: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。相反,它会在需要时从解析的页面重新构建它,并且它会以不同的顺序(如属性),不同的属性或不引用属性,不同的大写,不同的间距等来放置...