2011-11-27 110 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';