-
-
Save morbidcamel101/b2709c4365d75c141fd55dd50374f0b4 to your computer and use it in GitHub Desktop.
JS utility function that: - Breaks down url to an object with accessible properties: protocol, parameters object, host, hash, etc... - Converts url parameters to key/value pairs - Convert parameter numeric values to their base types instead of strings - Store multiple values of a parameter in an array - Unescape parameter values
This file contains 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
function urlObject(options) { | |
"use strict"; | |
/*global window, document*/ | |
var url_search_arr, | |
option_key, | |
i, | |
urlObj, | |
get_param, | |
key, | |
val, | |
url_query, | |
url_get_params = {}, | |
a = document.createElement('a'), | |
default_options = { | |
'url': window.location.href, | |
'unescape': true, | |
'convert_num': true | |
}; | |
if (typeof options !== "object") { | |
options = default_options; | |
} else { | |
for (option_key in default_options) { | |
if (default_options.hasOwnProperty(option_key)) { | |
if (options[option_key] === undefined) { | |
options[option_key] = default_options[option_key]; | |
} | |
} | |
} | |
} | |
a.href = options.url; | |
url_query = a.search.substring(1); | |
url_search_arr = url_query.split('&'); | |
if (url_search_arr[0].length > 1) { | |
for (i = 0; i < url_search_arr.length; i += 1) { | |
get_param = url_search_arr[i].split("="); | |
if (options.unescape) { | |
key = decodeURI(get_param[0]); | |
val = decodeURI(get_param[1]); | |
} else { | |
key = get_param[0]; | |
val = get_param[1]; | |
} | |
if (options.convert_num) { | |
if (val.match(/^\d+$/)) { | |
val = parseInt(val, 10); | |
} else if (val.match(/^\d+\.\d+$/)) { | |
val = parseFloat(val); | |
} | |
} | |
if (url_get_params[key] === undefined) { | |
url_get_params[key] = val; | |
} else if (typeof url_get_params[key] === "string") { | |
url_get_params[key] = [url_get_params[key], val]; | |
} else { | |
url_get_params[key].push(val); | |
} | |
get_param = []; | |
} | |
} | |
urlObj = { | |
protocol: a.protocol, | |
hostname: a.hostname, | |
host: a.host, | |
port: a.port, | |
hash: a.hash.substr(1), | |
pathname: a.pathname, | |
search: a.search, | |
parameters: url_get_params | |
}; | |
return urlObj; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment