js 代码
  1. var PARAMTER_VALUE = null;   
  2. function getParamter(paramName) {   
  3.     if(!PARAMTER_VALUE) {   //第一次初始化   
  4.         PARAMTER_VALUE = new Array();   
  5.         var paramStr = location.search.substring(1);   
  6.         var paramArr = paramStr.split("&");   
  7.         var len = paramArr.length;   
  8.         var tempArr;   
  9.         for(var i = 0; i < len; i++) {   
  10.             tempArr = paramArr[i].split("=");   
  11.             PARAMTER_VALUE[tempArr[0]] = tempArr[1];   
  12.         }   
  13.     }   
  14.     var paramValue = PARAMTER_VALUE[paramName];   
  15.     if(paramValue) {   
  16.         return paramValue;   
  17.     }   
  18. }  

今天遇到这样一个需求,不知道还有没有其他更好的实现方法?

评论
liudaoru 2007-11-30
niuyuewanzi 写道
/*
 * This function parses ampersand-separated name=value argument pairs from
 * the query string of the URL. It stores the name=value pairs in
 * properties of an object and returns that object. Use it like this:
 *
 * var args = getArgs( );  // Parse args from URL
 * var q = args.q || "";  // Use argument, if defined, or a default value
 * var n = args.n ? parseInt(args.n) : 10;
 */
function getArgs( ) {
    var args = new Object( );
    var query = location.search.substring(1);     // Get query string
    var pairs = query.split("&");                 // Break at ampersand
    for(var i = 0; i < pairs.length; i++) {
        var pos = pairs[i].indexOf('=');          // Look for "name=value"
        if (pos == -1) continue;                  // If not found, skip
        var argname = pairs[i].substring(0,pos);  // Extract the name
        var value = pairs[i].substring(pos+1);    // Extract the value
        value = decodeURIComponent(value);        // Decode it, if needed
        args[argname] = value;                    // Store as a property
    }
    return args;                                  // Return the object
}

 


JAVASCRIPT GUIDE 上COPY的.

如果通用的话decodeURIComponent方法确实要加上。这个方法考虑的还是比较周全。
liudaoru 2007-11-30
HexUzHoNG 写道
仔细一看,学到一个新方法(上班只敢偷偷的看,呵呵)
location.search.substring(1)

不应该每次都解析url的,这样效率太差。
那假如这种情况会不会有问题
比如翻页的情况下,第一次是&page=1,然后xmlhttp请求第二页&page=2

那我再想取这个page值?

---------------------
那个方法是写死的只能取location的,好像不适合这种情况下取值。

------------------------------

如果用Ajax请求的话就不能用loaction.search了,那样可以直接取值啊,Ajax的参数是你传过去的。
如果一般的分页的话,页面会重新加载,因此也不会有问题。
niuyuewanzi 2007-11-29
/*
 * This function parses ampersand-separated name=value argument pairs from
 * the query string of the URL. It stores the name=value pairs in
 * properties of an object and returns that object. Use it like this:
 *
 * var args = getArgs( );  // Parse args from URL
 * var q = args.q || "";  // Use argument, if defined, or a default value
 * var n = args.n ? parseInt(args.n) : 10;
 */
function getArgs( ) {
    var args = new Object( );
    var query = location.search.substring(1);     // Get query string
    var pairs = query.split("&");                 // Break at ampersand
    for(var i = 0; i < pairs.length; i++) {
        var pos = pairs[i].indexOf('=');          // Look for "name=value"
        if (pos == -1) continue;                  // If not found, skip
        var argname = pairs[i].substring(0,pos);  // Extract the name
        var value = pairs[i].substring(pos+1);    // Extract the value
        value = decodeURIComponent(value);        // Decode it, if needed
        args[argname] = value;                    // Store as a property
    }
    return args;                                  // Return the object
}

 


JAVASCRIPT GUIDE 上COPY的.
HexUzHoNG 2007-11-29
仔细一看,学到一个新方法(上班只敢偷偷的看,呵呵)
location.search.substring(1)

不应该每次都解析url的,这样效率太差。
那假如这种情况会不会有问题
比如翻页的情况下,第一次是&page=1,然后xmlhttp请求第二页&page=2

那我再想取这个page值?

---------------------
那个方法是写死的只能取location的,好像不适合这种情况下取值。
liudaoru 2007-11-29
HexUzHoNG 写道
function URLUtils() {
}

URLUtils.getParam = function($url, $param) {

    var reg = "/^.*[\\?|\\&]" + $param + "\\=([^\\&]*)/";
    reg = eval(reg);
	
	var ret = $url.match(reg);
	if (ret != null) {
		return ret[1];
	} else {
		return "";
	}   
}


几次试图学习prototype,mootools,但js功力太弱了,感觉很难读懂.
还是习惯公司写JS的风格些。

现在自己写js,全部像apache commons包一样,写成类似的静态方法去掉用。简单明了,别人也好读、改些。
呵呵。
不应该每次都解析url的,这样效率太差。
另外感觉也没必要用正则,因为split完全足够了。
HexUzHoNG 2007-11-29
function URLUtils() {
}

URLUtils.getParam = function($url, $param) {

    var reg = "/^.*[\\?|\\&]" + $param + "\\=([^\\&]*)/";
    reg = eval(reg);
	
	var ret = $url.match(reg);
	if (ret != null) {
		return ret[1];
	} else {
		return "";
	}   
}


几次试图学习prototype,mootools,但js功力太弱了,感觉很难读懂.
还是习惯公司写JS的风格些。

现在自己写js,全部像apache commons包一样,写成类似的静态方法去掉用。简单明了,别人也好读、改些。
呵呵。
liudaoru 2007-11-29
考虑的比较周全,thx...
afcn0 2007-11-28
见Prototype
  toQueryParams: function(separator) {
    var match = this.strip().match(/([^?#]*)(#.*)?$/);
    if (!match) return { };

    return match[1].split(separator || '&').inject({ }, function(hash, pair) {
      if ((pair = pair.split('='))[0]) {
        var key = decodeURIComponent(pair.shift());
        var value = pair.length > 1 ? pair.join('=') : pair[0];
        if (value != undefined) value = decodeURIComponent(value);

        if (key in hash) {
          if (!Object.isArray(hash[key])) hash[key] = [hash[key]];
          hash[key].push(value);
        }
        else hash[key] = value;
      }
      return hash;
    });
  },
发表评论

提醒: 该博客已发表在公共论坛,博客所有留言会成为论坛回贴,留言请注意遵守论坛发贴规则

您还没有登录,请登录后发表评论

liudaoru
搜索本博客
最近加入圈子
存档
最新评论