Created
October 1, 2010 07:56
-
-
Save think49/605899 to your computer and use it in GitHub Desktop.
URIParameter.js : URI のGETパラメータをオブジェクトに展開します。
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* URIParameter.js | |
* | |
* @version 1.0.2 | |
* @author think49 | |
*/ | |
var URIParameter = (function () { | |
/** | |
* decodeURIComponent ("+" -> " ") | |
* @function | |
* @param {String} encodedURIComponent encoded URI String. | |
* @returns decoded URI string. | |
* @type String | |
*/ | |
var _decodeURIComponent = function (encodedURIComponent) { | |
return decodeURIComponent(encodedURIComponent.replace(/\+/g, '\u0020')) | |
}; | |
/** | |
* get URI Parameters. | |
* @constructor | |
* @param {String} uriString URI Strings | |
* @returns "[object URIParameter]" | |
* @type Object | |
*/ | |
function URIParameter (uriString) { | |
var queryStrings, i, l, temp; | |
if (!(this instanceof URIParameter)) { | |
throw new Error(this + ' is not a object created by constructor'); | |
} | |
uriString += ''; | |
if (/[\r\n]/.test(uriString)) { | |
throw new Error('not well-formed URI'); | |
} | |
queryStrings = uriString.replace(/#.*$|^[^?]*/g, ''); | |
if (queryStrings.charAt(0) !== '?') { | |
throw new Error(uriString + ' doesn\'t include a query string'); | |
} | |
this.queryStrings = queryStrings; | |
this.parameters = {length: 0}; | |
queryStrings = queryStrings.slice(1).split(/[&;]/); | |
for (i = 0, l = queryStrings.length; i < l; i++) { | |
temp = queryStrings[i].match(/^([^=]+)=(.*)$/); | |
if (temp) { | |
this.addParameter(_decodeURIComponent(temp[1]), _decodeURIComponent(temp[2])); | |
} | |
} | |
return this; | |
} | |
(function () { | |
/** | |
* add Parameter. | |
* @function | |
* @param {String} name parameter-name. | |
* @param {String} value parameter-value. | |
* @returns parameter's length. | |
* @type Number | |
*/ | |
this.addParameter = function (name, value) { | |
var parameters, target; | |
parameters = this.parameters; | |
parameters[parameters.length] = {name: name, value: value}; | |
if (name !== 'length') { | |
if (name in parameters) { | |
target = parameters[name]; | |
if (typeof target === 'object' && 'length' in target) { | |
target[target.length] = value; | |
} else { | |
target = [target, value]; | |
} | |
parameters[name] = target; | |
} else { | |
parameters[name] = value; | |
} | |
} | |
return ++parameters.length; | |
}; | |
/** | |
* remove Parameter. | |
* @function | |
* @param {String} name parameter-name. | |
* @param {String} value parameter-value. | |
* @returns parameter's length. | |
* @type Number | |
*/ | |
this.removeParameter = function (name) { | |
var i, l, parametersLength, parameters, target; | |
parameters = this.parameters; | |
if (name in parameters) { | |
target = parameters[name]; | |
l = typeof target === 'object' && 'length' in target ? target.length : 1; | |
delete parameters[name]; | |
for (i = 0, parametersLength = parameters.length; i < parametersLength || l > 0; i++) { | |
if (parameters[i].name === name) { | |
delete parameters[i]; | |
parameters.length--; | |
l--; | |
} | |
} | |
} | |
return parameters.length; | |
}; | |
}).call(URIParameter.prototype); | |
return URIParameter; | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
参考リンク。