1楼 myy (
)

回复于
2005-01-17 10:04:12 得分
0
另外,url中可能没有“myparam=30”,则直接加入进去,
url其他的参数都要原封不动,顺序可以打乱。
Top
2楼 ufrshchenw (
tchanway)

回复于
2005-01-17 10:12:45 得分
1
eval("http://aaa.bbb.com/a.jsp?"+p+"="+v+"&xx=33")
Top
3楼 myy (
)

回复于
2005-01-17 10:18:35 得分
0
ufrshchenw(tchanway) 的方法没看懂,也可能是我没说清楚吧。
我是想把原来的url中后面的指定的 “参数=值”换成“参数=新值”,如果没有,就加进去。
Top
4楼 myy (
)

回复于
2005-01-17 10:20:51 得分
0
eval() 是把字符串当表达式执行,
"http://aaa.bbb.com/a.jsp?"+p+"="+v+"&xx=33"
执行后,返回什么呢?
Top
5楼 czcty (
peter)

回复于
2005-01-17 10:27:03 得分
1
Top
6楼 lawyu (
雨淋漓)

回复于
2005-01-17 10:36:05 得分
1
var a;
a="ttp://aaa.bbb.com/a.jsp?"+p+"="+v+"&xx=33";
不行吗?
这样a应该就是http://aaa.bbb.com/a.jsp?myparam=30&xx=33
Top
7楼 myy (
)

回复于
2005-01-17 10:45:08 得分
0
我倒,看来我的表达能力确实差 :-(
再说详细点吧:
这是原来的url的可能情况:
http://aaa.bbb.com/a.jsp
http://aaa.bbb.com/a.jsp?
http://aaa.bbb.com/a.jsp?xx=33
http://aaa.bbb.com/a.jsp?xx=33&yy=99
http://aaa.bbb.com/a.jsp?myparam=30&xx=33&yy=99
http://aaa.bbb.com/a.jsp?xx=33&yy=99&myparam=30
....
现在给定:
var p="myparam"; //这是个字符串
var v=22; //这是个数字
经过处理后,原来的url应该变成下面的新url:
http://aaa.bbb.com/a.jsp?myparam=22
http://aaa.bbb.com/a.jsp?myparam=22
http://aaa.bbb.com/a.jsp?xx=33&myparam=22
http://aaa.bbb.com/a.jsp?xx=33&yy=99&myparam=22
http://aaa.bbb.com/a.jsp?myparam=22&xx=33&yy=99
http://aaa.bbb.com/a.jsp?xx=33&yy=99&myparam=22
如果给定:
var p="xx"; //这是个字符串
var v=22; //这是个数字
经过处理后,原来的url应该变成下面的新url:
http://aaa.bbb.com/a.jsp?xx=22
http://aaa.bbb.com/a.jsp?xx=22
http://aaa.bbb.com/a.jsp?xx=22
http://aaa.bbb.com/a.jsp?xx=22&yy=99
http://aaa.bbb.com/a.jsp?myparam=30&xx=22&yy=99
http://aaa.bbb.com/a.jsp?xx=22&yy=99&myparam=30
----------------------------------------
这会应该说清楚了吧?
Top
8楼 myy (
)

回复于
2005-01-17 10:52:21 得分
0
算了,自己搞定了:
var p="myparam"; //这是个字符串
var v=22; //这是个数字
var url="http://aaa.bbb.com/a.jsp?myparam=30&xx=33&yy=99"
var reg=new RegExp(p+"="+"\\d*","g");
url=url.replace(reg,p+"="+v);
alert(url);
考虑得可能是不太全面,但能用了,欢迎高手请提建议,谢谢!
也谢谢上面的各位。
Top
9楼 boneeater (
狗狗)

回复于
2005-01-17 11:01:36 得分
1
楼主用正则表达式的方法不错啊,但是为什么不直接写成http://aaa.bbb.com/a.jsp?"+p+"="+v+"&xx=33"呢?
Top
10楼 fl99 (
笨笨)

回复于
2005-01-17 11:05:29 得分
1
Top
11楼 myy (
)

回复于
2005-01-17 11:08:04 得分
0
因为:
我!@#$%^&*,请仔细看看上面我的详细说明。
改进了一下,这是完整的函数:
function doGotoPage(to,pn)
{
var p=parseInt(to);
if(isNaN(p)) return;
var h=window.location.href;
var s=window.location.search;
if(!s)
{
window.location.href=h+"?"+pn+"="+p;
return;
}
if(s=="?")
{
window.location.href=h+pn+"="+p;
return;
}
var reg=new RegExp(pn+"="+"\\d*","g");
if(reg.test(h))
h=h.replace(reg,pn+"="+p); //alert(h);
else
h=h+"&"+pn+"="+p;
window.location.href=h;
}
Top
12楼 meizz (
梅花雪)

回复于
2005-01-17 11:20:22 得分
90
你的替换正则确实不是很准确, 改一下先.
有则替换, 无则添加! :)
Top
13楼 wen1818 (
冷月孤心)

回复于
2005-01-17 13:06:14 得分
0
http://aaa.bbb.com/a.jsp?"+p+"="+v+"&xx=33"
Top
14楼 myy (
)

回复于
2005-01-17 13:55:46 得分
0
十分谢谢meizz(梅花雪)前辈!
to wen1818(冷月孤心) ,以及类似回答的所有人:
谢谢你们的热心,但请看清楚我的要求先。
Top
15楼 liaohaiying (
小菜)

回复于
2005-01-17 14:22:03 得分
5
meizz(梅花雪),强,晕,看到你的答案才知道我自己想到的有多少的落后(逻辑一样,但方法却要烦N倍)。
顶一下!
领教了!
Top
16楼 myy (
)

回复于
2005-01-17 14:58:23 得分
0
var reg = new RegExp("(^|&|\\?)("+ name +"=)([^&]*)(&|$)");
meizz(梅花雪)前辈的这个表达式允许直接是字符串开头部分,
但实际的url不会前面什么都没有吧?
也许这样更好:
var reg = new RegExp("(&|\\?)("+ name +"=)([^&]*)(&|$)");
Top
17楼 meizz (
梅花雪)

回复于
2005-01-17 15:05:06 得分
0
this.substr(this.indexOf("?")+1) 我匹配的是从URL里的 ? 号部分开始的.
Top