2012-01-23 98 views
1

我試圖在點擊頁面上的鏈接時刪除登錄頁面。該頁面不是我的,所以我試圖用用戶腳本來改變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/ 

但是ADRESS沒有按」 t在瀏覽器中工作。

這是我當前的代碼:

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

      } 
     }); 

所有幫助和建議表示讚賞。

+0

你應該使用URL解析器像['parseUri'(http://blog.stevenlevithan.com/archives/parseuri)而不是使用字符串函數來自己解析它:'parseUri(ALINK).queryKey .u' –

回答

3

您需要decode使用decodeURIComponent

更改網址:

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

要:

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

這很棒!非常感謝:) –

+0

我想他會想改變var aLink = $(this).attr('href'); instead – Jason

+0

@Jason:爲什麼在鏈接中找不到'out.php?u ='時進行'額外'解碼? – Moon

0
+0

感謝您的回答,但例子的答案將得到「接受的答案」。 –

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