我正在编写一些javascript(不是jquery,只是简单的javascript)来操纵查询字符串。
我目前有以下内容:
// no viewid in querystring so append as new
if (newUrl.indexOf("viewid") == -1) {
newUrl += "?viewid=" + viewId;
}
else if (newUrl.indexOf("viewid") > -1) // there is a view id or another key e.g. there is a linkid
{
newUrl = newUrl.replace(/viewid=\d*/i, "viewid=" + viewId);
}
因此它会将viewid附加为新的查询字符串键,否则会附加它(&)。
我需要做的是检查网址中是否包含查询字符串值(例如“blah”),如果是,请附加&viewid=(number)
。
如果下拉列表中的选择(调用此javascript)发生更改,则更改viewid(但不要附加新的viewid
)。
答案 0 :(得分:0)
您可以使用window.location.search
来获取查询字符串。
然后,您可以使用split('&')
获取单个key=value
对的数组。
然后你可以将每对(字符串)拆分成适当的对象。
然后您可以找到viewid
值,更改它并重建查询字符串。
此处的示例代码(http://jsfiddle.net/tMBpM/):
var locationHost = 'http://wwwdomain.com';
var locationPath = '/something';
var locationSearch = '?test=1&viewid=2';
var searches = locationSearch.replace('?', '').split('&');
for (var i in searches) {
searches[i] = searches[i].split('=');
}
for (var j in searches) {
if (searches[j][0] == 'viewid') {
//we search for viewid
console.log('old VIEWID =', searches[j][1]);
//if we find one then we update it
searches[j][1] = 5;
}
}
locationSearch = "?";
for (var k in searches) {
var separator = k == 0 ? "" : "&";
locationSearch += separator + searches[k][0] + "=" + searches[k][1];
}
console.log(locationHost + locationPath + locationSearch);
//for production use window.location.host instead of locationHost
//and so on
答案 1 :(得分:0)
您可以使用名为Query String Manager的这个漂亮的小包 你就这样使用它:
var qsm = require('qsm');
newUrl = qsm.add(newUrl, { viewId: 1 });
如果没有其他查询字符串,这将创建您的viewId = 1,如果有其他查询字符串,则会附加它。