Jquery 将参数添加到URL-始终确保它位于其他参数之前

Jquery 将参数添加到URL-始终确保它位于其他参数之前,jquery,Jquery,我有一个脚本,当通过向url添加字符串来单击按钮时,我可以使用它在两种布局之间切换。它工作得很好——但是我需要控制参数字符串如何插入到我的url中,以使用一个过滤器,该过滤器也会将字符串添加到url中 url结构如下所示 /Computers/Desktops = loads gridcode first click = /Computers/Desktops?param=list = loads listview second click = /Computers/Desktops?param

我有一个脚本,当通过向url添加字符串来单击按钮时,我可以使用它在两种布局之间切换。它工作得很好——但是我需要控制参数字符串如何插入到我的url中,以使用一个过滤器,该过滤器也会将字符串添加到url中

url结构如下所示

/Computers/Desktops = loads gridcode
first click = /Computers/Desktops?param=list = loads listview
second click = /Computers/Desktops?param=grid = loads gridview
这很好用——但我的问题是,我有一组过滤器,可以向url添加字符串,这会使布局开关无法工作

例如:

first click = /Computers/Desktops?param=list = loads listview
我开始添加过滤器:

/Computers/Desktops?param=list&fss=2GB+SSD
这是可行的-但当我更改布局时:

/Computers/Desktops&fss=2GB+SSD?param=grid
这里,paramstring插入到filterstring之后,这将中断筛选。我需要在以下时间之前插入:

 /Computers/Desktops?param=grid&fss=2GB+SSD
还有一个变量,用户可以在切换布局之前进行筛选:

/Computers/Desktops?fss=HP+2GB
现在切换布局时:

/Computers/Desktops?fss=HP+2GB?param=list
这里还需要在FilterString之前插入参数。/Computers/Desktops是动态的,并且根据类别而变化

我的剧本

$(function() {
    if (window.location.href.indexOf("param=list") > -1) {
        //listcode
    } else {
        //gridcode
    }
    $('.click').on('click', function() {
        console.log("Clicked");
        var url = window.location.pathname;
        var url = window.location.href;
        if (url.indexOf('?param=list') > -1) {
            url = url.replace("?param=list", "") + '?param=grid'
        } else {
            url = url.replace("?param=grid", "") + '?param=list'
        }
        window.location.href = url;
    });
});

通过使用上述函数,您可以这样做:

 $('.click').on('click', function() {
var baseUrl =  window.location.href.split("?")[0];
var fss = getParametersByName("fss");
var params = getParametersByName("params");
if(params == "list") params = "grid"; else params = "list";
var newUrl = baseUrl+"?params="+params;
if((fss).length>0) newUrl = newUrl+"&fss="+fss;
window.location.href=newUrl;
}


从这里开始:已经提到了。

你真的应该看看这个问题:嗨!事实上,我以前在那篇文章中读过一些,但我不知道如何过滤出我需要对脚本进行有效更改的部分。只需使用投票率最高(并被接受)的答案中的函数:
var param=getParameterByName(“param”)
这将为您提供url中
param
参数的值,而不管其位置hi@andreas如何。仍然不确定如何编写它-我将$(function(){更改为$(function getParameterByName(name)){但这并没有改变任何事情。另外-我的paramscripts可以正常工作-我只需要确保它们总是在url中的任何其他参数之前被注入。嗨!这似乎不起作用-它给了我一个错误:未捕获的引用错误:getPametersByName未定义函数getParametersByName(name){name=name.replace(/[[]/,,“\[”.替换(/[]/,“\]”);var regex=new RegExp(“[\\?&]”name+“=([^&&]*)”,results=regex.exec(location.search);返回结果==null?”:decodeURIComponent(结果[1]。替换(/\+/g,”);)Ho@koded-不知道如何用我当前的脚本编写这个?好的,我添加了这个函数-它有点工作。URL会像我希望的那样更改!出于某种原因,它们为两种布局加载相同的脚本,虽然我没有加载if/else语句中的代码。更近了一步!没关系-它工作了!我必须将params更改为param。太神奇了-这非常有趣很有趣,谢谢。
function getParametersByName(name) {
name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
    results = regex.exec(location.search);
return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));}