简单问题:js中动态字符串替换如何写? 另外,url中可能没有“myparam=30”,则直接加入进去,url其他的参数都要原封不动,顺序可以打乱。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 eval("http://aaa.bbb.com/a.jsp?"+p+"="+v+"&xx=33") ufrshchenw(tchanway) 的方法没看懂,也可能是我没说清楚吧。我是想把原来的url中后面的指定的 “参数=值”换成“参数=新值”,如果没有,就加进去。 eval() 是把字符串当表达式执行,"http://aaa.bbb.com/a.jsp?"+p+"="+v+"&xx=33"执行后,返回什么呢? <script>var p="myparam"; //这是个字符串var v=30; //这是个数字var url="http://aaa.bbb.com/a.jsp?"+p+"="+v+"&xx=33";//alert(url);</script> var a;a="ttp://aaa.bbb.com/a.jsp?"+p+"="+v+"&xx=33";不行吗?这样a应该就是http://aaa.bbb.com/a.jsp?myparam=30&xx=33 我倒,看来我的表达能力确实差 :-(再说详细点吧:这是原来的url的可能情况:http://aaa.bbb.com/a.jsphttp://aaa.bbb.com/a.jsp?http://aaa.bbb.com/a.jsp?xx=33http://aaa.bbb.com/a.jsp?xx=33&yy=99http://aaa.bbb.com/a.jsp?myparam=30&xx=33&yy=99http://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=22http://aaa.bbb.com/a.jsp?myparam=22http://aaa.bbb.com/a.jsp?xx=33&myparam=22http://aaa.bbb.com/a.jsp?xx=33&yy=99&myparam=22http://aaa.bbb.com/a.jsp?myparam=22&xx=33&yy=99http://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=22http://aaa.bbb.com/a.jsp?xx=22http://aaa.bbb.com/a.jsp?xx=22http://aaa.bbb.com/a.jsp?xx=22&yy=99http://aaa.bbb.com/a.jsp?myparam=30&xx=22&yy=99http://aaa.bbb.com/a.jsp?xx=22&yy=99&myparam=30----------------------------------------这会应该说清楚了吧? 算了,自己搞定了: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);考虑得可能是不太全面,但能用了,欢迎高手请提建议,谢谢!也谢谢上面的各位。 楼主用正则表达式的方法不错啊,但是为什么不直接写成http://aaa.bbb.com/a.jsp?"+p+"="+v+"&xx=33"呢? <script>var p="myparam"; //这是个字符串var v=30; //这是个数字var url="http://aaa.bbb.com/a.jsp?"+p+"="+v+"&xx=33";//alert(url);</script> 因为:我!@#$%^&*,请仔细看看上面我的详细说明。改进了一下,这是完整的函数: 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; } 你的替换正则确实不是很准确, 改一下先.<SCRIPT LANGUAGE="JavaScript"><!--String.prototype.setQuery = function(name, value){ var reg = new RegExp("(^|&|\\?)("+ name +"=)([^&]*)(&|$)"); var r = this.substr(this.indexOf("?")+1).match(reg); if (r!=null) return this.replace(reg, "$1$2"+ value +"$4"); else return this + (this.indexOf("?")>-1 ? "&" : "?")+ name +"="+ value}//var url = "http://aaa.bbb.com/a.jsp?xx=22";//var url = "http://aaa.bbb.com/a.jsp?xx=22&yy=99";var url = "http://aaa.bbb.com/a.jsp?myparam=30&xx=22&yy=99";//var url = "http://aaa.bbb.com/a.jsp?xx=22&yy=99&myparam=30";var p="myparam";var v=22;alert(url.setQuery(p, v));//--></SCRIPT>有则替换, 无则添加! :) http://aaa.bbb.com/a.jsp?"+p+"="+v+"&xx=33" 十分谢谢meizz(梅花雪)前辈!to wen1818(冷月孤心) ,以及类似回答的所有人:谢谢你们的热心,但请看清楚我的要求先。 meizz(梅花雪),强,晕,看到你的答案才知道我自己想到的有多少的落后(逻辑一样,但方法却要烦N倍)。顶一下!领教了! var reg = new RegExp("(^|&|\\?)("+ name +"=)([^&]*)(&|$)");meizz(梅花雪)前辈的这个表达式允许直接是字符串开头部分,但实际的url不会前面什么都没有吧?也许这样更好:var reg = new RegExp("(&|\\?)("+ name +"=)([^&]*)(&|$)"); this.substr(this.indexOf("?")+1) 我匹配的是从URL里的 ? 号部分开始的. jquery高手进,求指教!! EXT 使用accordion布局没有竖向滚动条 [下载]google的自动完成代码示例 验证多个文本框和checkbox的表单 如何将 WEBPLAYER 嵌入到自己的Page中? 如何判断prompt()没有输入 加载背景,如何使固定? javascript 哪个函数能把非时间型的数据转为时间型的? 字符串 拆分拼接 『难题, 求解』IE通过域名访问网站,JS运行出现问题, 有IP直接访问是可以正常显示的 虽然美分 保证让你晕倒 第二个值为什么显示不出来 ?
var p="myparam"; //这是个字符串
var v=30; //这是个数字var url="http://aaa.bbb.com/a.jsp?"+p+"="+v+"&xx=33";
//alert(url);
</script>
a="ttp://aaa.bbb.com/a.jsp?"+p+"="+v+"&xx=33";
不行吗?
这样a应该就是http://aaa.bbb.com/a.jsp?myparam=30&xx=33
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----------------------------------------
这会应该说清楚了吧?
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);考虑得可能是不太全面,但能用了,欢迎高手请提建议,谢谢!
也谢谢上面的各位。
var p="myparam"; //这是个字符串
var v=30; //这是个数字var url="http://aaa.bbb.com/a.jsp?"+p+"="+v+"&xx=33";
//alert(url);
</script>
{
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;
}
<SCRIPT LANGUAGE="JavaScript">
<!--
String.prototype.setQuery = function(name, value)
{
var reg = new RegExp("(^|&|\\?)("+ name +"=)([^&]*)(&|$)");
var r = this.substr(this.indexOf("?")+1).match(reg);
if (r!=null) return this.replace(reg, "$1$2"+ value +"$4");
else return this + (this.indexOf("?")>-1 ? "&" : "?")+ name +"="+ value
}
//var url = "http://aaa.bbb.com/a.jsp?xx=22";
//var url = "http://aaa.bbb.com/a.jsp?xx=22&yy=99";
var url = "http://aaa.bbb.com/a.jsp?myparam=30&xx=22&yy=99";
//var url = "http://aaa.bbb.com/a.jsp?xx=22&yy=99&myparam=30";
var p="myparam";
var v=22;
alert(url.setQuery(p, v));
//-->
</SCRIPT>有则替换, 无则添加! :)
顶一下!
领教了!
但实际的url不会前面什么都没有吧?也许这样更好:var reg = new RegExp("(&|\\?)("+ name +"=)([^&]*)(&|$)");