【问题标题】:javascript modify url parameter arrayjavascript修改url参数数组
【发布时间】:2016-03-16 14:47:22
【问题描述】:

我有一个 url,其中有一个数组作为参数。例如:

test.dev/orders?filter[]=temp&filter[]=placed

我想创建一个js函数,可以切换数组内容,修改后重定向。

例如,如果我调用函数 toggleFilter('temp'),我希望 js 重定向到 test.dev/orders?filter[]=placed

但是如果我打电话给toggleFilter('processed'),我想让js重定向到test.dev/orders?filter[]=temp&filter[]=placed&filter[]=processed

我怎样才能实现这样的功能?提前致谢!

【问题讨论】:

  • 请说明您想要实现的目标。可能是一个更详细的例子

标签: javascript arrays url parameters toggle


【解决方案1】:

该函数需要获取当前查询字符串,将其分解,然后根据参数,重新组装。

document.location.search - 很容易地为您提供查询字符串。

String.split - 让您将其分解为各个部分。

arguments - 让我们使用它而不是定义的参数,这样您就可以传递尽可能多(或尽可能少)的过滤器。

从那里,它只是解释参数来组装一个新的查询字符串......

function toggleFilter() {
    var queryString = document.location.search;
    queryString = queryString.substring(1); // Get rid of the initial '?'

    // Break it into individual parts and remove the 'filter[]=' leaving just the values
    var queryStringSplit = queryString.split('&');
    var values = [];
    for (var qss = 0; qss < queryStringSplit.length; qss++) {
        var value = queryStringSplit[qss];
        value = value.split('=')[1];

        // This will remove any "blank" values (like 'filter[]=&...")
        if (value)
            values.push(value);
    }

    // Add / remove values in arguments
    for (var a = 0; a < arguments.length; a++) {
        var arg = arguments[a];
        var index = values.indexOf(arg);
        if (index == -1)
            values.push(arg);
        else
            values.splice(index, 1);
    }

    // Re-assemble the new query string
    queryString = ''; // Default to blank
    if (values.length)
        queryString = 'filter[]=' + values.join('&filter[]=');

    // Redirect to new location
    location.search = queryString;
}

话虽如此,我认为如果您想让它成为可重用的任何类型,我会将其称为 toggleQueryString 并修改逻辑以将第一个参数解释为要切换的 queryString 值的名称(这样您就可以做除“filter []”之外的事情,我不会让它设置位置,而是返回一个查询字符串值,你可以做任何你想做的事情。但是这个函数应该可以解决问题。

【讨论】:

    【解决方案2】:
    function toggleFilter(url, key) {
        var result;
        if(url.indexOf('filter[]=' + key) > -1)
            result = url.replace('filter[]=' + key + '&', '').replace('filter[]=' + key, '');
        else
            result = url + (url.indexOf('?') > -1 ? '&' : '?') + 'filter[]=' + key;
        result = result.indexOf('?') == result.length - 1 ? 
            result.substring(0, result.length - 1) : 
            result;
        return result;
        // or if you want to redirect just write window.location.href = result;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-12
      • 2015-03-29
      • 1970-01-01
      • 1970-01-01
      • 2020-01-12
      • 1970-01-01
      • 2018-03-07
      • 2015-11-07
      相关资源
      最近更新 更多