jQuery.fn. serialize()(序列化函数,筛选出表单中需要提交的数据并以序列化字符串方式返回,形如:“key=value&key=value…”)
jQuery.fn. serializeArray()(筛选出表单中需要提交的数据并以key/value键值对的对象数组格式返回,返回[{name:’key’,value:’select1′},{name:’selectM’,value:’selectM1′}, {name:’selectM’,value:’selectM2′}, { name:’key2′,value:0}…])
jQuery.param(serializeArray, traditional )(将key/value键值对的对象数组序列化为“key=value&key=value…”字符串)。
serialize直接调用jQuery.param( this.serializeArray() )即可。
serializeArray的源码如下:主要进行三个步骤:提取表单元素、过滤出满足提交条件的表单元素、组合成key/value键值对的对象数组
serializeArray: function() {
//将form中的表单相关的元素取出来组成数组
return this.map(function(){
//表单节点有elements这个特征
var elements = jQuery.prop( this, "elements" );
return elements ? jQuery.makeArray( elements ) : this;
})
//过滤出为需要提交的表单元素(有name名称、非disabled元素、非提交按钮等元素、checkbox/radio的checked的元素)
.filter(function(){
var type = this.type;
//使用.is(":disabled")过滤掉不可用的表单元素
return this.name && !jQuery( this ).is( ":disabled" ) &&
rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
( this.checked || !manipulation_rcheckableType.test( type ) );
})
//将表单提交元素组成name和value的对象数组
.map(function( i, elem ){
var val = jQuery( this ).val();
return val == null ?
null :
jQuery.isArray( val ) ?
jQuery.map( val, function( val ){
return { name: elem.name, value: val.replace( rCRLF, "rn" ) };
}) :
{ name: elem.name, value: val.replace( rCRLF, "rn" ) };
}).get();
} 需要注意的是jQuery的过滤结果符合正常的表单提交结果://过滤出为需要提交的表单元素(有name名称、非disabled元素、非提交按钮等元素、checkbox/radio的checked的元素)
param函数源码如下:主要进行两个处理:将key/value成作为URI组件编码(保证key和value不会出现特殊符号,即保证了“=”分割的正确性)、使用“&”链接并将空白符被替换成了”+”
jQuery.param = function( a, traditional ) {
var prefix,
s = [],
add = function( key, value ) {
//如果value是函数,执行他得到真正的value
value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value );










