为url查询或者ajax 将对象或者数组转为url参数或ajax参数,是挂在jQuery对象上的静态方法,有码有真相:
var myInfo = { userid:'123', fullname:['henry','li'], intro:{html:5, css:3} }; console.log($.param(myInfo)); //"userid=123&fullname%5B%5D=henry&fullname%5B%5D=li&intro%5Bhtml%5D=5&intro%5Bcss%5D=3" //userid=123&fullname[]=henry&fullname[]=li&intro[html]=5&intro[css]=3" console.log($.param(myInfo),true); //"a=%5Bobject+Object%5D&b=1&b=2&b=3" //"a=[object+Object]&b=1&b=2&b=3"
可以看出第二个参数类似于控制深度。
源码
// Serialize an array of form elements or a set of// key/values into a query stringjQuery.param = function( a, traditional ) { var prefix,// 循环的键命名 for(var k in) 这里即k s = [],//返回的数据 add = function( key, value ) { //key value对应循环中每项的name和值如:<input function><h2>.serializeArray()</h2><blockquote><h4>这个是挂载在jQuery.fn方法上的,将当前jQuery <a href="http://www.php.cn/code/3464.html" target="_blank">form对象</a>转为数组对象,实例</h4></blockquote><p> </p><p class="cnblogs_code" style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"><br></p><pre class="brush:php;toolbar:false">var r20 = /%20/g, rbracket = /\[\]$/, rCRLF = /\r?\n/g, rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, rsubmittable = /^(?:input|select|textarea|keygen)/i; serializeArray: function() { //jQuery.fn.map return this.map(function() { // Can add propHook for "elements" to filter or add form elements // 如果当前对象具有elements的prop,则使用,反之使用自身 // elements是原生js中表单所有的input。 如:document.forms[0].elements var elements = jQuery.prop( this, "elements" ); return elements ? jQuery.makeArray( elements ) : this; }) .filter(function() {//jQuery.fn.filter var type = this.type; // Use .is(":disabled") so that fieldset[disabled] works // 过滤掉没有name、disabled的、可以提交的几个标签,如过是可选中的元素,则checked为真 return this.name && !jQuery( this ).is( ":disabled" ) && rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && ( this.checked || !rcheckableType.test( type ) ); }) .map(function( i, elem ) {////jQuery.fn.map var val = jQuery( this ).val(); //设置value return val == null ? null : jQuery.isArray( val ) ? jQuery.map( val, function( val ) { return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; }) : { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; }).get();//转为真正的数组 }
其中使用的get方法就很简单了
get: function( num ) { return num != null ? // Return a 'clean' array ( num <p><br>至于jQuery.prop方法,需要新起一篇文章介绍了。简单的说,就是获取元素的prop。 element.checked、element.value,是从attr中分离出来的</p><h2>.serialize</h2><blockquote><h4>serialize就简单了,相当于serializeArray + parmp,将表单直接转为url查询<a href="http://www.php.cn/wiki/57.html" target="_blank">字符串</a>。代码也简单。同样是在jQuery的fn上</h4></blockquote><p> </p><p class="cnblogs_code" style="background-color: #f5f5f5; border: #cccccc 1px solid; padding: 5px;"><br></p><pre class="brush:php;toolbar:false">serialize: function() { return jQuery.param( this.serializeArray() ); },
以上就是尝试比较jquery的serializeArray、param 与serializeArray 的区别与用法实例详解的详细内容,更多请关注php中文网其它相关文章!
Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号