所以我想在url中替换GET变量值,如果该变量不存在,则将其添加到url。
编辑:我这样做的元素href不是页面的当前位置..
我对javascript不好,但我确实知道如何使用jQuery以及javascript的基础知识。我知道如何编写正则表达式但不知道如何使用正则表达式的javascript语法以及使用它的函数。
这是我到目前为止所遇到的,第3行确实有错误:在jsfiddle(或以下)看到它:http://jsfiddle.net/MadLittleMods/C93mD/
function addParameter(url, param, value) {
var pattern = new RegExp(param + '=(.*?);', 'gi');
return url.replace(pattern, param + '=' + value + ';');
alert(url);
}
答案 0 :(得分:15)
不需要在这个上使用jQuery。正则表达式和字符串函数就足够了。请参阅下面的评论代码:
function addParameter(url, param, value) {
// Using a positive lookahead (?=\=) to find the
// given parameter, preceded by a ? or &, and followed
// by a = with a value after than (using a non-greedy selector)
// and then followed by a & or the end of the string
var val = new RegExp('(\\?|\\&)' + param + '=.*?(?=(&|$))'),
parts = url.toString().split('#'),
url = parts[0],
hash = parts[1]
qstring = /\?.+$/,
newURL = url;
// Check if the parameter exists
if (val.test(url))
{
// if it does, replace it, using the captured group
// to determine & or ? at the beginning
newURL = url.replace(val, '$1' + param + '=' + value);
}
else if (qstring.test(url))
{
// otherwise, if there is a query string at all
// add the param to the end of it
newURL = url + '&' + param + '=' + value;
}
else
{
// if there's no query string, add one
newURL = url + '?' + param + '=' + value;
}
if (hash)
{
newURL += '#' + hash;
}
return newURL;
}
<强>更新强>
现在代码处理URL上有哈希的情况。
修改强>
错过了一个案子!代码现在检查是否存在查询字符串 。
答案 1 :(得分:1)
我会选择this小而完整的库来处理js中的网址:
答案 2 :(得分:0)
见Change URL parameters。它以更一般的方式回答您的问题(更改任何url参数)。答案部分有jQuery和常规js的解决方案。
看起来url.replace
应该是location.replace
,但我可能错了(该声明基于快速谷歌搜索'url.replace javascript')。
答案 3 :(得分:0)
<script type="text/javascript">
$(document).ready(function () {
$('input.letter').click(function () {
//0- prepare values
var qsTargeted = 'letter=' + this.value; //"letter=A";
var windowUrl = '';
var qskey = qsTargeted.split('=')[0];
var qsvalue = qsTargeted.split('=')[1];
//1- get row url
var originalURL = window.location.href;
//2- get query string part, and url
if (originalURL.split('?').length > 1) //qs is exists
{
windowUrl = originalURL.split('?')[0];
var qs = originalURL.split('?')[1];
//3- get list of query strings
var qsArray = qs.split('&');
var flag = false;
//4- try to find query string key
for (var i = 0; i < qsArray.length; i++) {
if (qsArray[i].split('=').length > 0) {
if (qskey == qsArray[i].split('=')[0]) {
//exists key
qsArray[i] = qskey + '=' + qsvalue;
flag = true;
break;
}
}
}
if (!flag)// //5- if exists modify,else add
{
qsArray.push(qsTargeted);
}
var finalQs = qsArray.join('&');
//6- prepare final url
window.location = windowUrl + '?' + finalQs;
}
else {
//6- prepare final url
//add query string
window.location = originalURL + '?' + qsTargeted;
}
})
});
</script>