如何动态更改锚标记链接?

时间:2012-01-23 23:11:46

标签: javascript jquery

当我点击页面上的链接时,我正在尝试删除目标网页。该页面不是我的,所以我试图用用户脚本更改href。

没有任何修改,链接如下所示:

https://www.domain.com/out.php?u=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DPUZ1bC-1XjA%26amp%3Bfeature%3Drelated

我想要的是什么:

http://www.youtube.com/watch?v=PUZ1bC-1XjA&feature=related

到目前为止我得到了什么:

http://www.youtube.com%2fwatch%3fv%3dpuz1bc-1xja%26amp%3bfeature%3drelated/

但该地址在浏览器中不起作用。

这是我目前的代码:

$('a').each(function(index) {
            var aLink = $(this).attr('href');
            if(aLink) {
                if(aLink.indexOf("out.php?u=") > 0) {
                    aLink = aLink.substring(51);
                    console.log(aLink);
                    $(this).attr('href', "http://"+aLink);
                    console.log($(this).prop('href'));
                }

            }
        });

所有帮助和提示表示赞赏。

3 个答案:

答案 0 :(得分:3)

您需要使用decode

decodeURIComponent网址

变化:

$(this).attr('href', "http://"+aLink);

要:

$(this).attr('href', 'http://' + decodeURIComponent(aLink));

答案 1 :(得分:0)

答案 2 :(得分:0)

您还可以使用锚元素的hostnamepathnamesearch参数。

// general function to turn query strings into objects
function deserialize_query_string(qs) {
    var params = {};
    var fields = qs.split('&');
    var field;
    for (var i=0; i<fields.length; i++) {
        field = fields[i].split('=');
        field[0] = decodeURIComponent(field[0]);
        field[1] = decodeURIComponent(field[1]);
        params[field[0]] = field[1];
    }
    return params;
}

$(document.links).each(function(i){
    if (this.hostname=='www.domain.com' && this.pathname=='/out.php') {
        var params = deserialize_query_string(this.search);
        if (params.u) {
            this.href = u;
        }
    }
});