2011-11-27 80 views
0

我试图用这个函数替换一些文本(类名)。它适用于Chrome,但不适用于IE浏览器,有什么想法为什么?这是实际的网站website link问题RegExp和IE

水平菜单,它说: “住房” 应该变成灰色:

<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); 

我最终找到一个简单的方法在不同的模块中显示不同的类,所以放弃了这个尝试。感谢帮助

+0

你确定你想在这里使用正则表达式?你正在做经典的纯字符串替换。另外,你真的不应该在这里使用'innerHTML'。 –

回答

0

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

innerHTML可能是它不起作用的原因。我认为IE浏览器会产生一个不同于Chrome浏览器的HTML标头,并且你的字符串不会被发现。例如。 任何浏览器可能会序列化为标签正确(属性的顺序是不确定的!):

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

和繁荣,你的方法不再有效。

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

+0

我最终找到了在不同模块中显示不同类的简单方法,所以放弃了这个尝试。感谢您的帮助 – buzibuzi

0

这个怎么样..

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

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