RegExp和IE的问题

时间:2011-11-27 10:15:21

标签: javascript

我正在尝试使用此函数替换一些文本(类名)。它适用于Chrome但不适用于IE,任何想法为什么?这是实际的网站website link

它所说的“住房”的水平菜单应该变为灰色:

<li class="mainlevel_active-fade" id="menuitem_1-fade">

应该成为

<li class="mainlevel-fade" id="menuitem_1-fade">

JavaScript的:

var divText = "";
var toReplace = '<li class="mainlevel_active-fade" id="menuitem_1-fade">';
var replacement = '<li class="mainlevel-fade" id="menuitem_1-fade">';

function findMyText(toReplace, replacement) {

     if (divText.length == 0) {
          divText = document.getElementById("header-left-b").innerHTML;
     }
     var re = new RegExp(toReplace, "ig");     
     var replaced = "";
     if (replacement.length > 0) {
          replaced = divText.replace(re, replacement);
     }
     else {
          var Text = "<div>" + toReplace + "</div>";
          replaced = divText.replace(re, Text);
     }
     document.getElementById("header-left-b").innerHTML = replaced;
}

findMyText(toReplace, replacement);

我最终找到了一种在不同模块中显示不同类的简单方法,因此放弃了这种尝试。谢谢你的帮助

2 个答案:

答案 0 :(得分:0)

你确定要在这里使用正则表达式吗?您正在进行经典的纯字符串替换。另外,你真的不应该在这里使用innerHTML

innerHTML可能是它不起作用的原因。我假设IE将生成与Chrome标题不同的标题HTML表示,然后找不到您的字符串。例如。 任何浏览器都可能正确序列化标记(属性的顺序未定义!):

<li id="menuitem_1-fade" class="mainlevel_active-fade">

繁荣,你的方法不再适用。

使用DOM而不是字符串操作。它更快,更可靠。

答案 1 :(得分:0)

这个怎么样..

my_li = document.getElementById('menuitem_1-fade');

my_li.className -= 'mainlevel_active-fade';
my_li.className += 'mainlevel-fade';