浏览 1217 次
|
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2007-11-28
js 代码
今天遇到这样一个需求,不知道还有没有其他更好的实现方法? 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间: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;
});
},
|
|
| 返回顶楼 | |
|
最后更新时间:2007-11-29
考虑的比较周全,thx...
|
|
| 返回顶楼 | |
|
最后更新时间: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包一样,写成类似的静态方法去掉用。简单明了,别人也好读、改些。 呵呵。 |
|
| 返回顶楼 | |
|
最后更新时间: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包一样,写成类似的静态方法去掉用。简单明了,别人也好读、改些。 呵呵。 另外感觉也没必要用正则,因为split完全足够了。 |
|
| 返回顶楼 | |
|
最后更新时间:2007-11-29
仔细一看,学到一个新方法(上班只敢偷偷的看,呵呵)
location.search.substring(1) 不应该每次都解析url的,这样效率太差。 那假如这种情况会不会有问题 比如翻页的情况下,第一次是&page=1,然后xmlhttp请求第二页&page=2 那我再想取这个page值? --------------------- 那个方法是写死的只能取location的,好像不适合这种情况下取值。 |
|
| 返回顶楼 | |
|
最后更新时间: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的. |
|
| 返回顶楼 | |
|
最后更新时间:2007-11-30
HexUzHoNG 写道 仔细一看,学到一个新方法(上班只敢偷偷的看,呵呵)
location.search.substring(1) 不应该每次都解析url的,这样效率太差。 那假如这种情况会不会有问题 比如翻页的情况下,第一次是&page=1,然后xmlhttp请求第二页&page=2 那我再想取这个page值? --------------------- 那个方法是写死的只能取location的,好像不适合这种情况下取值。 ------------------------------ 如果用Ajax请求的话就不能用loaction.search了,那样可以直接取值啊,Ajax的参数是你传过去的。 如果一般的分页的话,页面会重新加载,因此也不会有问题。 |
|
| 返回顶楼 | |
|
最后更新时间: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方法确实要加上。这个方法考虑的还是比较周全。 |
|
| 返回顶楼 | |






