【问题标题】:jQuery: intercepting out going link and adding parametersjQuery:拦截输出链接并添加参数
【发布时间】:2010-05-14 17:49:27
【问题描述】:

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

因此,用户点击 MyPage.aspx 并被发送到 MyPage.ASPX?Hello=True。

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

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

伊恩

【问题讨论】:

    标签: jquery


    【解决方案1】:

    如果您需要处理所有链接,请使用:

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

    【讨论】:

    • 这正是我在我们网站上所做的。奇迹般有效。当然,链接在单击之前已更改......所以这可能不是 OP 正在寻找的。​​span>
    • 更干净/更短/更好的版本: $('a').each(function(){ var sep = (href.indexOf('?') != -1) ? '&' : '?'; $(this).attr('href', href + sep + 'Hello=True'); });
    【解决方案2】:

    您可以像这样更改页面上的所有链接:

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

    【讨论】:

    • 但他想更改 URL 而不重定向。
    • @sundowatch - 第二个示例完全按照他的要求执行,“在浏览器执行操作之前,将参数 Hello=True 添加到 url”。他的意思是before跟随点击链接的current href,添加参数并重定向包括参数。
    【解决方案3】:

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

    就是这样

    【讨论】:

      【解决方案4】:

      我尝试了@arnorhs 的更简洁的版本,虽然它更简洁、更紧凑,但有一个小的代码遗漏,因为 href 应该是 this.href:

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

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

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

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

      否则帖子和 cmets 看起来都很棒,并且(最后一个)紧凑版本运行良好(没有测试其他版本)。

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

      【讨论】:

        【解决方案5】:

        这是我尝试在 url 中添加包含 url 中特定字符的参数的方法。

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

        【讨论】:

          【解决方案6】:

          如果没有重定向,您无法使用 JavaScript 更改 URL。

          你可以使用window.location=url;

          你也可能想看看这个网站:http://ajaxpatterns.org/Unique_URLs

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-10-22
            • 2018-03-15
            • 1970-01-01
            • 2011-02-13
            • 2012-10-25
            • 2021-07-18
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多