这个场景是很多html文件,它们之间有很多链接。当我调用它们中的第一个(它将是索引)时,链接通过URL传递几个参数(我们可以称之为首选项)。
现在我想要,当点击页面的几个链接中的任何一个时,将添加这些参数。所以这个问题与其他问题类似(How to add parameters to a URL that already contains other parameters and maybe an anchor),但在点击链接后就这样做了。
我知道一个解决方案可能是在每个链接上更改 onclick 事件,但因为可能有数千个,没有常规网址格式...我我正在寻找可能在剧本上的解决方案;也许是与 onbeforeunload 事件有关的事情。
无论如何我找不到怎么做。有什么想法吗?
答案 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/
不适用于< 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});
}