Skip to content

Instantly share code, notes, and snippets.

@danheberden
Created March 30, 2011 18:49
Show Gist options
  • Save danheberden/895000 to your computer and use it in GitHub Desktop.
Save danheberden/895000 to your computer and use it in GitHub Desktop.
/*
* .serializeObject (c) Dan Heberden
* danheberden.com
*
* Gives you a pretty object for your form bizniss
*/
(function($){
$.fn.serializeObject = function( trimKey ) {
if ( !this.length ) { return false; }
var $el = this,
data = {},
lookup = data; //current reference of data
$el.find(':input[type!="checkbox"][type!="radio"], input:checked').each(function() {
// data[a][b] becomes [ data, a, b ]
var named = this.name.replace(/\[([^\]]+)?\]/g, ',$1').split(','),
cap = named.length - 1;
for ( var i = trimKey ? 1 : 0 ; i < cap; i++ ) {
// move down the tree - create objects or array if necessary
lookup = lookup[ named[i] ] = lookup[ named[i] ] ||
( named[i+1] == "" ? [] : {} );
}
// at the end, psuh or assign the value
if ( lookup.length != undefined ) {
lookup.push( $(this).val() );
}else {
lookup[ named[ cap ] ] = $(this).val();
}
// assign the reference back to root
lookup = data;
});
return data;
};
})(jQuery);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment