0

我正在编写一些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 作为新的查询字符串键附加,否则将附加它 (&)。

我需要做的是检查 URL 中是否有查询字符串值(任何,例如“blah”),如果是,则附加&viewid=(number).

如果下拉列表中的选择(调用此 javascript)发生更改,则更改 viewid(但不要附加新的viewid)。

4

2 回答 2

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
于 2013-03-12T11:48:48.600 回答
0

您可以使用这个名为Query String Manager的漂亮小程序包 ,并像这样使用它:

var qsm = require('qsm');
newUrl = qsm.add(newUrl, { viewId: 1 });

如果没有其他查询字符串,这将创建您的 viewId=1,如果有其他查询字符串,则附加它。

于 2017-07-07T09:20:16.687 回答