nuijs
Version:
nui框架
70 lines (64 loc) • 2.48 kB
JavaScript
/**
* Nui&jQuery扩展
*/
Nui.define(function(){
Nui.win = $(window);
Nui.doc = $(document);
var prop = $.fn.prop;
var serializeArray = $.fn.serializeArray;
$.fn.extend({
/**
* @func 添加或者移除表单属性
* @param name <String>
* @param value <String, Boolean>
* @param className <String, Function> 当第二个参数为false时移除类名,否则增加类名
*/
prop:function(){
var args = arguments, arr = Array.prototype.slice.call(args, 0, 2), $ele = $(this), cls = args[2];
if(typeof cls === 'function'){
cls = cls.apply(this, arr)
}
if(cls){
$ele[args[1] === false ? 'removeClass':'addClass'](cls)
}
return prop.apply(this, arr)
},
/**
* @func 序列化表单值转成url参数形式
* @param disabled <Boolean> 是否包含禁用元素
*/
serialize:function(disabled){
return $.param(this.serializeArray(disabled));
},
/**
* @func 序列化表单值转为JSON数组
* @param disabled <Boolean> 是否包含禁用元素
*/
serializeArray:function(disabled){
if(!disabled){
return serializeArray.call(this)
}
return this.map(function(){
var elements = $.prop(this, 'elements');
return elements ? $.makeArray(elements) : this;
})
.filter(function(){
var type = this.type;
return this.name && this.nodeName &&
(/^(?:input|select|textarea|keygen)/i).test(this.nodeName) &&
!(/^(?:submit|button|image|reset|file)$/i).test(type) &&
(this.checked || !(/^(?:checkbox|radio)$/i).test(type));
})
.map(function(i, elem){
var val = $(this).val();
return val == null ?
null :
$.isArray(val) ?
$.map(val, function(val){
return {name: elem.name, value: val.replace( /\r?\n/g, "\r\n" )};
}) :
{name: elem.name, value: val.replace( /\r?\n/g, "\r\n" )};
}).get();
}
})
})