Victor Bjelkholm
Victor Bjelkholm

Reputation: 2216

How to dynamically change the anchor tag link?

I'm trying to remove a landing page when I click on a link on a page. The page isn't mine so I'm trying to change the href with a user script.

Without any modification, the link looks like this:

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

What I want:

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

What I got so far:

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

But that adress doesn't work in the browser.

This is my current code:

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

            }
        });

All help and tips are appreciated.

Upvotes: 1

Views: 396

Answers (3)

Francis Avila
Francis Avila

Reputation: 31621

You can also make use of the hostname, pathname, and search parameters of anchor elements.

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

Upvotes: 0

Moon
Moon

Reputation: 35265

You need to decode the URL using decodeURIComponent

Change:

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

To:

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

Upvotes: 3

yas
yas

Reputation: 3620

Take a look at decodeURIComponent

Upvotes: 0

Related Questions