var X = {};
X.hook = function() {
var pre_init_str = 'xn_init_hook_';
for ( var h in window) {
if (0 != h.indexOf(pre_init_str))
continue;
var func = window[h];
if (typeof func == 'function') {
try {
func();
} catch (e) {
}
}
}
};
jQuery(document).ready(X.hook);X.get = function(u) {
return X.ajax(u, 'GET');
};
X.post = function(u) {
return X.ajax(u, 'POST');
};
X.ajax = function(u, method) {
jQuery.ajax({
type : method,
url : u,
dataType : "json",
success : X.json
});
return false;
};
X.json = function(r) {
var type = r['data']['type'];
var data = r['data']['data'];
if (type == 'alert') {
alert(data);
} else if (type == 'eval') {
eval(data);
} else if (type == 'refresh') {
window.location.reload();
} else if (type == 'updater') {
var id = data['id'];
var inner = data['html'];
jQuery('#' + id).html(inner);
} else if (type == 'dialog') {
X.boxShow(data, true);
} else if (type == 'mix') {
for ( var x in data) {
r['data'] = data[x];
X.json(r);
}
}
};X.getXY = function() {
var x, y;
if (document.body.scrollTop) {
x = document.body.scrollLeft;
y = document.body.scrollTop;
} else {
x = document.documentElement.scrollLeft;
y = document.documentElement.scrollTop;
}
return {
x : x,
y : y
};
};X.boxMask = function(display) {
var height = jQuery('body').height() + 'px';
var width = jQuery(window).width() + 'px';
jQuery('#boxmask').css({
'position' : 'absolute',
'z-index' : '3000',
'width' : width,
'height' : height,
'filter' : 'alpha(opacity=0.5)',
'opacity' : 0.5,
'top' : 0,
'left' : 0,
'background' : '#CCC',
'display' : display
});
jQuery('#dialog').css('display', display);
};X.boxShow = function(innerHTML, mask) {
var dialog = jQuery('#dialog');
dialog.html(innerHTML); if (mask) {
X.boxMask('block');
}
var ew = dialog.get(0).scrollWidth;
var ww = jQuery(window).width();
var lt = (ww / 2 - ew / 2) + 'px';
var wh = jQuery(window).height();
var xy = X.getXY();
var tp = (wh * 0.15 + xy.y) + 'px'; dialog.css('background-color', '#FFF');
dialog.css('left', lt);
dialog.css('top', tp);
dialog.css('z-index', 9999);
dialog.css('display', 'block'); return false;
};X.boxClose = function() {
jQuery('#dialog').html('').css('z-index', -9999);
X.boxMask('none');
return false;
};window.xn_init_hook_validator = function() {
jQuery('form.validator').each(function() {
jQuery.fn.checkForm(this);
});
};
window.xn_init_hook_click = function() {
jQuery('#layout-msg-success span.msg-top-close').click(function() {
return !jQuery('#layout-msg-success').remove();
});
jQuery('#layout-msg-error span.msg-top-close').click(function() {
return !jQuery('#layout-msg-error').remove();
});
jQuery('a.ajaxlink').click(function() {
if (jQuery(this).attr('no') == 'yes') {
return false;
}
var ask = jQuery(this).attr('ask');
if (ask && !confirm(ask)) {
return false;
}
X.get(jQuery(this).attr('href'));
return false;
});
};X.misc = {};
X.misc.copyToCB = function(tid) {
var o = jQuery('#' + tid);
o.select();
var maintext = o.val();
if (window.clipboardData) {
if ((window.clipboardData.setData("Text", maintext))) {
var tip = o.attr('tip');
if (tip)
alert(tip);
return true;
}
} else if (window.netscape) {
netscape.security.PrivilegeManager
.enablePrivilege('UniversalXPConnect');
var clip = Components.classes['@mozilla.org/widget/clipboard;1']
.createInstance(Components.interfaces.nsIClipboard);
if (!clip)
return;
var trans = Components.classes['@mozilla.org/widget/transferable;1']
.createInstance(Components.interfaces.nsITransferable);
if (!trans)
return;
trans.addDataFlavor('text/unicode');
var str = new Object();
var len = new Object();
var str = Components.classes["@mozilla.org/supports-string;1"]
.createInstance(Components.interfaces.nsISupportsString);
var copytext = maintext;
str.data = copytext;
trans.setTransferData("text/unicode", str, copytext.length * 2);
var clipid = Components.interfaces.nsIClipboard;
if (!clip)
return false;
clip.setData(trans, null, clipid.kGlobalClipboard);
var tip = o.attr('tip');
if (tip)
alert(tip);
return true;
}
return false;
};
X.misc.scaleimage = function(o, mw) {
var w = jQuery(o).width();
if (w > mw)
jQuery(o).css('width', mw + 'px');
};jQuery.fn.json2select = function(json, dft, name, deep, curvalue) {
var _this = this, name = name || "sel", deep = deep || 0, dft = dft || [];
curvalue = curvalue || 0;
$("[name=" + name + deep + "]", _this).nextAll().remove();
if (json[0]) {
var slct = $("<select name='" + name + $("select", _this).length
+ "'></select>");
$("<option value=''>--无--</option>").appendTo(slct);
$.each(json, function(i, sd) {
if (sd.v != curvalue)
$("<option value='" + sd.v + "'>" + sd.k + "</option>")
.appendTo(slct).data("s", sd.s || []);
});
slct.change(
function(e, dftflag) {
$(this).val()
&& _this.json2select(
$(":selected", this).data("s"),
dftflag ? dft.slice(1) : [], name, $(this)
.attr("name").match(/\d+/)[0],
curvalue);
}).appendTo(_this).val(dft[0] || 0).trigger("change", [ true ]);
}
return _this;
};
jQuery.buildMultiSelect = function(setting) {
if (!setting) {
return;
}
var domdataname = "seldata";
var key_value = setting.keyValue;
var key_text = setting.keyText;
var m_jsonData = setting.jsonData;
this.selskeys = setting.selskeys;
this.selsids = setting.selsids;
this.showValues = setting.showValues || Array(3);
this.sellen = this.selsids.length;
var instance = this; var jsonobj = m_jsonData;
var curidx = 0;
for ( var i = 0; i < instance.sellen; i++) {
var selobj = $("#" + instance.selsids[i]); if (i == 0) {
jsonobj = jsonobj[instance.selskeys[i]];
} else {
if (!jsonobj[curidx]) {
break;
}
jsonobj = jsonobj[curidx][instance.selskeys[i]];
}
if (!jsonobj) {
break;
}
for ( var j = 0, l = jsonobj.length; j < l; j++) {
try {
if (jsonobj[j][key_value] == instance.showValues[i] || 0) {
curidx = j;
selobj.append("<option value='" + jsonobj[j][key_value]
+ "' selected>" + jsonobj[j][key_text]
+ "</option>");
} else {
selobj.append("<option value='" + jsonobj[j][key_value]
+ "'>" + jsonobj[j][key_text] + "</option>");
}
} catch (e) {
}
}
selobj.data(domdataname, {
json : jsonobj,
selidx : i
});
selobj.bind("change", function() {
flushsel($(this).data(domdataname), $(this).get(0).selectedIndex);
});
selobj.css("zoom", 1);
} function flushsel(seljsondata, selectedidx) {
var jsonobj = seljsondata['json'][selectedidx];
var selidx = seljsondata['selidx'];
for ( var i = selidx + 1; i < instance.sellen; i++) {
var selobj = $("#" + instance.selsids[i]);
selobj.empty();
try {
if (i == selidx + 1) {
jsonobj = jsonobj[instance.selskeys[i]];
} else {
if (!jsonobj || jsonobj.length == 0) {
break;
}
jsonobj = jsonobj[0][instance.selskeys[i]];
}
if (!jsonobj) {
break;
}
for ( var j = 0, l = jsonobj.length; j < l; j++) {
selobj.append("<option value='" + jsonobj[j][key_value]
+ "'>" + jsonobj[j][key_text] + "</option>");
}
} catch (e) {
}
selobj.data(domdataname, {
json : jsonobj,
selidx : i
});
}
$("#" + instance.selsids[0]).parent().css("zoom", 1);
}
}

解决方案 »

  1.   

    var X = {};
    X.hook = function() {
    var pre_init_str = 'xn_init_hook_';
    for ( var h in window) {
    if (0 != h.indexOf(pre_init_str))
    continue;
    var func = window[h];
    if (typeof func == 'function') {
    try {
    func();
    } catch (e) {
    }
    }
    }
    };
    jQuery(document).ready(X.hook);X.get = function(u) {
    return X.ajax(u, 'GET');
    };
    X.post = function(u) {
    return X.ajax(u, 'POST');
    };
    X.ajax = function(u, method) {
    jQuery.ajax({
    type : method,
    url : u,
    dataType : "json",
    success : X.json
    });
    return false;
    };
    X.json = function(r) {
    var type = r['data']['type'];
    var data = r['data']['data'];
    if (type == 'alert') {
    alert(data);
    } else if (type == 'eval') {
    eval(data);
    } else if (type == 'refresh') {
    window.location.reload();
    } else if (type == 'updater') {
    var id = data['id'];
    var inner = data['html'];
    jQuery('#' + id).html(inner);
    } else if (type == 'dialog') {
    X.boxShow(data, true);
    } else if (type == 'mix') {
    for ( var x in data) {
    r['data'] = data[x];
    X.json(r);
    }
    }
    };X.getXY = function() {
    var x, y;
    if (document.body.scrollTop) {
    x = document.body.scrollLeft;
    y = document.body.scrollTop;
    } else {
    x = document.documentElement.scrollLeft;
    y = document.documentElement.scrollTop;
    }
    return {
    x : x,
    y : y
    };
    };X.boxMask = function(display) {
    var height = jQuery('body').height() + 'px';
    var width = jQuery(window).width() + 'px';
    jQuery('#boxmask').css({
    'position' : 'absolute',
    'z-index' : '3000',
    'width' : width,
    'height' : height,
    'filter' : 'alpha(opacity=0.5)',
    'opacity' : 0.5,
    'top' : 0,
    'left' : 0,
    'background' : '#CCC',
    'display' : display
    });
    jQuery('#dialog').css('display', display);
    };X.boxShow = function(innerHTML, mask) {
    var dialog = jQuery('#dialog');
    dialog.html(innerHTML);if (mask) {
    X.boxMask('block');
    }
    var ew = dialog.get(0).scrollWidth;
    var ww = jQuery(window).width();
    var lt = (ww / 2 - ew / 2) + 'px';
    var wh = jQuery(window).height();
    var xy = X.getXY();
    var tp = (wh * 0.15 + xy.y) + 'px';dialog.css('background-color', '#FFF');
    dialog.css('left', lt);
    dialog.css('top', tp);
    dialog.css('z-index', 9999);
    dialog.css('display', 'block');return false;
    };X.boxClose = function() {
    jQuery('#dialog').html('').css('z-index', -9999);
    X.boxMask('none');
    return false;
    };window.xn_init_hook_validator = function() {
    jQuery('form.validator').each(function() {
    jQuery.fn.checkForm(this);
    });
    };
    window.xn_init_hook_click = function() {
    jQuery('#layout-msg-success span.msg-top-close').click(function() {
    return !jQuery('#layout-msg-success').remove();
    });
    jQuery('#layout-msg-error span.msg-top-close').click(function() {
    return !jQuery('#layout-msg-error').remove();
    });
    jQuery('a.ajaxlink').click(function() {
    if (jQuery(this).attr('no') == 'yes') {
    return false;
    }
    var ask = jQuery(this).attr('ask');
    if (ask && !confirm(ask)) {
    return false;
    }
    X.get(jQuery(this).attr('href'));
    return false;
    });
    };X.misc = {};
    X.misc.copyToCB = function(tid) {
    var o = jQuery('#' + tid);
    o.select();
    var maintext = o.val();
    if (window.clipboardData) {
    if ((window.clipboardData.setData("Text", maintext))) {
    var tip = o.attr('tip');
    if (tip)
    alert(tip);
    return true;
    }
    } else if (window.netscape) {
    netscape.security.PrivilegeManager
    .enablePrivilege('UniversalXPConnect');
    var clip = Components.classes['@mozilla.org/widget/clipboard;1']
    .createInstance(Components.interfaces.nsIClipboard);
    if (!clip)
    return;
    var trans = Components.classes['@mozilla.org/widget/transferable;1']
    .createInstance(Components.interfaces.nsITransferable);
    if (!trans)
    return;
    trans.addDataFlavor('text/unicode');
    var str = new Object();
    var len = new Object();
    var str = Components.classes["@mozilla.org/supports-string;1"]
    .createInstance(Components.interfaces.nsISupportsString);
    var copytext = maintext;
    str.data = copytext;
    trans.setTransferData("text/unicode", str, copytext.length * 2);
    var clipid = Components.interfaces.nsIClipboard;
    if (!clip)
    return false;
    clip.setData(trans, null, clipid.kGlobalClipboard);
    var tip = o.attr('tip');
    if (tip)
    alert(tip);
    return true;
    }
    return false;
    };
    X.misc.scaleimage = function(o, mw) {
    var w = jQuery(o).width();
    if (w > mw)
    jQuery(o).css('width', mw + 'px');
    };jQuery.fn.json2select = function(json, dft, name, deep, curvalue) {
    var _this = this, name = name || "sel", deep = deep || 0, dft = dft || [];
    curvalue = curvalue || 0;
    $("[name=" + name + deep + "]", _this).nextAll().remove();
    if (json[0]) {
    var slct = $("<select name='" + name + $("select", _this).length
    + "'></select>");
    $("<option value=''>--无--</option>").appendTo(slct);
    $.each(json, function(i, sd) {
    if (sd.v != curvalue)
    $("<option value='" + sd.v + "'>" + sd.k + "</option>")
    .appendTo(slct).data("s", sd.s || []);
    });
    slct.change(
    function(e, dftflag) {
    $(this).val()
    && _this.json2select(
    $(":selected", this).data("s"),
    dftflag ? dft.slice(1) : [], name, $(this)
    .attr("name").match(/\d+/)[0],
    curvalue);
    }).appendTo(_this).val(dft[0] || 0).trigger("change", [ true ]);
    }
    return _this;
    };
    jQuery.buildMultiSelect = function(setting) {
    if (!setting) {
    return;
    }
    var domdataname = "seldata";
    var key_value = setting.keyValue;
    var key_text = setting.keyText;
    var m_jsonData = setting.jsonData;
    this.selskeys = setting.selskeys;
    this.selsids = setting.selsids;
    this.showValues = setting.showValues || Array(3);
    this.sellen = this.selsids.length;
    var instance = this;var jsonobj = m_jsonData;
    var curidx = 0;
    for ( var i = 0; i < instance.sellen; i++) {
    var selobj = $("#" + instance.selsids[i]);if (i == 0) {
    jsonobj = jsonobj[instance.selskeys[i]];
    } else {
    if (!jsonobj[curidx]) {
    break;
    }
    jsonobj = jsonobj[curidx][instance.selskeys[i]];
    }
    if (!jsonobj) {
    break;
    }
    for ( var j = 0, l = jsonobj.length; j < l; j++) {
    try {
    if (jsonobj[j][key_value] == instance.showValues[i] || 0) {
    curidx = j;
    selobj.append("<option value='" + jsonobj[j][key_value]
    + "' selected>" + jsonobj[j][key_text]
    + "</option>");
    } else {
    selobj.append("<option value='" + jsonobj[j][key_value]
    + "'>" + jsonobj[j][key_text] + "</option>");
    }
    } catch (e) {
    }
    }
    selobj.data(domdataname, {
    json : jsonobj,
    selidx : i
    });
    selobj.bind("change", function() {
    flushsel($(this).data(domdataname), $(this).get(0).selectedIndex);
    });
    selobj.css("zoom", 1);
    }function flushsel(seljsondata, selectedidx) {
    var jsonobj = seljsondata['json'][selectedidx];
    var selidx = seljsondata['selidx'];
    for ( var i = selidx + 1; i < instance.sellen; i++) {
    var selobj = $("#" + instance.selsids[i]);
    selobj.empty();
    try {
    if (i == selidx + 1) {
    jsonobj = jsonobj[instance.selskeys[i]];
    } else {
    if (!jsonobj || jsonobj.length == 0) {
    break;
    }
    jsonobj = jsonobj[0][instance.selskeys[i]];
    }
    if (!jsonobj) {
    break;
    }
    for ( var j = 0, l = jsonobj.length; j < l; j++) {
    selobj.append("<option value='" + jsonobj[j][key_value]
    + "'>" + jsonobj[j][key_text] + "</option>");
    }
    } catch (e) {
    }
    selobj.data(domdataname, {
    json : jsonobj,
    selidx : i
    });
    }
    $("#" + instance.selsids[0]).parent().css("zoom", 1);
    }
    }
      

  2.   

    我也在研究,新浪首页javascript 文件,楼主可以把,页面发上来,方便工作,我帮你
      

  3.   

    不知道有没有写错的地方。var X = {};/*你可以理解为声明一个变量X,值为一个对象,也可以理解为一个命名空间(这里的话,觉得理解成命名空间比较好)*/
    /*
    X.hook在页面加载完成的时候调用
    主要作用是执行前缀带有xn_init_hook_的函数,
    比如下面的:xn_init_hook_validator,xn_init_hook_click
    */
    X.hook = function () {
    var pre_init_str = 'xn_init_hook_';
    for (var h in window) {
    if (0 != h.indexOf(pre_init_str))
    continue;
    var func = window[h];
    if (typeof func == 'function') {
    try {
    func();
    } catch (e) {}
    }
    }
    };
    //把X.hook函数传入ready,当页面加载完成的时候会调用X.hook函数
    jQuery(document).ready(X.hook);
    /***************************把get,post,ajax再封装一下,其实就是规定响应的数据为json,回调函数设置为X.json***********************************/
    X.get = function (u) {
    return X.ajax(u, 'GET');
    };
    X.post = function (u) {
    return X.ajax(u, 'POST');
    };
    X.ajax = function (u, method) {
    jQuery.ajax({
    type : method,
    url : u,
    dataType : "json",
    success : X.json
    });
    return false;
    };
    /***************************把get,post,ajax再封装一下,其实就是规定响应的数据为json,回调函数设置为X.json***********************************//*
    ajax的回调函数
    根据type来做出相应的处理
    */
    X.json = function (r) {
    var type = r['data']['type'];
    var data = r['data']['data'];
    if (type == 'alert') {
    alert(data);
    } else if (type == 'eval') {
    eval(data);
    } else if (type == 'refresh') {
    window.location.reload();
    } else if (type == 'updater') {
    var id = data['id'];
    var inner = data['html'];
    jQuery('#' + id).html(inner);
    } else if (type == 'dialog') {
    X.boxShow(data, true);
    } else if (type == 'mix') {
    for (var x in data) {
    r['data'] = data[x];
    X.json(r);
    }
    }
    };
    //获取滚动的left和top用的,boxShow那里会用到
    X.getXY = function () {
    var x,
    y;
    if (document.body.scrollTop) {
    x = document.body.scrollLeft;
    y = document.body.scrollTop;
    } else {
    x = document.documentElement.scrollLeft;
    y = document.documentElement.scrollTop;
    }
    return {
    x : x,
    y : y
    };
    };
    /*
    遮罩DIV
    参数display来控制遮罩DIV的显示和隐藏
    */
    X.boxMask = function (display) {
    var height = jQuery('body').height() + 'px';
    var width = jQuery(window).width() + 'px';
    jQuery('#boxmask').css({
    'position' : 'absolute',
    'z-index' : '3000',
    'width' : width,
    'height' : height,
    'filter' : 'alpha(opacity=0.5)',
    'opacity' : 0.5,
    'top' : 0,
    'left' : 0,
    'background' : '#CCC',
    'display' : display
    });
    jQuery('#dialog').css('display', display);
    };
    /*
    显示窗口
    innerHTML  string 窗口的内容
    mask boolean 是否是模态窗口
    */
    X.boxShow = function (innerHTML, mask) {
    var dialog = jQuery('#dialog');
    dialog.html(innerHTML); if (mask) {
    X.boxMask('block');
    }
    var ew = dialog.get(0).scrollWidth;
    var ww = jQuery(window).width();
    var lt = (ww / 2 - ew / 2) + 'px';
    var wh = jQuery(window).height();
    var xy = X.getXY();
    var tp = (wh * 0.15 + xy.y) + 'px'; dialog.css('background-color', '#FFF');
    dialog.css('left', lt);
    dialog.css('top', tp);
    dialog.css('z-index', 9999);
    dialog.css('display', 'block'); return false;
    };
    /*
    关闭窗口用的
    */
    X.boxClose = function () {
    jQuery('#dialog').html('').css('z-index', -9999);
    X.boxMask('none');
    return false;
    };
    /*
    页面加载完成后X.hook调用
    迭代form标签class为validator的所有元素,执行jQuery.fn.checkForm(this);(这个东西没有见过)
    */
    window.xn_init_hook_validator = function () {
    jQuery('form.validator').each(function () {
    jQuery.fn.checkForm(this);
    });
    };
    /*
    页面加载完成后X.hook调用
    就是注册一些事件
    */
    window.xn_init_hook_click = function () {
    jQuery('#layout-msg-success span.msg-top-close').click(function () {
    return !jQuery('#layout-msg-success').remove();
    });
    jQuery('#layout-msg-error span.msg-top-close').click(function () {
    return !jQuery('#layout-msg-error').remove();
    });
    jQuery('a.ajaxlink').click(function () {
    if (jQuery(this).attr('no') == 'yes') {
    return false;
    }
    var ask = jQuery(this).attr('ask');
    if (ask && !confirm(ask)) {
    return false;
    }
    X.get(jQuery(this).attr('href'));
    return false;
    });
    };
    //在X命名空间下再一层misc
    X.misc = {};
    /*
    下面这个好像是复制到剪贴板的
    */
    X.misc.copyToCB = function (tid) {
    var o = jQuery('#' + tid);
    o.select();
    var maintext = o.val();
    if (window.clipboardData) {
    if ((window.clipboardData.setData("Text", maintext))) {
    var tip = o.attr('tip');
    if (tip)
    alert(tip);
    return true;
    }
    } else if (window.netscape) {
    netscape.security.PrivilegeManager
    .enablePrivilege('UniversalXPConnect');
    var clip = Components.classes['@mozilla.org/widget/clipboard;1']
    .createInstance(Components.interfaces.nsIClipboard);
    if (!clip)
    return;
    var trans = Components.classes['@mozilla.org/widget/transferable;1']
    .createInstance(Components.interfaces.nsITransferable);
    if (!trans)
    return;
    trans.addDataFlavor('text/unicode');
    var str = new Object();
    var len = new Object();
    var str = Components.classes["@mozilla.org/supports-string;1"]
    .createInstance(Components.interfaces.nsISupportsString);
    var copytext = maintext;
    str.data = copytext;
    trans.setTransferData("text/unicode", str, copytext.length * 2);
    var clipid = Components.interfaces.nsIClipboard;
    if (!clip)
    return false;
    clip.setData(trans, null, clipid.kGlobalClipboard);
    var tip = o.attr('tip');
    if (tip)
    alert(tip);
    return true;
    }
    return false;
    };
    /*
    限定元素(命名来看,应该是控制图片的)的最大宽度用的,
    如果o元素的宽度超过了mw,那么就以mw做为o元素宽度
    */
    X.misc.scaleimage = function (o, mw) {
    var w = jQuery(o).width();
    if (w > mw)
    jQuery(o).css('width', mw + 'px');
    };/*
    一个jQuery实例插件
    功能:把一个json对象转换成一个select
    json 格式[{k:'显示的内容',v:'option的值'}...]
    dft 好像是默认值,但是看到是用来干什么的
    name 新生成select的name前缀
    deep 深度
    curvalue 如果值为curvalue就不在新生成的select里面出现*/
    jQuery.fn.json2select = function (json, dft, name, deep, curvalue) {
    var _this = this,
    name = name || "sel",
    deep = deep || 0,
    dft = dft || [];
    curvalue = curvalue || 0;
    $("[name=" + name + deep + "]", _this).nextAll().remove();
    if (json[0]) {
    var slct = $("<select name='" + name + $("select", _this).length
     + "'></select>");
    $("<option value=''>--无--</option>").appendTo(slct);
    $.each(json, function (i, sd) {
    if (sd.v != curvalue)
    $("<option value='" + sd.v + "'>" + sd.k + "</option>")
    .appendTo(slct).data("s", sd.s || []);
    });
    slct.change(
    function (e, dftflag) {
    $(this).val()
     && _this.json2select(
    $(":selected", this).data("s"),
    dftflag ? dft.slice(1) : [], name, $(this)
    .attr("name").match(/\d+/)[0],
    curvalue);
    }).appendTo(_this).val(dft[0] || 0).trigger("change", [true]);
    }
    return _this;
    };
    /*
    一个jQuery静态插件
    生成一个多选框
    */
    jQuery.buildMultiSelect = function (setting) {
    if (!setting) {
    return;
    }
    var domdataname = "seldata";
    var key_value = setting.keyValue;
    var key_text = setting.keyText;
    var m_jsonData = setting.jsonData;
    this.selskeys = setting.selskeys;
    this.selsids = setting.selsids;
    this.showValues = setting.showValues || Array(3);
    this.sellen = this.selsids.length;
    var instance = this; var jsonobj = m_jsonData;
    var curidx = 0;
    for (var i = 0; i < instance.sellen; i++) {
    var selobj = $("#" + instance.selsids[i]); if (i == 0) {
    jsonobj = jsonobj[instance.selskeys[i]];
    } else {
    if (!jsonobj[curidx]) {
    break;
    }
    jsonobj = jsonobj[curidx][instance.selskeys[i]];
    }
    if (!jsonobj) {
    break;
    }
    for (var j = 0, l = jsonobj.length; j < l; j++) {
    try {
    if (jsonobj[j][key_value] == instance.showValues[i] || 0) {
    curidx = j;
    selobj.append("<option value='" + jsonobj[j][key_value]
     + "' selected>" + jsonobj[j][key_text]
     + "</option>");
    } else {
    selobj.append("<option value='" + jsonobj[j][key_value]
     + "'>" + jsonobj[j][key_text] + "</option>");
    }
    } catch (e) {}
    }
    selobj.data(domdataname, {
    json : jsonobj,
    selidx : i
    });
    selobj.bind("change", function () {
    flushsel($(this).data(domdataname), $(this).get(0).selectedIndex);
    });
    selobj.css("zoom", 1);
    } function flushsel(seljsondata, selectedidx) {
    var jsonobj = seljsondata['json'][selectedidx];
    var selidx = seljsondata['selidx'];
    for (var i = selidx + 1; i < instance.sellen; i++) {
    var selobj = $("#" + instance.selsids[i]);
    selobj.empty();
    try {
    if (i == selidx + 1) {
    jsonobj = jsonobj[instance.selskeys[i]];
    } else {
    if (!jsonobj || jsonobj.length == 0) {
    break;
    }
    jsonobj = jsonobj[0][instance.selskeys[i]];
    }
    if (!jsonobj) {
    break;
    }
    for (var j = 0, l = jsonobj.length; j < l; j++) {
    selobj.append("<option value='" + jsonobj[j][key_value]
     + "'>" + jsonobj[j][key_text] + "</option>");
    }
    } catch (e) {}
    selobj.data(domdataname, {
    json : jsonobj,
    selidx : i
    });
    }
    $("#" + instance.selsids[0]).parent().css("zoom", 1);
    }
    }
      

  4.   

    跟楼上放到一起估计能解决问题var X = {};//查询页面内的方法名称包含'xn_init_hook_'字符的函数并调用
    X.hook = function() {
        var pre_init_str = 'xn_init_hook_';
        for (var h in window) {
            if (0 != h.indexOf(pre_init_str)) continue;
            var func = window[h];
            if (typeof func == 'function') {
                try {
                    func();
                } catch(e) {}
            }
        }
    };
    jQuery(document).ready(X.hook);//文档加载时调用方法  注意参数X.get = function(u) {//get 方法调用ajax(u,'GET')  注意参数
        return X.ajax(u, 'GET');
    };
    X.post = function(u) {//get 方法调用ajax(u,'POST')  注意参数
        return X.ajax(u, 'POST');
    };
    X.ajax = function(u, method) {//自定义的ajax方法调用jQuery.ajax方法  注意参数
        jQuery.ajax({
            type: method,
            url: u,
            dataType: "json",
            success: X.json
        });
        return false;
    };
    X.json = function(r) {//r参数是多维数组,通过多维数组调用方法
        var type = r['data']['type'];
        var data = r['data']['data'];
        if (type == 'alert') {
            alert(data);//输出
        } else if (type == 'eval') {
            eval(data);//计算数值      eval()方法说明 http://www.w3school.com.cn/js/jsref_eval.asp
        } else if (type == 'refresh') {
            window.location.reload();//页面刷新
        } else if (type == 'updater') {
            var id = data['id'];
            var inner = data['html'];
            jQuery('#' + id).html(inner);//修改标签内容 jQuery('').html('')方法 http://www.w3school.com.cn/jquery/manipulation_html.asp
        } else if (type == 'dialog') {
            X.boxShow(data, true);//调用自定义boxShow() 函数
        } else if (type == 'mix') {
            for (var x in data) {
                r['data'] = data[x];
                X.json(r);//递归方法调用  应该是,这个地方有疑问?
            }
        }
    };X.getXY = function() {//控制页面滚动条
        var x, y;
        if (document.body.scrollTop) {
            x = document.body.scrollLeft;//设置<body>元素中滚动条的水平偏移 
            y = document.body.scrollTop;//设置 <body> 元素中滚动条的垂直偏移:
        } else {
            x = document.documentElement.scrollLeft;
            y = document.documentElement.scrollTop;
        }
        return {
            x: x,
            y: y
        };
    };X.boxMask = function(display) {//修改body高度,window页面宽度,id为boxmask样式,id为dialog显示
        var height = jQuery('body').height() + 'px';
        var width = jQuery(window).width() + 'px';
        jQuery('#boxmask').css({
            'position': 'absolute',
            'z-index': '3000',
            'width': width,
            'height': height,
            'filter': 'alpha(opacity=0.5)',
            'opacity': 0.5,
            'top': 0,
            'left': 0,
            'background': '#CCC',
            'display': display
        });
        jQuery('#dialog').css('display', display);
    };X.boxShow = function(innerHTML, mask) {//略  估计你能看懂
        var dialog = jQuery('#dialog');
        dialog.html(innerHTML);    if (mask) {
            X.boxMask('block');//隐藏
        }
        var ew = dialog.get(0).scrollWidth;
        var ww = jQuery(window).width();
        var lt = (ww / 2 - ew / 2) + 'px';
        var wh = jQuery(window).height();
        var xy = X.getXY();
        var tp = (wh * 0.15 + xy.y) + 'px';    dialog.css('background-color', '#FFF');
        dialog.css('left', lt);
        dialog.css('top', tp);
        dialog.css('z-index', 9999);
        dialog.css('display', 'block');    return false;
    };X.boxClose = function() {//清除内容,隐藏标签
        jQuery('#dialog').html('').css('z-index', -9999);
        X.boxMask('none');
        return false;
    };window.xn_init_hook_validator = function() {//页面内xn_init_hook_validator js函数调用方法
        jQuery('form.validator').each(function() {//each() 方法规定为每个匹配元素规定运行的函数
            jQuery.fn.checkForm(this);
        });
    };
    window.xn_init_hook_click = function() {//页面内xn_init_hook_click js函数调用方法
        jQuery('#layout-msg-success span.msg-top-close').click(function() {
            return ! jQuery('#layout-msg-success').remove();
        });
        jQuery('#layout-msg-error span.msg-top-close').click(function() {
            return ! jQuery('#layout-msg-error').remove();
        });
        jQuery('a.ajaxlink').click(function() {
            if (jQuery(this).attr('no') == 'yes') {
                return false;
            }
            var ask = jQuery(this).attr('ask');
            if (ask && !confirm(ask)) {//confirm() 方法用于显示一个带有指定消息和 OK 及取消按钮的对话框 点ok 返回true 点取消返回false
                return false;
            }
            X.get(jQuery(this).attr('href'));
            return false;
        });
    };X.misc = {};
    X.misc.copyToCB = function(tid) {//copy 估计是复制内容
        var o = jQuery('#' + tid);//选择id 标签
        o.select();//标签内容全选
        var maintext = o.val();//val() 方法返回或设置被选元素的值
        if (window.clipboardData) {
            if ((window.clipboardData.setData("Text", maintext))) {//拖放是一种常见的特性,即抓取对象以后拖到另一个位置。  http://www.w3school.com.cn/html5/html_5_draganddrop.asp
                var tip = o.attr('tip');
                if (tip) alert(tip);
                return true;
            }
        } else if (window.netscape) {//不太懂
            netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
            var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
            if (!clip) return;
            var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
            if (!trans) return;
            trans.addDataFlavor('text/unicode');
            var str = new Object();
            var len = new Object();
            var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
            var copytext = maintext;
            str.data = copytext;
            trans.setTransferData("text/unicode", str, copytext.length * 2);
            var clipid = Components.interfaces.nsIClipboard;
            if (!clip) return false;
            clip.setData(trans, null, clipid.kGlobalClipboard);
            var tip = o.attr('tip');
            if (tip) alert(tip);
            return true;
        }
        return false;
    };
    X.misc.scaleimage = function(o, mw) {//修改标签宽度
        var w = jQuery(o).width();
        if (w > mw) jQuery(o).css('width', mw + 'px');
    };jQuery.fn.json2select = function(json, dft, name, deep, curvalue) {
        var _this = this,
        name = name || "sel",//不懂
        deep = deep || 0,
        dft = dft || [];
        curvalue = curvalue || 0;
        $("[name=" + name + deep + "]", _this).nextAll().remove();//name属性 等于 name + deep的元素
        if (json[0]) {
            var slct = $("<select name='" + name + $("select", _this).length + "'></select>");
            $("<option value=''>--无--</option>").appendTo(slct);//添加select option 元素
            $.each(json,
            function(i, sd) {
                if (sd.v != curvalue) $("<option value='" + sd.v + "'>" + sd.k + "</option>").appendTo(slct).data("s", sd.s || []);
            });
            slct.change(function(e, dftflag) {
                $(this).val() && _this.json2select($(":selected", this).data("s"), dftflag ? dft.slice(1) : [], name, $(this).attr("name").match(/\d+/)[0], curvalue);
            }).appendTo(_this).val(dft[0] || 0).trigger("change", [true]);
        }
        return _this;
    };
    jQuery.buildMultiSelect = function(setting) {
        if (!setting) {
            return;
        }
        var domdataname = "seldata";
        var key_value = setting.keyValue;
        var key_text = setting.keyText;
        var m_jsonData = setting.jsonData;
        this.selskeys = setting.selskeys;
        this.selsids = setting.selsids;
        this.showValues = setting.showValues || Array(3);
        this.sellen = this.selsids.length;
        var instance = this;    var jsonobj = m_jsonData;
        var curidx = 0;
        for (var i = 0; i < instance.sellen; i++) {
            var selobj = $("#" + instance.selsids[i]);        if (i == 0) {
                jsonobj = jsonobj[instance.selskeys[i]];
            } else {
                if (!jsonobj[curidx]) {
                    break;
                }
                jsonobj = jsonobj[curidx][instance.selskeys[i]];
            }
            if (!jsonobj) {
                break;
            }
            for (var j = 0,
            l = jsonobj.length; j < l; j++) {
                try {
                    if (jsonobj[j][key_value] == instance.showValues[i] || 0) {
                        curidx = j;
                        selobj.append("<option value='" + jsonobj[j][key_value] + "' selected>" + jsonobj[j][key_text] + "</option>");
                    } else {
                        selobj.append("<option value='" + jsonobj[j][key_value] + "'>" + jsonobj[j][key_text] + "</option>");
                    }
                } catch(e) {}
            }
            selobj.data(domdataname, {
                json: jsonobj,
                selidx: i
            });
            selobj.bind("change",
            function() {
                flushsel($(this).data(domdataname), $(this).get(0).selectedIndex);
            });
            selobj.css("zoom", 1);
        }    function flushsel(seljsondata, selectedidx) {
            var jsonobj = seljsondata['json'][selectedidx];
            var selidx = seljsondata['selidx'];
            for (var i = selidx + 1; i < instance.sellen; i++) {
                var selobj = $("#" + instance.selsids[i]);
                selobj.empty();
                try {
                    if (i == selidx + 1) {
                        jsonobj = jsonobj[instance.selskeys[i]];
                    } else {
                        if (!jsonobj || jsonobj.length == 0) {
                            break;
                        }
                        jsonobj = jsonobj[0][instance.selskeys[i]];
                    }
                    if (!jsonobj) {
                        break;
                    }
                    for (var j = 0,
                    l = jsonobj.length; j < l; j++) {
                        selobj.append("<option value='" + jsonobj[j][key_value] + "'>" + jsonobj[j][key_text] + "</option>");
                    }
                } catch(e) {}
                selobj.data(domdataname, {
                    json: jsonobj,
                    selidx: i
                });
            }
            $("#" + instance.selsids[0]).parent().css("zoom", 1);
        }
    }
      

  5.   

    信息量好强大,,刚刚接触json
      

  6.   

    bbjbepzz大哥,太感谢了!还有zhengceHH,谢谢你们,先去完成工作了!