替换较大字符串的一小部分

时间:2010-12-07 22:42:03

标签: javascript jquery

所以我已经编写了以下代码来遍历每个Anchor,获取它的href,如果它包含旧地址,则尝试用新的地址替换旧的base。虽然这个代码与网站之前很明显存在问题,但我需要一个快速而肮脏的解决方案来解决这个问题,所以这个代码就是我想要的。

所以,下面的代码不起作用。 .Replace可能需要一个完整的匹配,所以它会在“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);
            }
        }
});

那么,有什么用呢?

提前致谢!

2 个答案:

答案 0 :(得分: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");
});

答案 1 :(得分:0)

将它们都切换为小写以进行比较,然后使用newvalue及其前后长度的newvalue + substring。 e.g。

$('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);
            }
        }
});