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 + '\n' + par + '\n' + 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
:新的网址,必须与当前页面处在同一个域。浏览器的地址栏将显示这个网址。