Given a banana (URI) the function will split it and return an ice-cream (object) made from its path, hash, query and params
Page created 2011 March 7; updated 2011 August 22
Please note that URI.js became the delicious successor to URI Banana Split
<script type="text/javascript">
//<![CDATA[
// Version 1.1.
uri_banana_split = function(uri) {
var b,i,len,
o = {params: {}, query: false},
a = uri.split('#');
b = a.shift().split('?');
o.hash = a.join('#') || false;
o.path = b.shift() || false;
a = b.join('?').split('&');
if (a[0] !== '') {
len = a.length;
o.query = a[0];
for (i = 0; i < len; i++) {
b = a[i].split('=');
o.params[b.shift().replace(/^amp;/, '')] = (typeof b[0] === 'undefined') ? true: b.join('=');
}
}
return o;
};
//]]>
</script>
If path, hash or query are empty false is returned. If params is empty an empty object is returned.
Feedback welcomed.
<script type="text/javascript">
//<![CDATA[
$(function() {
var uri = [
'',
'#hash',
'?key',
'?key#hash',
'?key=value',
'?key=value&key2=value2',
'?key=value&key2=value2',
'?key=value?bad=bad&key2=value2',
'?key=value&key2=value2#hash?asd',
'?key=value&key2=value2#hash?asd#otherhash',
'?key=value&key2=value2',
'#hash?key',
'path',
'path#hash',
'path?key',
'path?key#hash',
'path#hash?key'
];
var html = '';
for (var i = 0; i < uri.length; i++) {
var o = uri_banana_split(uri[i]);
html += 'uri: ' + uri[i];
html += "\n" + 'o.path: ' + o.path;
html += "\n" + 'o.hash: ' + o.hash;
html += "\n" + 'o.query: ' + o.query;
if (o.params === false) {
html += "\n" + 'o.params: ' + o.params;
}
else {
html += "\n" + 'o.params:';
for (var j in o.params)
{
html += "\n" + j + '=' + o.params[j];
}
}
html += "\n\n";
}
$('div.taster-test').append('<pre>'+html+'</pre>');
});
//]]>
</script>