I am working on a project and need URL param-parsing, as I usually do. But this time I decided to try something new - based on ColdFusion syntax that I have used for ages.
ColdFusion creates a system-level hash structure named "URL" that contains all the URL params. This is very convenient, so I created a jQuery extension to do the same thing. It creates and populates a "$.url" hash on-load. This is a static var similar to $.browser. The $.url object does the *opposite* of the $.serialize method: $.serialize converts complex data TO an URL format, while $.url creates a data object FROM the URL params. My initial version was very small - only a few bytes of code is needed to parse simple parameters. This would address the basic needs of most users. So I think this *at a minimum* would be a valuable addition to the jQuery core. The code is very small, creates no conflicts, and takes barely 1ms. After I created the basic method, I added more elaborate parsing to store numbers and booleans in their proper format, and to allow 'complex data' to be passed - ie, arrays and hashes: page.html?actors=[Eastwood,Bronson,Heston] page.html?actor={first: Clint, last: Eastwood} This includes automatic array creation when a param key is repeated: page.html?actor=Eastwood&actor=Bronson&actor=Heston ...becomes: actor=[ Eastwood, Bronson, Heston ] This also allows arrays-of-arrays and arrays-of-hashes: page.html?actor={first: Clint, last: Eastwood}&actor={first: Charles, last: Bronson} ...becomes: actor = [ 0: { first: 'Clint' , last: 'Eastwood' } 1: { first: 'Charles' , last: 'Bronson' } ] You can see and test a demo page here... http://layout.jquery-dev.net/url_parsing.html There are a number of test URLs (hyperlinks) provided to demonstrate the different types of parsing, but you can append any params you want to the URL to see how they are parsed. To illustrate the size of the 'long version', here is the partially minified code: // MINIFIED CODE (860 bytes) function setURL(){ $.url={};$.urlParams=[]; var s=self.location.search.substr(1),p,d,k,v,i; if(!s)return; p=s.split("&"); for(i=0;i<p.length;i++){ d=p[i].split("=");k=$.trim(d[0]); if(k){ v=d[1]==undefined?true:parse(d[1]); if(!$.url[k]){$.url[k]=v;$.urlParams.push(k);} else{if(!$.isArray($.url[k])||($.isArray(v)&&typeof $.url[k][0]! ='object'))$.url[k]=[$.url[k]];$.url[k].push(v);} } } function parse(x){ x=$.trim(x); if(!x)return ""; var c=x.length-1,f=x.charAt(0),l=x.charAt (c),A=f=="["&&l=="]",H=f=="{"&&l=="}",d,h,k,o,i; if(A||H){ o=A?[]:{};d=x.substr(1,c-1).split(",") for(i=0;i<d.length;i++){ if(A)o[i]=parse(d[i]); else if(d[i]){h=d[i].split(":");k=$.trim(h[0]);if(k)o[k]=parse(h[1]);} } return o; } else if(!isNaN(x))return Number(x); else if(x==="true")return true; else if(x==="false")return false; else return x; } } The demo page contains a more readable, commented version of the code above. If there is any interst in this code, feel free to help yourself. I did not keep a copy of the short-version, but it would not take long to recreate - this is not complex code. SO, do John and the gang feel this addition would be worthwhile for jQuery? I'm suggesting this partly out of self-interest - I copy the same URL-parsing functions to every project I work on. I'd prefer that this basic functionality was part of jQuery, and I feel a $.url object is the most intuitive and flexible way to do it. At a minimum, this will become part of my standard jQuery extensions library. I prefer working with an 'URL object' rather than using a 'parsing method': // using an URL Object if ($.url.section) doSomething( $.url.section ); // using a Parsing Method var section = parseURL('section'); if (section) doSomething( section ); The ability to use complex objects offers more options for passing JS data between pages: $.each($.url.actor, function (idx, Actor) { $('#List').append('<li>'+ Actor.first +' '+ Actor.last +'</li>'); }); The example above is a little silly, but you see how it could be useful for passing 'state' or other data. Feedback? /Kevin --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "jQuery Development" group. To post to this group, send email to jquery-dev@googlegroups.com To unsubscribe from this group, send email to jquery-dev+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/jquery-dev?hl=en -~----------~----~----~----~------~----~------~--~---