-
-
Save SpacemanPete/024b8e6caf69252f956f to your computer and use it in GitHub Desktop.
I changed the **decodeURI** method for decoding the search parameters to **decodeURIComponent** to match the encoding iplementation I'm using on a project, **decodeURI** alone didn't handle commas. Also added regex to replace the '+' encoded by Jquery's $.param() search encoding method. Surprising they don't have an easy $.deparam() method to ac…
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
// ********************************************************************************** | |
// | |
// Javascript utility to parse page URL into Javascript Object for easy manipulation | |
// | |
// Written by: aymanfarhat | |
// | |
// Source: https://gist.github.com/aymanfarhat/5608517 | |
// | |
// Dependencies: | |
// none | |
// | |
// ********************************************************************************** | |
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 = decodeURIComponent(get_param[0]); | |
val = decodeURIComponent(get_param[1]).replace(/\+/g,' '); | |
} 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