Javascript查询字符串代码问题

时间:2013-03-12 11:27:27

标签: javascript

我正在编写一些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)。

2 个答案:

答案 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,如果有其他查询字符串,则会附加它。