【问题标题】:Change url params string using JavaScript使用 JavaScript 更改 url 参数字符串
【发布时间】:2012-03-28 16:43:26
【问题描述】:

我想从 URL 字符串中删除一些参数:

例如:

我有一个这样的字符串:

var url = '/browse/102?color=red&type=car&rpp=10&ajax=1&change=1';

还有一个像这样的数组:

var ignore = new Array("change","ajax"); 

结果

/browse/102?color=red&type=car&rpp=10

实现这一目标的最短、最快的方法是什么?

【问题讨论】:

  • 方法有很多,但正则表达式将是您的最佳选择。只需编写一个使用正则表达式执行此操作的函数。应该是很少的代码行..

标签: javascript string prototypejs url-parameters


【解决方案1】:

这是一个简单的实用程序,我在我的应用程序中使用它来处理 URL。 http://jsfiddle.net/gwB2C/

使用简单:

var url_parser = new URLParser('/browse/102?color=red&type=car&rpp=10&ajax=1&change=1');
alert(url_parser.toString()); 
// result = "/browse/102?color=red&type=car&rpp=10&ajax=1&change=1"
url_parser.removeParams(["color", "type"]);
alert(url_parser.toString()); 
// result = "/browse/102?rpp=10&ajax=1&change=1"
url_parser.addParams({color:"green", test : 1});
alert(url_parser.toString()); 
// result = "/browse/102?rpp=10&ajax=1&change=1&color=green&test=1"

【讨论】:

    【解决方案2】:

    RegExp 怎么样?这是一个示例函数:

    var url = '/browse/102?color=red&type=car&rpp=10&a=mode&ajax=1&change=1&mode&test';
    var ignore = new Array("change","ajax", "mode", "test"); 
    alert(removeParams(url, ignore));
    
    function removeParams(address, params)
    {
        for (var i = 0; i < params.length; i++)
        {
           var reg = new RegExp("([\&\?]+)(" + params[i] + "(=[^&]+)?&?)", "g")
           address = address.replace(reg, function($0, $1) { return $1; });
        }
        return address.replace(/[&?]$/, "");
    }​
    

    编辑:移动到像 Michal B. 那样的单独函数。

    【讨论】:

    • 这很好,但我认为应该有一个小修复。如果一个参数被重复,那么它只删除一个。例如:example.com/index?cat10&amp;change=1&amp;change=0 转换为 example.com/index?cat10&amp;change=0
    【解决方案3】:

    这里是一个函数的 jsfiddle 示例:http://jsfiddle.net/ANGsJ/1/
    PS。我使用了 Just_Mad 的正则表达式,因为我的有点丑;)

    【讨论】:

    • 进程失败('/browse/102?color=red&type=car&mode=2&rpp=10&ajax=1&change=1', ["mode"]);
    • 失败是什么意思?在这里你有一个更新的版本。 Just_Mad 的正则表达式删除了太多字符(尤其是 & 和?)。我的根本不会删除它们,但它仍然应该是一个正确的 url:jsfiddle.net/ANGsJ/2。如果遇到问题,您可以随时调整正则表达式。
    • 如果你真的想要漂亮的网址,这里有一个快速的解决方案:jsfiddle.net/ANGsJ/4
    • 好吧,我们只是对正确结果的看法有点不同:)
    猜你喜欢
    • 1970-01-01
    • 2021-04-19
    • 1970-01-01
    • 2014-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多