虽然可以通过get方式提交post表单等方式来动态修改url,但如果多个按钮能并行提交时,写多个大体相同,又有些细节差异的表单,难免有些不妥,因此,想到了通过JS来动态的修改url,来实现对url的增删查改。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
<script>
var LG=( function (lg){
var objURL= function (url){
this .ourl=url||window.location.href;
this .href= "" ; //?前面部分
this .params={}; //url参数对象
this .jing= "" ; //#及后面部分
this .init();
}
//分析url,得到?前面存入this.href,参数解析为this.params对象,#号及后面存入this.jing
objURL.prototype.init= function (){
var str= this .ourl;
var index=str.indexOf( "#" );
if (index>0){
this .jing=str.substr(index);
str=str.substring(0,index);
}
index=str.indexOf( "?" );
if (index>0){
this .href=str.substring(0,index);
str=str.substr(index+1);
var parts=str.split( "&" );
for ( var i=0;i<parts.length;i++){
var kv=parts[i].split( "=" );
this .params[kv[0]]=kv[1];
}
}
else {
this .href= this .ourl;
this .params={};
}
}
//只是修改this.params
objURL.prototype.set= function (key,val){
this .params[key]=val;
}
//只是设置this.params
objURL.prototype.remove= function (key){
this .params[key]=undefined;
}
//根据三部分组成操作后的url
objURL.prototype.url= function (){
var strurl= this .href;
var objps=[]; //这里用数组组织,再做join操作
for ( var k in this .params){
if ( this .params[k]){
objps.push(k+ "=" + this .params[k]);
}
}
if (objps.length>0){
strurl+= "?" +objps.join( "&" );
}
if ( this .jing.length>0){
strurl+= this .jing;
}
return strurl;
}
//得到参数值
objURL.prototype.get= function (key){
return this .params[key];
}
lg.URL=objURL;
return lg;
}(LG||{}));
var myurl= new LG.URL(window.location.href);
myurl.remove( "b" ); //删除了b
alert(myurl.get ( "a" )); //取参数a的值,这里得到1
myurl.set( "a" ,23); //修改a的值为23
alert (myurl.url());
</script>
|