JAVASCRIPT   69

serialize.js

Guest on 24th August 2021 06:20:06 PM

  1. define([
  2.         "./core",
  3.         "./manipulation/var/rcheckableType",
  4.         "./core/init",
  5.         "./traversing", // filter
  6.         "./attributes/prop"
  7. ], function( jQuery, rcheckableType ) {
  8.  
  9. var r20 = /%20/g,
  10.         rbracket = /\[\]$/,
  11.         rCRLF = /\r?\n/g,
  12.         rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
  13.         rsubmittable = /^(?:input|select|textarea|keygen)/i;
  14.  
  15. function buildParams( prefix, obj, traditional, add ) {
  16.         var name;
  17.  
  18.         if ( jQuery.isArray( obj ) ) {
  19.                 // Serialize array item.
  20.                 jQuery.each( obj, function( i, v ) {
  21.                         if ( traditional || rbracket.test( prefix ) ) {
  22.                                 // Treat each array item as a scalar.
  23.                                 add( prefix, v );
  24.  
  25.                         } else {
  26.                                 // Item is non-scalar (array or object), encode its numeric index.
  27.                                 buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add );
  28.                         }
  29.                 });
  30.  
  31.         } else if ( !traditional && jQuery.type( obj ) === "object" ) {
  32.                 // Serialize object item.
  33.                 for ( name in obj ) {
  34.                         buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
  35.                 }
  36.  
  37.         } else {
  38.                 // Serialize scalar item.
  39.                 add( prefix, obj );
  40.         }
  41. }
  42.  
  43. // Serialize an array of form elements or a set of
  44. // key/values into a query string
  45. jQuery.param = function( a, traditional ) {
  46.         var prefix,
  47.                 s = [],
  48.                 add = function( key, value ) {
  49.                         // If value is a function, invoke it and return its value
  50.                         value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );
  51.                         s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value );
  52.                 };
  53.  
  54.         // Set traditional to true for jQuery <= 1.3.2 behavior.
  55.         if ( traditional === undefined ) {
  56.                 traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;
  57.         }
  58.  
  59.         // If an array was passed in, assume that it is an array of form elements.
  60.         if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
  61.                 // Serialize the form elements
  62.                 jQuery.each( a, function() {
  63.                         add( this.name, this.value );
  64.                 });
  65.  
  66.         } else {
  67.                 // If traditional, encode the "old" way (the way 1.3.2 or older
  68.                 // did it), otherwise encode params recursively.
  69.                 for ( prefix in a ) {
  70.                         buildParams( prefix, a[ prefix ], traditional, add );
  71.                 }
  72.         }
  73.  
  74.         // Return the resulting serialization
  75.         return s.join( "&" ).replace( r20, "+" );
  76. };
  77.  
  78. jQuery.fn.extend({
  79.         serialize: function() {
  80.                 return jQuery.param( this.serializeArray() );
  81.         },
  82.         serializeArray: function() {
  83.                 return this.map(function() {
  84.                         // Can add propHook for "elements" to filter or add form elements
  85.                         var elements = jQuery.prop( this, "elements" );
  86.                         return elements ? jQuery.makeArray( elements ) : this;
  87.                 })
  88.                 .filter(function() {
  89.                         var type = this.type;
  90.  
  91.                         // Use .is( ":disabled" ) so that fieldset[disabled] works
  92.                         return this.name && !jQuery( this ).is( ":disabled" ) &&
  93.                                 rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
  94.                                 ( this.checked || !rcheckableType.test( type ) );
  95.                 })
  96.                 .map(function( i, elem ) {
  97.                         var val = jQuery( this ).val();
  98.  
  99.                         return val == null ?
  100.                                 null :
  101.                                 jQuery.isArray( val ) ?
  102.                                         jQuery.map( val, function( val ) {
  103.                                                 return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
  104.                                         }) :
  105.                                         { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
  106.                 }).get();
  107.         }
  108. });
  109.  
  110. return jQuery;
  111. });

Raw Paste


Login or Register to edit or fork this paste. It's free.