我正在尝试从网址中删除重复的查询字符串参数。我做错了什么?
function stripUrlParams(url, parameter) {
//prefer to use l.search if you have a location/link object
var urlparts= url.split('?');
if (urlparts.length>=2) {
var prefix= encodeURIComponent(parameter)+'=';
var pars= urlparts[1].split(/[&;]/g);
//reverse iteration as may be destructive
for (var i= pars.length; i-- > 0;) {
//idiom for string.startsWith
if (pars[i].lastIndexOf(prefix, 0) !== -1) {
pars.splice(i, 1);
}
}
url = urlparts[0] + '?' + pars.join('&');
return url;
} else {
return url;
}
}
stripUrlParams( 'www.testurl.com?x=1&y=2&x=2'); //应返回“www.testurl.com?x=1&y=2”。
答案 0 :(得分:2)
试试这个:
function stripUrlParams(url, parameter) {
//prefer to use l.search if you have a location/link object
var urlparts= url.split('?');
if (urlparts.length>=2) {
var stuff = urlparts[1];
pars = stuff.split("&");
var comps = {};
for (i = pars.length - 1; i >= 0; i--)
{
spl = pars[i].split("=");
comps[spl[0]] = spl[1];
}
pars = [];
for (var a in comps)
pars.push(a + "=" + comps[a]);
url = urlparts[0] + '?' + pars.join('&');
return url;
} else {
return url;
}
}
document.getElementById('choice').innerHTML = stripUrlParams('www.testurl.com?x=1&y=2&x=2');
//Should return "www.testurl.com?x=1&y=2".
答案 1 :(得分:0)
在var var prefix= encodeURIComponent(parameter)+'=';
中,parameter
未定义。
尝试为它提供一个值,这可能会通过在函数调用中添加第二个参数来解决您的问题:
stripUrlParams('www.testurl.com?x=1&y=2&x=2', '');
答案 2 :(得分:0)
问题是:您的函数不会删除重复的URL参数,只是在您调用它时删除传递给该方法的stripUrlParams('www.testurl.com?x=1&y=2&x=2', 'x');
。
例如调用
x
将从网址中删除所有public class MoveablePane extends Pane {
private ScrollPane scrollArea;
private Node contentNode;
public MoveablePane (String title, Node contentNode) {
this.contentNode = contentNode;
//Set up the title bar
//Set up the window buttons
//Place the node into the scroll area so the user can resize
this.scrollArea = new ScrollPane(contentNode);
//Add the nodes to be layed out on the stage
this.getChildren().clear();
this.getChildren().addAll(scrollArea);
}
个参数。当您第二次遇到它们时,您必须跟踪您的URL中已有的参数并将其删除(或不将其复制)。已经在其他答案中提供了可能的解决方案。
答案 3 :(得分:0)
来自@Praveen Kumar的上述解决方案很好但是如果传递了多选值或数组,它将无法正确处理。
所以我在这里写了一个函数,几乎没有变化,函数将用于URI而不是完整的URL,只需将此部分传递给此函数x=1&y=2
。
function stripUriParams(uri) {
var stuff = decodeURIComponent(uri);
var pars = stuff.split("&");
var finalPars = [];
var comps = {};
for (var i = pars.length - 1; i >= 0; i--)
{
spl = pars[i].split("=");
//ignore arrays
if(!spl[0].endsWith(']')) {
comps[spl[0]] = spl[1];
} else {
//this is array so enter it into final url array
finalPars.push(spl[0] + "=" + spl[1]);
}
}
for (var a in comps)
finalPars.push(a + "=" + comps[a]);
url = finalPars.join('&');
return url;
}
输入:
stripUriParams('pr1=2&pr1=3&pr2=1&arr[]=1&arr[]=2');
输出:
pr1=2&pr2=1&arr[]=1&arr[]=2
Whereas the output of Parveen's function would be something like
pr1=2&pr2=1&arr[]=1
PS)为什么我没有编辑上面的答案,因为我修改了URI而不是完整的URL。