有时候我们需要使用JavaScript操作地址栏的参数,例如在一些Ajax应用中需要将地址栏“#”后的部分当作页面定位信息存储或操作,这时常需要将类似于
“a=123&b=456&c=789”
这样的字符串转化为
{a:123,
b:456,
c:789}
这样的类,如果能定义一个比较通用的Hash类在这样的工作中一定能起到事倍功半的效果,下面是一个我常用的这样的类。
使用方法比较简单,例如:
之后就可以对myHash进行操作,最后可以使用myHash.toString()方法将myHash还原为"a=123&b=456&c=789"形式的字符串。
其中用到一个对String对象扩展的方法,如下:
“a=123&b=456&c=789”
这样的字符串转化为
{a:123,
b:456,
c:789}
这样的类,如果能定义一个比较通用的Hash类在这样的工作中一定能起到事倍功半的效果,下面是一个我常用的这样的类。
function
Hash(s)
{
//将输入的字符串转化为hash对象的类
this.length = 0;
this.item = {};
if (typeof(s) == "string") {
var a = s.split("&"), i, l = a.length, b;
for (i = 0; i < l; i ++) {
b = a[i].partition("=");
if (b[0].length != 0)
this.item[b[0]] = b[2];
}
}
}
Hash.prototype.has = function (k) {
//判断Hash对象中是否存在指定键
return (k in this.item);
} ;
Hash.prototype.set = function (k, v) {
if (!this.item[k])
this.length ++;
this.item[k] = v;
} ;
Hash.prototype.get = function (k) {
return this.item[k] ? this.item[k] : null;
} ;
Hash.prototype.del = function (k) {
if (this.has(k))
this.length --;
delete this.item[k];
} ;
Hash.prototype.toString = function () {
var s = "", k;
for (k in this.item)
s += "&" + k + "=" + (this.item[k] ? this.item[k].toString() : "");
return s.indexOf("&") == 0 ? s.substring(1) : s;
} ;
//将输入的字符串转化为hash对象的类
this.length = 0;
this.item = {};
if (typeof(s) == "string") {
var a = s.split("&"), i, l = a.length, b;
for (i = 0; i < l; i ++) {
b = a[i].partition("=");
if (b[0].length != 0)
this.item[b[0]] = b[2];
}
}
}
Hash.prototype.has = function (k) {
//判断Hash对象中是否存在指定键
return (k in this.item);
} ;
Hash.prototype.set = function (k, v) {
if (!this.item[k])
this.length ++;
this.item[k] = v;
} ;
Hash.prototype.get = function (k) {
return this.item[k] ? this.item[k] : null;
} ;
Hash.prototype.del = function (k) {
if (this.has(k))
this.length --;
delete this.item[k];
} ;
Hash.prototype.toString = function () {
var s = "", k;
for (k in this.item)
s += "&" + k + "=" + (this.item[k] ? this.item[k].toString() : "");
return s.indexOf("&") == 0 ? s.substring(1) : s;
} ;
使用方法比较简单,例如:
var
myHash
=
new
Hash(
"
a=123&b=456&c=789
"
);
之后就可以对myHash进行操作,最后可以使用myHash.toString()方法将myHash还原为"a=123&b=456&c=789"形式的字符串。
其中用到一个对String对象扩展的方法,如下:
- String.prototype.partition = function (c) {
- var p = this.indexOf(c);
- return p != -1 ?
- [this.substring(0, p), c, this.substr(p + c.length)] :
- [this, c, ""];
- };