【问题标题】:Whats a cleaner way to append something to a link URL?将某些内容附加到链接 URL 的更简洁的方法是什么?
【发布时间】:2013-02-05 16:08:27
【问题描述】:

到目前为止,我已经得到了这段代码,但它不起作用:

$('.passName').click(function(){
    var schoolName = "18734";
    var link = $(this).attr('href');
    var newLink = link + schoolName;
    $(this).attr('href') = newLink;
});

【问题讨论】:

  • $(this).attr('href') = newLink; 出错
  • 了解它的使用方式和不工作的情况会有所帮助。
  • 点击改变链接的问题是,如果你打开另一个标签,你的链接将会增长......
  • 试试这个速记:$(this).attr('href', $(this).attr('href') + '18734')
  • @watson:这不是你使用.attr的方式。

标签: javascript jquery jquery-selectors jquery-attributes


【解决方案1】:

执行以下操作:

$(this).attr('href', newLink);

【讨论】:

  • ...或者只是this.href = newLink;,在这种情况下。
【解决方案2】:

您的方法存在问题:您每次点击时都会将 schoolName 附加到 URL,即使用户定位到另一个选项卡也是如此。

所以我建议不要弄乱href 属性,而是在点击时执行操作:

   $('.passName').click(function(){
            location.href = this.href + "18734";
   });

或者至少检查一下你之前没有添加它:

   $('.passName').click(function(){
       var schoolName = "18734";
       var link = this.href;
       if (link.indexOf(schoolName, link.length - schoolName.length)!==-1) {
           this.href = link+schoolName
       }
   });

或者,按照 Felix Kling 的建议,只需确保该函数只被调用一次:

   $('.passName').one('click', function(){
       this.href += "18734"
   });

【讨论】:

  • @VisioN 我知道,但这似乎更合理:)
  • 太棒了...这就是为什么我会关注您的答案..!!
  • 或者使用.one而不是.click,只执行一次处理程序。
  • @FelixKling ...这看起来是个不错的答案...注意写得正确吗?
  • 这不会破坏Ctrl-click 在新标签页中打开内容吗?
【解决方案3】:

在 Simple 中,这样做:-

$('.passName').click(function() {
    $(this).attr('href', this.href+'18734');
});

【讨论】:

  • 在一个地方使用普通的this 有什么好处——但在另一个地方不行,我想知道吗?只写this.href += '18734' 就可以了。
【解决方案4】:

你实际上不需要创建一个新的 jQuery 对象,你可以简单地拥有:

$('.passName').click(function() {
   var schoolName = "18734";
   this.href += schoolName;
});

库和 jQuery 一样有用,但我们不应该忘记纯 JavaScript 和 DOM。

另外,在 JS 中,你不能像你所做的那样真正为函数调用“分配”一些东西;在jQuery中设置属性值的方式是$(this).attr('attr', newLink)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    相关资源
    最近更新 更多