2010-12-07 40 views
0

所以我已經寫了下面的代碼來通過每個錨,得到它的href,如果它包含舊地址,嘗試用新的替換舊的基地。雖然在網站代碼很久之前存在一個明顯的問題,但我需要一個快速和骯髒的解決方案來解決這個問題,所以這段代碼就是我要做的。替換一個較大的字符串的一小塊

所以,下面的代碼不起作用。更換顯然需要一個完整的匹配,所以它會在「foo is good」中找到「foo」,而在「fooIsGood」中找到「foo」。

$('a').each(function() { 
    var addressSwitch = $(this).attr("href"); 
    if (addressSwitch){ 
     var test = addressSwitch.indexOf("http://www.oldaddress.com"); 
     if (test == 0){ 
      addressSwitch.replace("http://www.oldaddress.com/", "www.newaddress.com"); 
      $(this).attr("href" , addressSwitch); 
      } 
     } 
}); 

那麼,什麼工作?

在此先感謝!

+0

嗯......`replace()`應該正確匹配。 – matthewpavkov 2010-12-07 22:46:13

+0

你需要一個正則表達式模式這就是它,給我幾分鐘,我會post..some邏輯 – kobe 2010-12-07 22:47:06

回答

0

切換他們兩個小寫的比較,然後使用NEWVALUE的長度NEWVALUE +子和向前。例如

$('a').each(function() { 
    var replacer = "http://www.oldaddress.com"; 
    var addressSwitch = $(this).attr("href"); 
    if (addressSwitch){ 
     var test = addressSwitch.toLowerCase().indexOf(replacer); 
     if (test == 0){ 
      addressSwitch = replacer + addressSwitch.subString(replacer.length); 
      $(this).attr("href" , addressSwitch); 
      } 
     } 
}); 
2

.replace()正常工作,但你不分配被替換的值,它需要:

addressSwitch = addressSwitch.replace("http://www.oldaddress.com/", "www.newaddress.com"); 

記住.replace()不改變原來的字符串,它返回一個新的使用價值取代。

記住.attr()還需要一個功能,所以你可以苗條你的代碼到這一點:

$('a[href^="http://www.oldaddress.com"]').attr("href", function(i, href) { 
    return href.replace("http://www.oldaddress.com/", "www.newaddress.com"); 
}); 
相關問題