上边要今天就看懂这份js,看不懂呀 ,求翻译

上头要今天就看懂这份js,看不懂呀 ,求翻译!var X {}X.hook function() {var pre_init_str xn_init

上头要今天就看懂这份js,看不懂呀 ,求翻译!
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);
}
}

[解决办法]
不知道有没有写错的地方。


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窗口的内容
maskboolean是否是模态窗口
*/
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);
}
}


[解决办法]
跟楼上放到一起估计能解决问题

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);
    }
}