js操作URL中#后面字符的问题
#后面的字符和?后面的字符一样,ASP.NET中有Request.QueryString,但是js中却特别麻烦,各位有没有好的办法?
最好有代码! 饭后揭帖!
[解决办法]
用下面这个方法,用法和ASP.NET中的一样
HashString={
data:{},
_isInitial:false,
initial:function(){
var aPairs, aTmp;
var hashString = new String(window.location.hash);
hashString = hashString.substr(1, hashString.length); //remove "# "
aPairs = hashString.split( "& ");
for (var i=0 ; i <aPairs.length; i++)
{
aTmp = aPairs[i].split( "= ");
this.data[aTmp[0]] = aTmp[1];
}
this._isInitial=true;
},
getValue:function(key){
if(!this._isInitial)
this.initial();
return this.data[key];
},
setValue:function(key, value){
if(!this._isInitial)
this.initial();
if(value == null)
delete this.data[key];
else
this.data[key] = value;
window.location.hash=this.toString();
},
toString:function(){
var hashString = new String( " ");
for (var key in this.data)
{
if (hashString != " ")
hashString += "& "
if (this.data[key])
hashString += key + "= " + this.data[key];
}
return hashString;
}
}
[解决办法]
// 将此存为 UrlQuery.js 然后页面引用
// <script type=text/javascript src=UrlQuery.js> </script>
// 就可以如下使用了
// var key1 = urlQuery[ "key1 "];
// 注意,此版本对 key 区分大小写
//debugger;
var urlQuery = new UrlQuery();
/********************************************************************************************/
/*
** 以集合形式表示当前URL的查询部分
** 两种方式方位:
** query[name] // 区分大小写
** query.item(name) // 不区分大小写
*/
// 构造函数
function UrlQuery() {
// 分析查询字符串
//debugger;
var q = location.search;
// if(!q) return ; // 直接 return 就丢失了 后面的属性和方法定义
q = !q ? q : q.slice(1); // 去掉 ?
if(q) {
var arr = q.split( "& ");
for(var i = 0; i < arr.length; i++) {
var qi = arr[i].split( "= ");
// 动态设置属性
// 以查询字符串键名为属性名,其查询字符串值为属性值。
this[qi[0]] = qi[1];
}
}
// 返回指定查询串的值,不区分查询串键名大小写
this.item = function (name) {
for(var pn in this) {
if(pn.toUpperCase() == name.toUpperCase()) {
return this[pn];
}
}
}
}
/****************************************************************/
/*
** 静态方法
*/
// 对插入参数按两两一对构造查询字符串,
// 不以 ? 开头,也不以 & 结束。
//
UrlQuery.build = function() {
var args = arguments;
if(args.length % 2 != 0) {
throw new Error( "参数必须是偶数个,且成对出现。 ");
}
var q = " ";
for(var i = 0; i < args.length; i += 2) {
q += args[i] + "= " + args[i+1] + "& ";
}
q = !q ? q : q.slice(0, q.length - 1);
return q;
}
/****************************************************************/
/********************************************************************************************/