下面的代码旨在为我页面上的所有<a href
标记添加两个查询字符串参数。该代码在Chrome中运行良好,但在Safari上无效。由于某些原因,在Safari浏览器上没有附加参数。 Chrome似乎运行正常。有什么想法为什么Chrome和Safari会与这些jQuery函数有不同的结果?根据我的阅读,它可能与我在$this
循环中使用.each
的方式有关。
$(document).ready(function() {
// function to get query string for given parameter
function GetQueryString(field, url) {
var href = url ? url : window.location.href;
var reg = new RegExp('[?&]' + field + '=([^&#]*)', 'i');
var string = reg.exec(href);
return string ? string[1] : null;
};
var aid = GetQueryString('affiliate'); // returns 'chicken'
var cmp = GetQueryString('campaign'); // returns 'sandwich'
var href_param;
$('a').each(function() {
if ($(this).is('[href*="?"')) {
href_param = '&';
} else {
href_param = '?';
}
var $this = $(this);
$this.attr("href", $this.attr("href") + href_param + "affiliate=" + aid + "&campaign=" + cmp);
});
});
答案 0 :(得分:0)
对于来自Url String的解析查询,此示例代码
var QueryString = function () {
// This function is anonymous, is executed immediately and
// the return value is assigned to QueryString!
var query_string = {};
var query = window.location.search.substring(1);
var vars = query.split("&");
for (var i=0;i<vars.length;i++) {
var pair = vars[i].split("=");
// If first entry with this name
if (typeof query_string[pair[0]] === "undefined") {
query_string[pair[0]] = decodeURIComponent(pair[1]);
// If second entry with this name
} else if (typeof query_string[pair[0]] === "string") {
var arr = [ query_string[pair[0]],decodeURIComponent(pair[1]) ];
query_string[pair[0]] = arr;
// If third or later entry with this name
} else {
query_string[pair[0]].push(decodeURIComponent(pair[1]));
}
}
return query_string;
};
var q = [];
$.each(QueryString(), function(k, v){
//delete the key you want with if
if(k != "affiliate"){
q.push( k +"="+ v );
}
});
// add or modify your query
q.push( "affiliate="+ YOUR_VALUE );
q.push( "campaign="+ YOUR_VALUE );
// finaly
var newPath = document.location.origin +"?"+ q.join("&");
此脚本可能能够帮助您