QueryStringのJavaScriptクラスの解析

2604 ワード

以前書いたQueryStringを解析するJSクラスは、QueryStringの値を取得したり設定したりすることができ、便利な検索をメモしました:)
使用例:


var qs = new QueryString(query);

 

qs.set("ajaxids", ids)

qs.set("ajaxsn", new Date())

 

query = qs.toStr();


連続して呼び出すこともできます.


query = new QueryString(query).set("ajaxids", ids).set("ajaxsn", new Date()).toStr();


他の使い方は自分でコードを見て考えましょう.
フル・コード(2010年1月30日、更新:シン・コード):


QueryString = function(qs){

	this.p={};

 

	if(!qs) qs=location.search;

 

	if(qs){

		var reg = /(?:^\?|&)(.*?)=(.*?)(?=&|$)/g, temp;

		while((temp = reg.exec(params)) != null) this.p[decodeURIComponent(temp[1])] = decodeURIComponent(temp[2]);

	}

 

	this.set = function(name, value){

		this.p[name] = value;

		return this;

	};

 

	this.get = function(name, def){

		var v = this.p[name];

		return (v != null) ? v : def;

	};

 

	this.has = function(name){

		return this.p[name] != null;

	};

 

	this.toStr = function(){

		var r = '?';

		for (var k in this.p) r += encodeURIComponent(k) + '=' + encodeURIComponent(this.p[k]) + '&';

		return r;

	};

};


注:その中のQueryString解析過程は、sohightheskyの「JAvascript urlパラメータとscriptラベルからurlパラメータを取得」に由来し、sohightheskyの共有に感謝します.
完全なコード(元のバージョン):


QueryString = function(qs){

	this.p={};

 

	if(!qs)

		qs=location.search;

 

	if(qs) {

		var b = qs.indexOf('?');

		var e = qs.indexOf('#');

 

		if(b >= 0){

			qs = e < 0 ? qs.substr(b + 1) : qs.substring(b + 1,e);

 

			if(qs.length > 0){

				qs = qs.replace(/\+/g, ' ');

 

				var a = qs.split('&');

 

				for (var i = 0; i < a.length; i++) {

					var t = a[i].split('=');

					var n = decodeURIComponent(t[0]);

					var v = (t.length == 2) ? decodeURIComponent(t[1]) : n;

					this.p[n] = v;

				}

			}

		}

	}

 

	this.set = function(name, value){

		this.p[name] = value;

		return this;

	};

 

	this.get = function(name, def){

		var v = this.p[name];

		return (v != null) ? v : def;

	};

 

	this.has = function(name) {

		return this.p[name] != null;

	};

 

	this.toStr = function() {

		var r='?';

		for (var k in this.p) {

			r += encodeURIComponent(k) + '=' + encodeURIComponent(this.p[k]) + '&';

		}

		return r;

	};

};