【问题标题】:How can I change the value of a querystring with mooTools?如何使用 mooTools 更改查询字符串的值?
【发布时间】:2012-01-23 12:01:06
【问题描述】:

给定一个包含绝对 URL 和查询字符串参数的字符串,使用 JavaScript 和/或 MooTools 替换参数值的最简单方法是什么?

例如

// Change this
'/foo/bar?frob=123456789'

// Into this
'/foo/bar?frob=abcdefg'

编辑

URL 不是当前窗口的location。它是一个包含字符串的变量。我只想操作这个字符串。

【问题讨论】:

标签: javascript mootools query-string


【解决方案1】:

除了你所做的之外,这可能会更好,因为它将扩展 String 并消除对 URI 类的依赖...

(function() {

// deps on Types/String.toQueryString()
String.implement({

    fixQueryString: function(key, value) {
        var query = this.parseQueryString() || {};
        query[key] = value;
        return Object.toQueryString(query);
    }

});

// exports:
this.replaceUrlParameter = function(url, key, value) {
    var parts = url.split('?'), QS = parts[1] || null;

    return QS ? [parts[0], QS.fixQueryString(key, value)].join("?") : url;
};

})();

console.log(replaceUrlParameter('/foo/bar', 'frob', 'ownies'));
/foo/bar/
console.log(replaceUrlParameter('/foo/bar?frob=123123123', 'frob', 'ownies'));
/foo/bar?frob=ownies

http://jsfiddle.net/dimitar/fjj6W/

【讨论】:

  • 不错的答案,简明扼要,但包含的信息不仅仅是最基本的信息!
【解决方案2】:

很抱歉撞了一个旧帖子,但我认为它已经在 mootools 中了。不用自己写 :-) http://mootools.net/docs/more/Types/URI#URI:setData

如果您使用的是非常旧版本的 mootools,请查看此处:http://pilon.nl/mootools/2009/02/05/extra-browsersextras/

【讨论】:

    【解决方案3】:

    如果您想在不重新加载页面的情况下执行此操作,则没有办法(这是 Web 浏览器安全模型的一部分)。 如果您不介意重新加载页面,请考虑:

    location.href='http://example.com/foo/bar?frob=baz'
    

    无需重新加载的替代方法是使用 location.hash,即

    location.hash = 'myhash'
    

    将网址更改为http://example.com/foo/bar?frob=123456789#myhash

    这是Hash bang urls的基础

    【讨论】:

      【解决方案4】:

      这是我想出的解决方案。这取决于 MooTools。

      function replaceUrlParameter (url, parameterName, newValue) {
          var uri = new URI(url);
          var uriBase = ri.get('directory') + uri.get('file');
          var query = uri.get('query').parseQueryString(false, true);
          query[parameterName] = newValue;
      
          uriBase += '?';
          for (var i in query) {
              if (i === 'undefined') continue;
              if (i === '') continue;
              uriBase += i + '=' + escape(query[i]) + '&';
          }
          return uriBase.substring(0, galleryLinkBase.length - 1);
      }
      

      这是特定于我的使用,但它可能会作为未来其他人的起点。

      【讨论】:

        猜你喜欢
        • 2016-10-29
        • 2013-06-17
        • 1970-01-01
        • 2011-04-18
        • 2021-04-30
        • 2018-06-19
        • 1970-01-01
        • 1970-01-01
        • 2017-09-29
        相关资源
        最近更新 更多