从<a href=""> just clicked</a>向网址添加参数

时间:2012-10-08 12:02:43

标签: javascript

这个场景是很多html文件,它们之间有很多链接。当我调用它们中的第一个(它将是索引)时,链接通过URL传递几个参数(我们可以称之为首选项)。

现在我想要,当点击页面的几个链接中的任何一个时,将添加这些参数。所以这个问题与其他问题类似(How to add parameters to a URL that already contains other parameters and maybe an anchor),但在点击链接后就这样做了。

我知道一个解决方案可能是在每个链接上更改 onclick 事件,但因为可能有数千个,没有常规网址格式...我我正在寻找可能在剧本上的解决方案;也许是与 onbeforeunload 事件有关的事情。

无论如何我找不到怎么做。有什么想法吗?

2 个答案:

答案 0 :(得分:9)

这会在单击时将字符串附加到包含href属性的任何内容:

window.addEventListener("click", function(e) {
    var href = e.target.getAttribute("href");
    if(href) {
        location.href = href + "?q=stackoverflow";
        e.preventDefault();
    }
});​

此处示例:http://jsfiddle.net/E5Q7P/

不适用于&lt; IE9

答案 1 :(得分:1)

我想有一种方法是在页面加载时将clickevent-listener附加到所有锚元素,而不是更改每个链接的onclick属性,或者使用onbeforeunload-event。然后,回调可以拦截浏览器的默认行为以跟随链接。然后,您可以获取刚刚单击的a元素的src属性,将所需的首选项添加到URL,然后通过将window.location.href设置为适当的位置(包括首选项)将用户发送到正确的网址。

MDN上有关于事件监听器的great aricle,我认为这对您有所帮助。 特别注意有关旧版IE

的部分

一个非常粗略的例子:

function callback(e){
  // Get the src of the clicked a-element
  var src = this.src;
  // Add preferences to the url, this need 
  // improvement depending on your needs
  src += "?somesetting=foo";
  // Send user to the url with preferences
  window.location.href = src;
}

// Get all anchors on page
var anchors = document.getElementsByTagName("a");

// Loop over the elements and attach listener
for(i=0 ; i < anchors.length ; i++){
  // Extend with support for older IE if needed
  anchors[i].addEventListener("click", callback, false});
}​