幾分鐘教您擴(kuò)展jQuery的Json技巧說明
接下來給大伙介紹幾個(gè)例子,相信做網(wǎng)頁的朋友都遇到n級(jí)菜單的情景,但點(diǎn)擊某菜單按鈕時(shí),如果它的子菜單是顯示的,則隱藏子菜單,如果子菜單隱藏,則顯示出來,傳統(tǒng)的javascript做法是先用getElementById取出子菜單所在容器的id,在判斷該容器的擴(kuò)展Jquery的Json
如果等于則設(shè)為block,如果不等于這設(shè)為none,如果在將效果設(shè)置復(fù)雜一點(diǎn),當(dāng)點(diǎn)擊按鈕時(shí),不是忽然隱藏和顯示子菜單,而是高度平滑的轉(zhuǎn)變,這時(shí)就要通過setTimeout來設(shè)置子菜單的height了。
再復(fù)雜一點(diǎn)透明度也平滑的消失和顯現(xiàn),這時(shí)顯現(xiàn)下來需要編寫很多代碼,如果 js 基礎(chǔ)不好的朋友可能只能從別人寫好的代碼拿過來修改了!jQuery實(shí)現(xiàn)上面效果只需要1句話就行,$("#a").toggle("slow"),,學(xué)完jQuery后還需要抄襲修改別人的代碼嗎?下面我們逐個(gè)介紹jQuery用于效果處理的方法。#t#
本文在jQuery基礎(chǔ)上擴(kuò)展了其處理json字符串能力,偉大的jQuery將會(huì)更偉大用jQuery寫javascript非常高效,jQuery對ajax的封裝也非常到位;使用jQuery一段時(shí)間后發(fā)現(xiàn),jQuery在處理json字符串方面功能不是很強(qiáng),至少比prototype.js差遠(yuǎn)了。
以前用習(xí)慣了擴(kuò)展Jquery的Json,在進(jìn)行ajax開發(fā)時(shí),處理json數(shù)據(jù)非常方便;而在jQuery中,只提供了一個(gè)簡單的jQuery.getJSON()方法,并未提供jQuery本身對json數(shù)據(jù)的轉(zhuǎn)換處理,將json字符串轉(zhuǎn)換為javascript數(shù)據(jù)對象還比較容易利用eval()函數(shù)即可,但要將javascript的數(shù)據(jù)類型轉(zhuǎn)換成json字符串就比較難了;剛開始不得同
時(shí)使用prototype.js和jQuery。
擴(kuò)展Jquery的Json代碼:
- //擴(kuò)展jQuery對json字符串的轉(zhuǎn)換
- jQuery.extend({
- /** * @see 將json字符串轉(zhuǎn)換為對象 * @param json字符串 * @return 返回object,array,string等對象 */
- evalJSON: function(strJson) {
- return eval("(" + strJson + ")");
- }
- });
- jQuery.extend({
- /** * @see 將javascript數(shù)據(jù)類型轉(zhuǎn)換為json字符串 * @param 待轉(zhuǎn)換對象,支持object,array,string,function,number,boolean,regexp * @return 返回json字符串 */
- toJSON: function(object) {
- var type = typeof object;
- if ('object' == type) {
- if (Array == object.constructor) type = 'array';
- else if (RegExp == object.constructor) type = 'regexp';
- else type = 'object';
- }
- switch (type) {
- case 'undefined':
- case 'unknown':
- return;
- break;
- case 'function':
- case 'boolean':
- case 'regexp':
- return object.toString();
- break;
- case 'number':
- return isFinite(object) ? object.toString() : 'null';
- break;
- case 'string':
- return '"' + object.replace(/(\\|\")/g, "\\$1").replace(/\n|\r|\t/g, function() {
- var a = arguments[0];
- return (a == '\n') ? '\\n': (a == '\r') ? '\\r': (a == '\t') ? '\\t': ""
- }) + '"';
- break;
- case 'object':
- if (object === null) return 'null';
- var results = [];
- for (var property in object) {
- var value = jQuery.toJSON(object[property]);
- if (value !== undefined) results.push(jQuery.toJSON(property) + ':' + value);
- }
- return '{' + results.join(',') + '}';
- break;
- case 'array':
- var results = [];
- for (var i = 0; i < object.length; i++) {
- var value = jQuery.toJSON(object[i]);
- if (value !== undefined) results.push(value);
- }
- return '[' + results.join(',') + ']';
- break;
- }
- }
- });示例:
- var obj = {
- name: "sean",
- friend: ["fans", "bruce", "wawa"],
- action: function() {
- alert("gogogog")
- },
- boy: true,
- age: 26,
- reg: /\b([a-z]+) \1\b/gi,
- child: {
- name: "none",
- age: -1
- }
- };
- var json = $.toJSON(obj);
- var objx = $.evalJSON(json);