有时候我们需要在一个隐藏域中,放入一个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)); } }