用于替换href值的Attr()不能在Safari浏览器中工作

时间:2016-06-27 17:29:19

标签: javascript jquery

下面的代码旨在为我页面上的所有<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);
  });
});

1 个答案:

答案 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("&");

此脚本可能能够帮助您