Skip to content

Instantly share code, notes, and snippets.

@SpacemanPete
Forked from aymanfarhat/urlobject.js
Last active November 13, 2015 21:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save SpacemanPete/024b8e6caf69252f956f to your computer and use it in GitHub Desktop.
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…
// **********************************************************************************
//
// 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