我有一个脚本,当我通过向我的网址添加字符串来点击按钮时,我用它来切换两个布局。它工作得很好 - 但是我需要控制如何将param字符串插入到我的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
此外,需要在过滤器字符串之前插入param。 / 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;
});
});
答案 0 :(得分:1)
您可以使用上述功能这样做:
$('.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;
}
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, " "));}
从这里开始:How can I get query string values in JavaScript?已经提到过了。