如何在javascript中编写一个可以获取当前URL的函数,例如:
http://www.blahblah.com/apps/category.php?pg=1&catId=3021
并根据用户选择选项,将另一个参数附加到网址,如:
http://localhost/buyamonline/apps/category.php?pg=1&catId=3021 &安培;限值为5
但是接下来是:
每次用户选择差异选择时,我都不想继续附加像
这样的内容http://localhost/buyamonline/apps/category.php?pg=1&catId=3021 & limit = 5& limit = 10 依此类推。
如果没有限制参数,我想总是替换添加它,如果有值,则替换值。
我试图用sprintf来完成这个但是失败了。
我是这样做的:var w = document.mylimit.limiter.selectedIndex;
var url_add = document.mylimit.limiter.options[w].value;
var loc = window.location.href;
window.location.href = sprintf(loc+"%s="+%s, "&limit", url_add);
答案 0 :(得分:1)
使用JS实现的正则表达式解决方案更新。
您更喜欢哪个?
对于#1:以下应该可以解决问题。但请注意,使用正则表达式解析URL时存在问题。 (参考:stackoverflow.com/questions/1842681 / ...)
<script type="text/javascript">
var pattern = "&limit(\=[^&]*)?(?=&|$)|^foo(\=[^&]*)?(&|$)";
var modifiers = "";
var txt=new RegExp(pattern,modifiers);
var str="http://localhost/buyamonline/apps/category.php?pg=1&catId=3021&limit=5";
document.write(str+"<br/>");
var replacement = "&limit=10";
document.write(str.replace(txt, replacement));
</script>
答案 1 :(得分:1)
您可以在下面找到我的 sprintf 实现,您可以在JS代码中使用它来实现您的需求。它的工作方式与C ++ / Java / PHP sprintf 函数类似,但有一些限制:格式说明符的编写方式与%1
类似,不支持类型化格式说明符(如%d
, %s
,%.2f
等。)
String.prototype.sprintf = function() {
var matches,result = this, p = /%(\d)/g;
while (matches = p.exec(result)) {
result = result.replace(matches[0], arguments[parseInt(matches[1]) - 1]);
}
return result;
};
<强>语法强>:
format
的sprintf(ARG1,ARG2,...);
format
字符串由零个或多个格式说明符组成,跟随此原型:
- a
%
后跟参数索引,其中第一个参数的索引为。
arg1
,arg2
,...是将替换格式说明符的变量字符串。示例:&#39;快速
%1
狐狸跳过%2
狗&#39; .sprintf(&#39;brown
&# 39;,&#39;lazy
&#39);
使用示例:
var str = 'The size of %1 (%2) exceeds the %3 (%4).';
console.log(str.sprintf('myfile.txt', '100MB', 'max. allowed size', '75MB'));
<强>输出强>:
myfile.txt(100MB)的大小超过最大值。允许的大小(75MB)。
注意:如果您需要强大的 sprintf 功能,请检查sprintf是否有JavaScript。