js修改url参数,无刷新更换页面url

一、js修改地址栏URL参数

    function changeURLPar(destiny, par, par_value) {
            var pattern = par + '=([^&]*)';
            var replaceText = par + '=' + par_value;
            if (destiny.match(pattern)) {
                var tmp = '/\' + par + '=[^&]*/';
                tmp = destiny.replace(eval(tmp), replaceText);
                return (tmp);
            }
            else {
                if (destiny.match('[?]')) {
                    return destiny + '&' + replaceText;
                }
                else {
                    return destiny + '?' + replaceText;
                }
            }
            return destiny + '
' + par + '
' + par_value;
        }

destiny是目标字符串,比如是http://www.huistd.com/?id=3&ttt=3 
par是参数名,par_value是参数要更改的值,调用结果如下: 
changeURLPar(test, 'id', 99); // http://www.huistd.com/?id=99&ttt=3 
changeURLPar(test, 'haha', 33); // http://www.huistd.com/?id=99&ttt=3&haha=33 

二、无刷新更换页面url

 var url = document.URL,   //获取当前页面的网址信息
     URL;
 var num = url.indexOf('#');  //获取#在的位置信息
    if (num){
           URL = url.substring(0,num);  //截取网址信息
           history.pushState(null,null,URL);  //将网址设置
      }
方法:window.history.pushState(state, title, url)
  • state:一个与添加的记录相关联的状态对象,主要用于popstate事件。该事件触发时,该对象会传入回调函数。也就是说,浏览器会将这个对象序列化以后保留在本地,重新载入这个页面的时候,可以拿到这个对象。如果不需要这个对象,此处可以填null
  • title:新页面的标题。但是,现在所有浏览器都忽视这个参数,所以这里可以填空字符串。
  • url:新的网址,必须与当前页面处在同一个域。浏览器的地址栏将显示这个网址。
 
原文地址:https://www.cnblogs.com/ziyoublog/p/9776764.html