100 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/**
 | 
						|
 * @author Kyle Florence <kyle[dot]florence[at]gmail[dot]com>
 | 
						|
 * @website https://github.com/kflorence/jquery-deserialize/
 | 
						|
 * @version 1.1.0
 | 
						|
 *
 | 
						|
 * Dual licensed under the MIT and GPLv2 licenses.
 | 
						|
 */
 | 
						|
 | 
						|
(function( jQuery ) {
 | 
						|
 | 
						|
var push = Array.prototype.push,
 | 
						|
	rcheck = /^(radio|checkbox)$/i,
 | 
						|
	rselect = /^(option|select-one|select-multiple)$/i,
 | 
						|
	rvalue = /^(hidden|text|search|tel|url|email|password|datetime|date|month|week|time|datetime-local|number|range|color|submit|image|reset|button|textarea)$/i;
 | 
						|
 | 
						|
jQuery.fn.extend({
 | 
						|
	deserialize: function( data, callback ) {
 | 
						|
		if ( !this.length || !data ) {
 | 
						|
			return this;
 | 
						|
		}
 | 
						|
 | 
						|
		var i, length,
 | 
						|
			elements = this[ 0 ].elements || this.find( ":input" ).get(),
 | 
						|
			normalized = [];
 | 
						|
 | 
						|
		if ( !elements ) {
 | 
						|
			return this;
 | 
						|
		}
 | 
						|
 | 
						|
		if ( jQuery.isArray( data ) ) {
 | 
						|
			normalized = data;
 | 
						|
		} else if ( jQuery.isPlainObject( data ) ) {
 | 
						|
			var key, value;
 | 
						|
 | 
						|
			for ( key in data ) {
 | 
						|
				jQuery.isArray( value = data[ key ] ) ?
 | 
						|
					push.apply( normalized, jQuery.map( value, function( v ) {
 | 
						|
						return { name: key, value: v };
 | 
						|
					})) : push.call( normalized, { name: key, value: value } );
 | 
						|
			}
 | 
						|
		} else if ( typeof data === "string" ) {
 | 
						|
			var parts;
 | 
						|
 | 
						|
			data = decodeURIComponent( data ).split( "&" );
 | 
						|
 | 
						|
			for ( i = 0, length = data.length; i < length; i++ ) {
 | 
						|
				parts = data[ i ].split( "=" );
 | 
						|
				push.call( normalized, { name: parts[ 0 ], value: parts[ 1 ] } );
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		if ( !( length = normalized.length ) ) {
 | 
						|
			return this;
 | 
						|
		}
 | 
						|
 | 
						|
		var current, element, item, j, len, property, type;
 | 
						|
 | 
						|
		for ( i = 0; i < length; i++ ) {
 | 
						|
			current = normalized[ i ];
 | 
						|
 | 
						|
			if ( !( element = elements[ current.name ] ) ) {
 | 
						|
				continue;
 | 
						|
			}
 | 
						|
 | 
						|
			type = ( len = element.length ) ? element[ 0 ] : element;
 | 
						|
			type = type.type || type.nodeName;
 | 
						|
			property = null;
 | 
						|
 | 
						|
			if ( rvalue.test( type ) ) {
 | 
						|
				property = "value";
 | 
						|
			} else if ( rcheck.test( type ) ) {
 | 
						|
				property = "checked";
 | 
						|
			} else if ( rselect.test( type ) ) {
 | 
						|
				property = "selected";
 | 
						|
			}
 | 
						|
 | 
						|
			// Handle element group
 | 
						|
			if ( len ) {
 | 
						|
				for ( j = 0; j < len; j++ ) {
 | 
						|
					item = element [ j ];
 | 
						|
 | 
						|
					if ( item.value == current.value ) {
 | 
						|
						item[ property ] = true;
 | 
						|
					}
 | 
						|
				}
 | 
						|
			} else {
 | 
						|
				element[ property ] = current.value;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		if ( jQuery.isFunction( callback ) ) {
 | 
						|
			callback.call( this );
 | 
						|
		}
 | 
						|
 | 
						|
		return this;
 | 
						|
	}
 | 
						|
});
 | 
						|
 | 
						|
})( jQuery );
 |