如何用jquery替换锚链接的参数?

Posted

技术标签:

【中文标题】如何用jquery替换锚链接的参数?【英文标题】:how to replace the parameters of an anchor link with jquery? 【发布时间】:2012-05-07 08:28:33 【问题描述】:

我现在正在学习 jquery。我想在页面加载时用另一个 url 的参数替换。例如这是我的代码

 <div class="changeparam">
<a href="http://demo.org/post.php?i=123&p=456&s=789">Link</a>
 </div> 

现在我需要将参数 i、p 和 s 的值分别更改为不同的值,例如 abc、def、ghi。如何在页面加载时做到这一点?

【问题讨论】:

虽然这是可能的,但并不理想。 Url 在哪里生成?你不能在那个级别改变它吗? @RoryMcCrossan:可以在 URL 生成级别更改。但问题是我们必须缓存页面内容。所以下次另一个用户加载内容时,缓存会被加载。因此,这可能会导致传递有关用户和内容的错误信息。 在这种情况下,您应该考虑修复您的缓存系统。 @RoryMcCrossan:你有什么建议吗?如何替换缓存文件中的参数? 【参考方案1】:

尝试使用jQuery BBQ 插件。它使处理查询字符串的问题大大减少。

我想你会想试试

$(document).ready(function()
    $.param.querystring($(".changeparam").attr("href"), i:123, p:456, s:789)
);

它有很多很酷的东西来处理查询字符串,你不必在这里重新发明***。

【讨论】:

【参考方案2】:

您需要了解旧值吗?如果不是,你不能按照以下方式做一些事情(假设所有链接都具有相同的查询字符串,如果不是这种情况,则需要扩展):

$(document).ready( function ( ) 
    // Get the full address from the original link
    var old_fulladdr = $('div.changeparam a').attr('href');

    // split it to get the actual file address
    var old_addr_parts = old_fulladdr.split('?');

    // This may need something more complex...
    var new_querystring = 'i=abc&p=def&g=ghi';

    // This changes the href of the link to the new one.
    $('div.changeparam a').attr('href',old_addr_parts[0] + '?' + new_querystring);

);​

更新: 我创建了一个更灵活的函数,它接受一个查询字符串、一个要替换的项目数组和一个替换值数组,然后输出一个新的查询字符串。看看这个 jsfiddle:http://jsfiddle.net/LWzZR/1

另外,我同意评论者对您的问题的看法 - 虽然有可能,但不推荐 :)

【讨论】:

我不需要旧参数。我只想在页面加载时刷新参数。如果我只想刷新一个参数怎么办? 给我5分钟,我会拉小提琴的。 谢谢。请考虑该选项,以便在需要时我可以保持“i”的值相同并仅更改“p”和“s”。 请查看我刚刚在答案中链接的 jsfiddle。 非常感谢。那个小提琴奏效了。现在的问题是我的站点中有多个这样的 div,它们都具有相同的类名。现在,当我运行 jquery 脚本时,它会将所有链接替换为第一个链接。如何为单个链接运行它?

以上是关于如何用jquery替换锚链接的参数?的主要内容,如果未能解决你的问题,请参考以下文章

如何用JavaScript替换数组中间隔多个参数

在C++中,如何用不同长度的字符串替换一个命令行参数。

如何用策略替换(而不仅仅是移动)条件逻辑?

如何用 jQuery 替换 innerHTML?

来自锚链接的短信 - Html5 Iphone

强制由锚链接的视频在 iPad 上全屏播放