有时候我们需要在一个隐藏域中,放入一个json数据,这个时候操作这些数据就比较麻烦。下面是我写的一个方法,仅供参考:
/**
*
* @param $input 文本域的jquery对象
* @param data 要插入的值,为null时表示删除
* @param index 索引,例如inputJsonOperation.get([{bar:{name:'姓名',sex:'男'},box:true},{...},...], '0.bar.name');
* @param defaultValue 默认值,未找到默认返回 undefined
* @returns {any}
*/
var inputJsonOperation = {
get:function($input,index,defaultValue){
var _data = $input.val();
if(!_data){
return defaultValue;
}else{
_data = JSON.parse(_data);
}
if(typeof index !== "undefined" && index !== null && index !== ''){
if(typeof index !== 'string') index = String(index);
var _tmp = _data;
$.each(index.split('.'),function (i,n) {
var strNumber = Number(n);
if (!isNaN(strNumber)) n = strNumber;
if(typeof _tmp[n] === 'undefined'){
_data = defaultValue;
return false;
}
_tmp = _tmp[n];
});
if(_data!== undefined) _data = _tmp;
}
return _data;
},
set:function($input,data,index){
if(data !== null && $.isEmptyObject(data)){
$input.val('');
return true;
}
if(typeof index !== "undefined" && index !== ''){
if(typeof index !== 'string') index = String(index);
var _oldData = this.get($input),
_stringOldData = '_oldData',
_tmp = _oldData;
$.each(index.split('.'),function (i,n) {
var strNumber = Number(n);
if (!isNaN(strNumber)){
_stringOldData += '['+strNumber+']';
n = strNumber;
}else{
_stringOldData += '["'+n+'"]';
}
if(typeof _tmp[n] === 'undefined'){
return false;
}
_tmp = _tmp[n];
});
if(data === null){
_stringOldData = _stringOldData.split('[');
var lastIndex = _stringOldData[_stringOldData.length-1].replace(']','');
_stringOldData.splice(_stringOldData.length-1,1);
_stringOldData = _stringOldData.join('[');
var _isArray = false;
eval("_isArray = $.isArray("+ _stringOldData +")");
if(_isArray){
_stringOldData = _stringOldData + '.splice(lastIndex,1)';
}else{
_stringOldData = 'delete '+ _stringOldData + '['+lastIndex+']';
}
}else{
_stringOldData += '= data';
}
eval(_stringOldData);
data = _oldData;
}
if(!$.isArray(data)) data = [data];
$input.val(data.length < 1?'':JSON.stringify(data));
}
}