8

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

现在我希望,当单击页面的多个链接中的任何一个时,将添加这些参数。所以这个问题将与另一个类似(如何将参数添加到已经包含其他参数和可能是锚点的 URL),但在单击链接后才执行此操作。

我知道一个解决方案可能是更改每个链接上的onclick事件,但由于可能有数千个,没有常规的 url 格式......我正在寻找一个可以在头部脚本上的解决方案;也许与onbeforeunload事件有关。

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

4

2 回答 2

11

这将在单击时将字符串附加到包含 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/

不适用于 < IE9

于 2012-10-08T13:15:17.317 回答
1

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

MDN 上有一篇关于事件监听器的精彩文章,我相信它会对您有所帮助。特别注意关于旧版本 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});
}​
于 2012-10-08T12:09:31.010 回答