jQuery:拦截去链接和添加参数

时间:2010-05-14 17:49:28

标签: jquery

当用户点击我页面上的链接时,我需要在浏览器执行操作之前,将该参数Hello = True添加到网址。

因此,用户单击MyPage.aspx并将其发送到MyPage.ASPX?Hello = True。

必须是客户端,最好使用jQuery

如果需要,我可以为标签添加属性。

伊恩

6 个答案:

答案 0 :(得分:11)

如果您需要操纵所有链接,请使用:

$('a').each(function() {
  var href = this.href;
  if (href.indexOf('?') != -1) {
    href = href + '&Hello=True';
  }
  else {
    href = href + '?Hello=True';
  }
  $(this).attr('href', href);
});

答案 1 :(得分:10)

您可以更改网页上的所有链接:

$("a").each(function() {
    $(this).attr("href", $(this).attr("href") + '?Hello=True'));
});

如果您想在点击超链接时使用这些添加的参数重定向用户,请使用以下命令:

$("a").click(function(e) {
    e.preventDefault();
    window.location.href = $(this).attr("href") + '?Hello=True';
});

答案 2 :(得分:4)

@Jan Willem B版本的清洁/更短/更好版本:

$('a').each(function(){ 
    var sep = (this.href.indexOf('?') != -1) ? '&' : '?'; 
    $(this).attr('href', href + sep + 'Hello=True'); 
});

您也可以将语句放在一行中,牺牲可读性:

$('a').each(function(){ 
    $(this).attr('href', href + ((this.href.indexOf('?')!=-1)?'&':'?') + 'Hello=True'); 
});

就是那个

答案 3 :(得分:0)

我尝试了@arnorhs的清洁版本,虽然它更干净,更紧凑,但由于href应该是this.href,因此会有一些细微的代码遗漏:

<1.7> (/usr/lib/jvm/java-1.7.0-openjdk-amd64)

$('a').each(function(){ 
    var sep = (this.href.indexOf('?') != -1) ? '&' : '?'; 
    $(this).attr('href', this.href + sep + 'Hello=True'); 
});

在类似的情况下,在@Jan Willem B的帖子中评论的更紧凑的版本有两次这个小问题,应该阅读:

$('a').each(function(){ 
    $(this).attr('href', this.href + ((this.href.indexOf('?')!=-1)?'&':'?') + 'Hello=True'); 
});

否则,帖子和评论看起来都很棒,而且(最后)紧凑版本效果很好(没有测试其他版本)。

注意:由于声誉点阈值,我不得不发表评论。 HTH。

答案 4 :(得分:0)

以下是我尝试在url中添加包含url中特定字符的参数的内容。

[jsfiddle]: http://jsfiddle.net/nasabikram/prswd16k/2/

答案 5 :(得分:-1)

如果不重定向,则无法使用JavaScript更改网址。

您可以使用window.location=url;

您也可以查看此网站:http://ajaxpatterns.org/Unique_URLs