您好,欢迎访问一九零五行业门户网

javascript 框架小结 个人工作经验_javascript技巧

/**************************************************************************************** 作者:萧 枫
qq:77182997
msn:xiaofengnet@hotmail.com
email:xiaofengnet@163.com
网址:http://www.d369.net
请保留版权谢谢合作
版本:v 1.6.1
/*****************************************************************************************
/*
为xiaofeng.system添加一方法scroll [2009-02-18] v 1.4.1
为array添加一方法index [2009-04-09] v 1.4.2
为string 添加trimstart,trimend,trim,startswith,endswith函数 [2009-04-09] v 1.4.3
为 number 添加 tofixed 方法 实现 数字保留小数点后几位 [2009-04-17] v 1.4.4
filetype 获得文件的名称及文件的后缀名 [2009-04-20] v 1.4.5
xiaofeng.dialog 打开选择窗口及保存窗 [2009-05-28] v 1.4.6
通过object类为每个对象添加方法gettype 获得对象的父结点 getparent[2009-06-04] v 1.4.7
更新方法 getquery(s) u默认为当前地址栏地址,s为传进来要提取的参数 getquery(u,s) u 为传进来的地址 s 为传进来要提取的参数 [2009-06-08] v 1.4.8
为string 添加两 方法 wth全角转换为半角 和 htw半角转换为全解 [2009-06-08] v 1.4.8
更改了ajax类中的 当正在处理这段时间内的一个方法 ajax.fun = function(){},以及判断服务器处理程序是否出错的一属性 ajax.error [2009-06-09] v 1.4.9
重新写了string,array,object,element的方法 [2009-06-12] v 1.5.0
添加了捕捉事件源 getelement xiaofeng.getelement [2009-06-12] v 1.5.1
更新了 加载xml函数 兼容 ff ie loadxml() [2009-06-12] v 1.5.2
添加功能 无限级下拉列表 selectclass [2009-06-13] v 1.6.0
更新了 无限级下拉列表的 选择为空时 选择的值 为上一级下拉列表的值 [2009-06-13] v 1.6.1
*/
/*========================================================================================
框架核心内容--------【基础工具类】
========================================================================================
*/
if(!window.xiaofeng || !xiaofeng || typeof xiaofeng == undefined)var xiaofeng = window.xiaofeng = new object();
var prototype = {
version: 1.4.9,
scriptfragment: '(?:)((\n|\r|.)*?)(?:)',
emptyfunction: function(){},
k: function(e){return e}
}
/*========================================================================================
【为object类添加静态方法】
创建于[2008-08-13]
为object类添加静态方法:extend
*/
object.extend = function(destination,source){
for(property in source)destination[property] = source[property];
return destination;
}
//通过object类为每个对象添加方法extend
object.prototype.extend = function(object){return object.extend.apply(this,[this,object]);}
/*===========================================================================================
【给数组添加属性】
[创建于2009-06-12]
对数组添加附加属性
*/
object.extend(array.prototype,{
remove : function(n){//移除指定的元素
if(isnan(n)||n>this.length)return false;
for(var i=0,n=0;ithis.length -= 1;
},
add : function(v){//添加一数组元素
for(var i=0;iif(this[i].tostring() == v.tostring()) break;
this.push(v);
},
index : function(s){//指定数组中元素的索引
var flagindex = -1;
for(var i = 0;i if(this[i].tostring() == s.tostring()){flagindex = i; break;}
return flagindex;
},
first : function(){return this[0];},//数组中第一个元素
last : function(){return this[this.length - 1];},//数组中最后一个元素
clear : function(){this.length = 0; return this;}//清空数组中的元素
});
/*===========================================================================================
【给字符串添加属性】
[创建于2009-06-12]
给字符串加附加属性
*/
object.extend(string.prototype,{
len : function(){return this.replace(/[^\x00-\xff]/g,ya).length;},//字符串的长度,一个汉字为两个
length : function(){
var m = 0;
for(var i=0;iif(this.charcodeat(i) > 255)
m = m + 2;
else
m = m + 1;
}
return m;
},
trim : function(s){return this.trimstart(s).trimend(s);},//清空开始与结尾的指定字符 
trimstart : function(s){//清空开始的指定字符
if(!s)s = \\s+;
var trimstartstr = new regexp(^(+ s +)+,g);
return this.replace(trimstartstr,);
},
trimend : function(s){//清空结尾的指定字符
if (!s)s = \\s+;
var trimendstr = new regexp((+ s +)+$,g);
return this.replace(trimendstr,);
},
startswith : function(s){
if (!s)s = \\s;
var startswithstr = new regexp(^(+ s +),g);
return startswithstr.test(this);
},
endswith : function(s){
if (!s)s = \\s;
var endswithstr = new regexp((+ s +)$,g);
return endswithstr.test(this);
},
wth : function(){//全角转换半角
var s = ;
for(var i = 0;i s += this.charcodeat(i) >= 65248?string.fromcharcode(this.charcodeat(i) - 65248):this.charat(i);
return s;
},
htw : function(){//半角转换全角
var s = ;
for(var i = 0;i s += this.charcodeat(i) return s;
},
leftstr : function(m){//左边指定长度字符
if(this.length() > m){
var str = ;
for(var i=0;iif(this.charcodeat(i) > 255)
m -= 2;
else
m -= 1;
str += this.substring(i,i+1);
if(m }
return str + ...;
}else
return this;
},
striptags : function(){return this.replace(/]+>/gi, '');}
});
/*===========================================================================================
【取得数字小数点后几位】
[创建于2009-06-12]
为数字添加附加属性
*/
object.extend(number.prototype,{
tofixed : function(n){//格式化数字
if(arguments.length == 0)n = 2;
with(math){var m = pow(10,number(n));var s = (round(this*m)/m).tostring();}
if(s.indexof('.') s += .;
s += 000000000000000000000000000000;
}
return s.substr(0,s.indexof('.') + n + 1);
}
});
/*========================================================================================
【获取一个指定id的结点】
创建于[2005-05-03]
document.getelementbyid(id)获取一个指定id的结点,是这个方法的快捷方式和扩展可以指定多个参
数返回一个对象数组。参数也不一定是id也可以是对象本身的引用,例如$(id)等价于$($(id))
*/
var $ = xiaofeng.$ = function(){
var elements = new array();
for(var i=0;ivar element = arguments[i];
if (typeof(element) == string) element = document.getelementbyid?document.getelementbyid(element):document.all.element
if (arguments.length==1) return element;
elements.push(element);
}
return elements;
}
/*========================================================================================
【获取一个指定id的结点】
创建于[2005-05-03]
document.getelementsbyname(id)获取一个指定id的名称集,是这个方法的快捷方式和扩展可以指定多个参数返回一个对象数组
*/
var $n = xiaofeng.$n = function(){
var elements = new array();
for(var i=0;ivar element=arguments[i];
if (typeof(element) == string) element = document.getelementsbyname?document.getelementsbyname(element):document.all.element;
if (arguments.length==1) return element;
elements.push(element);
}
return elements;
}
/*========================================================================================
【获取一个指定tagname的结点】
创建于[2005-05-03]
document.getelementsbytagname(tagname)获取一个指定tagname的名称集,是这个方法的快捷方式和扩展可以指定多个参数返回一个对象数组
*/
var $t = xiaofeng.$t = function(){
var elements = new array();
for(var i=0;ivar element = arguments[i];
if (typeof(element) == string) element = document.getelementsbytagname(element);
if (arguments.length==1) return element;
elements.push(element);
}
return elements;
}
/*========================================================================================
【创建一个元素】
创建于[2008-06-18]
*/
var $c = xiaofeng.$c = function(){return document.createelement(arguments[0]);}
/*===========================================================================================
【转换数组】
创建于[2008-08-13]
*/
var $a = xiaofeng.$a = function(a){return a?array.apply(null,a):new array;}
/*===========================================================================================
【抓取事件源】
创建于[2008-08-13]
*/
var getelement = xiaofeng.getelement = function(){
if(arguments.length == 0)
return event.srcelement;
else
return document.all?arguments[0].srcelement:arguments[0].target;
}
/*========================================================================================
【为object类添加事件及卸载事件及鼠标坐标】
创建于[2008-10-09]
为object类添加事件及卸载事件及鼠标坐标:
*/
object.extend(object.prototype,{
addevent : function(a, b, c, d){
//添加函数
if(a.attachevent)a.attachevent(b[0], c);
else a.addeventlistener(b[1] || b[0].replace(/^on/, ), c, d || false);
return c;
},
delevent : function(a, b, c, d){
if(a.detachevent) a.detachevent(b[0], c);
else a.removeeventlistener(b[1] || b[0].replace(/^on/, ), c, d || false);
return c;
},
event : function(){//获取event
return window.event ? window.event : (function (o){
do{
o = o.caller;
} while (o && !/^\[object[ a-za-z]*event\]$/.test(o.arguments[0]));
return o.arguments[0];
})(this.reevent);
},
scroll : function(){
return {
left : document.body.scrollleft == 0?document.documentelement.scrollleft:document.body.scrollleft,
top :document.body.scrolltop == 0?document.documentelement.scrolltop:document.body.scrolltop
};
}
});
/*========================================================================================
【判断浏览器及其版本号】
[创建于2009-06-12]
*/
xiaofeng.useragent = function(){
var ua = navigator.useragent.tolowercase();
if(window.activexobject)return {name : ie,ver : ua.match(/msie ([\d.]+)/)[1]}
if(document.getboxobjectfor)return {name : firefox,ver : ua.match(/firefox\/([\d.]+)/)[1]}
if(window.messageevent && !document.getboxobjectfor)return {name : chrome,ver : ua.match(/chrome\/([\d.]+)/)[1]}
if(window.opera)return {name : opera,ver : ua.match(/opera.([\d.]+)/)[1]}
if(window.opendatabase)return {name : safari,ver : ua.match(/version\/([\d.]+)/)[1]}
return {name : other,ver : 0}
}
/*========================================================================================
【鼠标的相对坐标】
[创建于2008-10-06]
*/
var event = function(){
var e = object.event();
var o = {x : 0,y : 0};
switch(arguments[0]){
case 0 :/*鼠标的相对位置*/
o.x = e.clientx;
o.y = e.clienty;
break;
case 1 :/*鼠标的绝对位置*/
o.x = e.clientx + object.scroll().left;
o.y = e.clienty + object.scroll().top;
break;
default:/*鼠标的相对位置*/
o.x = e.clientx;
o.y = e.clienty;
break;
}
return o;
}
/*========================================================================================
【ajax创建类】
创建于[2008-05-30]
更新于[2009-06-09]
var ajax = new ajaxrequest();
ajax.url = test.aspx;
ajax.content = ;
ajax.fun = function(){alert(提取中..\);}
ajax.callback = function(e){
//操作代码
var xmldoc=e.responsetext;
var xmldoc=e.responsexml;
var roots=xmldoc.documentelement.childnodes;
alert(roots[0].childnodes[0].text);
}
ajax.send();
*/
xiaofeng.ajax = ajaxrequest;
function ajaxrequest(){
var xmlhttp = false;
var self = this;
this.method = post;
this.url = ;
this.content = ;
this.async = true;
this.fun = function(){return;};
this.callback = function(obj){return;}
this.error = null;
this.create = function(){//创建xmlhttprequest
if(typeof(window.xmlhttprequest)!=undefined){
xmlhttp = new xmlhttprequest();
if(xmlhttp.overridemimetype)xmlhttp.overridemimetype(text/html);
}else if(window.activexobject){
var versions = [msxml2.xmlhttp.5.0,msxml2.xmlhttp.4.0,msxml2.xmlhttp.3.0,msxml2.xmlhttp,microsoft.xmlhttp];
for(var i=0;itry{
var xmlhttp = new activexobject(versions[i]);
xmlhttp = xmlhttp;
}catch(error){
if(i == (versions.length-1))alert(出错:创建服务器对象实例失败.);//浏览器问题//抛出error.description
}
}
}
return xmlhttp;
}
this.send = function(){
if(this.url == ){alert(处理地址不能为空!);}
xmlhttp = this.create();
xmlhttp.open(this.method,this.url,true);
if(this.method == post)xmlhttp.setrequestheader(content-type,application/x-www-form-urlencoded);
xmlhttp.onreadystatechange = function(){
if(xmlhttp.readystate == 4){
if(xmlhttp.status == 200){
self.callback(xmlhttp);
}else{
alert(出错:错误代码[+ xmlhttp.status +]);
self.error = 服务器出错[+ xmlhttp.status +].;
clipboarddata.setdata(text,self.url+?+self.content);
self.callback(self);
}
}else
self.fun();
}
if(this.method.tolowercase() == post)
xmlhttp.send(this.content);
else
xmlhttp.send(null);
}
}
/*========================================================================================
【创建xml对象类】
[创建于2008-04-09]
var http_request=false;
*/
function createajax(){
var ajax_obj;
if(typeof(window.xmlhttprequest) != undefined){
ajax_obj = new xmlhttprequest();
if(ajax_obj.overridemimetype)ajax_obj.overridemimetype(text/html);
}else if(window.activexobject){
var versions = [msxml2.xmlhttp.5.0,msxml2.xmlhttp.4.0,msxml2.xmlhttp.3.0,msxml2.xmlhttp,microsoft.xmlhttp];
for(var i=0;itry{
var xmlhttp=new activexobject(versions[i]);
ajax_obj = xmlhttp;
}catch(error){
if(i == (versions.length-1))alert(出错:创建服务器对象实例失败[浏览器问题].);//浏览器问题//抛出error.description
}
}
}
return ajax_obj;
}
/*========================================================================================
【加载xml操作类】
[创建于2009-06-12]
*/
function loadxml(path){
if(xiaofeng.useragent().name == firefox){
var dom = document.implementation.createdocument(, , null);
dom.async = false;
dom.load(path);
}else{
dom = new activexobject(microsoft.xmldom);
dom.async = false;
dom.load(path);
}
return dom;
}
/*========================================================================================
【cookies操作类】
[创建于2008-04-09]
*/
var cookies = {
getval:function(offset){//获得cookie解码后的值
var endstr = document.cookie.indexof(;, offset);
if (endstr == -1)
endstr = document.cookie.length;
return unescape(document.cookie.substring(offset, endstr));
},
add:function(name,value,hours){//设定cookie值
var expire = ;
if(hours != null){
expire = new date((new date()).gettime() + hours * 3600000);
expire = ; expires= + expire.togmtstring();
}
document.cookie = name + = + escape(value) + expire;
},
del:function(name){//删除cookie
var exp = new date();
exp.settime(exp.gettime() - 1);
var cval = getcookie (name);
document.cookie = name + = + cval + ; expires=+ exp.togmtstring();
},
get:function(name){//获得cookie的原始值
var cookievalue = ;
var search = name + =;
if(document.cookie.length > 0){
offset = document.cookie.indexof(search);
if (offset != -1){
offset += search.length;
end = document.cookie.indexof(;, offset);
if (end == -1) end = document.cookie.length;
cookievalue = unescape(document.cookie.substring(offset, end))
}
}
return cookievalue;
},
get:function(name){/*获取cookie的原始值 注 在这里主要是对应c#里面的cookies数组*/
var reg = new regexp((^|&)+ name +=([^&]*)(&|$));
var r = cookies.get(htgl).match(reg);
if (r != null) return unescape(r[2]);
return ;
}
}
/*//======================================================================================
//【获得对象实际坐标】
[创建于2008-04-09]
*/
function getdim(e){
var rd = {x:0,y:0};
do{
rd.x += e.offsetleft;
rd.y += e.offsettop;
e = e.offsetparent;
}while(e)
return rd;
}
/*//======================================================================================
//【获得对象的父结点】
[创建于2008-06-04]
*/
function getparent(o,n){
var e = new object();
e = o;
do{
e = e.parentnode;
try{if(e.tagname.tolowercase() == n.tolowercase())break;}catch(e){break;}
}while(e)
return e;
}
/*//======================================================================================
//【获得对象实际四角坐标】
[创建于2008-10-09]
*/
function getinfo(o){//取得坐标
var to = new object();
to.left = to.right=to.top=to.bottom=0;
var twidth = o.offsetwidth;
var theight = o.offsetheight;
do{
to.left += o.offsetleft;
to.top += o.offsettop;
o = o.offsetparent;
}while(o != document.body)
to.right = to.left + twidth;
to.bottom = to.top + theight;
return to;
}
/*//======================================================================================
//【获得对象与指定字符匹配的对象】
[创建于2008-10-09]
*/
function getobj(o,s){
f = false;
while(o != document.body){
if(o.id.tolowercase().indexof(s) != -1){
f = true;
break;
}
o = o.offsetparent;
}
return f;
}
/*========================================================================================
【获得参数值】
[创建于2008-06-08]
*/
var getquery = xiaofeng.getquery = function(){
if(arguments.length == 0)return null;
if(arguments.length == 1){
var reg = new regexp((^|&)+ arguments[0] +=([^&]*)(&|$));
var r = window.location.search.substr(1).match(reg);
if (r!=null) return unescape(r[2]);
return null;
}else{
var reg = new regexp(arguments[1] +=\\w+,gi);
try{return arguments[0].match(reg).tostring().split(,)[0].split(=)[1];}catch(e){return null;}
}
}
/*========================================================================================
【拖动函数】
创建于[2008-04-09]
*/
var drag = xiaofeng.drag = function(o){
var x,y;
x = getdim(o).x;
y = getdim(o).y;
var deltax = event.clientx - x;
var deltay=event.clienty - y;
var drag = true;
o.style.filter = alpha(opacity=60);
o.onmousemove = function(){
if(drag){
o.style.left=(event.clientx - deltax) + px;
o.style.top=(event.clienty - deltay) + px;
if(event.clientx - deltax if(event.clienty - deltay if(event.clientx - deltax + o.offsetwidth >= xiaofeng.system.size(0).x)o.style.left = (xiaofeng.system.size(0).x - o.offsetwidth) + px;
if(event.clienty - deltay + o.offsetheight >= xiaofeng.system.size(0).y)o.style.top = (xiaofeng.system.size(0).y - o.offsetheight) + px;
o.setcapture();
}
}
o.onmouseup = function(){
o.style.filter = alpha(opacity=100);
drag = false;
o.releasecapture();
}
}
/*========================================================================================
【字符转换类】
创建于[2008-04-09]
更新于[2008-06-02]
*/
var strtohtml = {
sth:function(s){
s = s.replace(/,s = s.replace(/>/gi,>);
s = s.replace(//gi,\);
s = s.replace(/&/gi,&);
s = s.replace(/ /gi, );
return s;
},
hts:function(s){
s = s.replace(/,s = s.replace(/>/gi,>);
s = s.replace(/\\/gi,);
s = s.replace(/&/gi,&);
s = s.replace(/ /gi, );
return s;
},
bty:function(s){
s = s.replace(/\[/gi,s = s.replace(/\]/gi,>);
return s;
},
ytb:function(s){
s = s.replace(/,[);
s = s.replace(/,[);
s = s.replace(/>/gi,]);
s = s.replace(/>/gi,]);
s = s.replace(/ /gi, );
return s;
}
}
/*===========================================================================================
【获得窗体的宽高】
主要是一些系统方法
*/
xiaofeng.system = {
event : function(){
var e = object.event();
var o = {x : 0,y : 0};
switch(arguments[0]){
case 0 :/*鼠标的相对位置*/
o.x = e.clientx;
o.y = e.clienty;
break;
case 1 :/*鼠标的绝对位置*/
o.x = e.clientx + object.scroll().left;
o.y = e.clienty + object.scroll().top;
break;
default:/*鼠标的相对位置*/
o.x = e.clientx;
o.y = e.clienty;
break;
}
return o;
},
size : function(){//【获得窗体的宽高】
var s = {x : 0,y : 0};
if(window.innerwidth){
s.x = window.innerwidth;
s.y = window.innerheight;
}else if(document.compatmode=='css1compat'){
if(arguments[0] == 1){
s.x = document.body.clientwidth;
s.y = document.body.clientheight;
}else if(arguments[0] == 2){
s.x = parseint(document.documentelement.clientwidth) + parseint(document.documentelement.scrollleft);
s.y = parseint(document.documentelement.clientheight) + parseint(document.documentelement.scrolltop);
}else{
s.x = document.documentelement.clientwidth;
s.y = document.documentelement.clientheight;
}
}else if(document.body){
if(arguments[0] == 1){
s.x = document.body.scrollwidth;
s.y = document.body.scrollheight
}else if(arguments[0] == 2){
s.x = document.body.clientwidth + document.body.scrollleft;
s.y = document.body.clientheight + document.body.scrolltop;
}else{
s.x = document.body.clientwidth;
s.y = document.body.clientheight;
}
}
return s;
},
scroll : function(){//【获得窗体的滚动条】
var s = {x : 0,y : 0};
if(document.compatmode=='css1compat'){
s.x = document.documentelement.scrolltop;
s.y = document.documentelement.scrollleft;
}else if(document.body){
s.x = document.body.scrolltop;
s.y = document.body.scrollleft;
}
return s;
},
getrnd : function(){return math.floor(math.random()*1000000);}
}
/*===========================================================================================
【获得文件的名称及文件的后缀名】
[2009-04-20]
*/
function filetype(fname){
fname = fname.replace(/\\/gi,/);
fname = fname.substr(fname.lastindexof(/) + 1);
return {name : fname.substr(0,fname.indexof(.)),type : fname.substr(fname.indexof(.) + 1)};
}
/*===========================================================================================
【打开选择窗口及保存窗口】
[2009-05-28]
第一种方法:
var dialog = new xiaofeng.dialog(请选择文件,txt 文件(*.txt)|*.txt|所有文件(*.*)|*.*,.txt);
第二种方法:
var dialog = new xiaofeng.dialog({
title : 请选择文件,
filter : txt 文件(*.txt)|*.txt|所有文件(*.*)|*.*,
defaultext : .txt
});
dialog.open();
注:参数可以不填写,则为默认的.
*/
xiaofeng.dialog = function(){
this.dialogtitle = 请选择要打开的文件;
this.dialogfilter = excel 文件(*.xls)|*.xls|所有文件(*.*)|*.*;
this.dialogdefaultext = .xls;
this.query = arguments;
var self = this;
this.init = function(){
if(typeof self.query[0] == string){
self.dialogtitle = self.query[0]?self.query[0]:self.dialogtitle;
self.dialogfilter = self.query[1]?self.query[1]:self.dialogfilter;
self.dialogdefaultext = self.query[2]?self.query[2]:self.dialogdefaultext;
}else if(typeof self.query[0] == object){
self.dialogtitle = self.query[0].title?self.query[0].title:self.dialogtitle;
self.dialogfilter = self.query[0].filter?self.query[0].filter:self.dialogfilter;
self.dialogdefaultext = self.query[0].defaultext?self.query[0].defaultext:self.dialogdefaultext;
}
try{
if(!$(dialog_opensave)){
var _dialog_open = $c(object);
_dialog_open.id = dialog_opensave;
_dialog_open.classid = clsid:f9043c85-f6f2-101a-a3c9-08002b2f49fb;
_dialog_open.style.display = none;
document.body.appendchild(_dialog_open);
}
$(dialog_opensave).cancelerror = true;
}catch(e){}
}
this.open = function(){
$(dialog_opensave).dialogtitle = this.dialogtitle;
$(dialog_opensave).filter = this.dialogfilter;
$(dialog_opensave).defaultext = this.dialogdefaultext;
$(dialog_opensave).showopen();
return $(dialog_opensave).filename;
}
this.save = function(){
$(dialog_opensave).dialogtitle = this.dialogtitle.replace(打开,保存);
$(dialog_opensave).filter = this.dialogfilter;
$(dialog_opensave).defaultext = this.dialogdefaultext;
$(dialog_opensave).showsave();
return $(dialog_opensave).filename;
}
this.init();
}
/*===========================================================================================
【无限级下拉列表】
[2009-06-13]
在要放置下拉列表的地方放置一控件,一般为隐藏域
以xml为数据源可以用直接调用 xml 形式
var xmldom = loadxml(createxml.ashx?rootid=15&sd=101);
root = xmldom.documentelement;
也可以用ajax调出数据源
var ajax = new xiaofeng.ajaxrequest();
ajax.url = createxml.ashx?rootid=15&sd=101;
ajax.callback = function(e){
if(e.error != undefined)return;
var root = e.responsexml.documentelement;
}
var classselect = new selectclass();
classselect.source = root;
classselect.name = classid;
classselect.firstoption = [[==请选择==,0]];
classselect.selectfirst = true;
classselect.fun = function(e){}
classselect.select = 101;
classselect.run();
参数说明:source 为本下拉列表数据源 为 xmldom
name 为隐藏控件id 一般为隐藏域
firstoption 为下拉列表第一行显示的文字,如果想给每个都有不同的可以设置多个 例如[[==请选择所在的省份==,0],[==请选择所在的市份==,0],[==请选择所在的县份==,0]] 如果 firstoption = 或 firstoption = [] 则不显示这些文字 默认 为[[==请选择==,]]
selectfirst 为是加载完后是否显示要设置的文字 true 为显不 false 为显示数据第一行或设置的行 默认为 true
fun 此函数为每个下拉列表的onchange选择事件触发接口函数
select 为已经选择的属性 默认为
run 为运行此类别
*/
var selectclass = xiaofeng.selectclass = function(){
this.name = ;
this.source = new object();
this.firstoption = [[==请选择==,0]];
this.selectfirst = true;
this.select = ;
this.fun = function(e){return;}
this.run = function(){
if(!$(this.name)){
var _input = $c(input);
_input.type = hidden;
_input.name = this.name;
_input.id = this.name;
document.body.appendchild(_input);
}
$(this.name).value = this.select;
if(typeof this.source == object)
if(this.source.haschildnodes){
this.createselect(this.source);
if(this.select == ){
var __select = $(this.name).parentnode.getelementsbytagname(select);
if(this.selectfirst)
$(this.name).value = __select[__select.length - 1].value;
else
$(this.name).value = __select[__select.length - 1].options[1].value;
}
}else{
var _span = $c(span);
_span.innerhtml = 数据源为空。;
$(this.name).parentnode.appendchild(_span);
}
else{
var _span = $c(span);
_span.innerhtml = 数据源出错。;
$(this.name).parentnode.appendchild(_span);
}
}
this.createselect = function(node){
if(!node.haschildnodes){this._selectfirstname();return;}
var select = $c(select);
select.id = select.name = select_+ (new date().gettime());
var _f = false,_s = 0;
if(typeof this.firstoption == string)this.firstoption = [];
if(typeof this.firstoption == object && this.firstoption.length > 0)
select.add(this.createoption(==请选择==,0,false));
for(var i = 0;i if(node.childnodes[i].getattribute(s) == null){_f = false;}else{_f = true;_s = i;}
select.add(this.createoption(node.childnodes[i].getattribute(name),node.childnodes[i].getattribute(id),_f));
}
$(this.name).parentnode.insertbefore(select,$(this.name));
if(_s > 0)
this.createselect(node.childnodes[_s]);
else{
this.createselect(node.childnodes[0]);
if(this.selectfirst)
if(this.firstoption.length == 0)
select.options[0].selected = true;
else
select.options[1].selected = true;
}
}
this.createoption = function(t,v,f){
var optionsub = new option();
optionsub.text = t;
optionsub.value = v;
if(f)optionsub.selected = f;
return optionsub;
}
this._selectfirstname = function(){
var _select = $(this.name).parentnode.getelementsbytagname(select);
var self = this,_f = true;
var _firstoption = [],_firstlength = this.firstoption.length;
if(this.firstoption.length == 0)_f = false;
for(var i = 0;i if(_f){
if(i >= _firstlength)
_firstoption = this.firstoption[0];
else
_firstoption = this.firstoption[i];
_select[i].options[0].text = _firstoption[0];
_select[i].options[0].value = _firstoption[1];
}
if(i == _select.length - 1)
_select[i].setattribute(onchange,function(){
var __select = this.parentnode.getelementsbytagname(select);
$(self.name).value = __select[__select.length - 1].value;
if(self.firstoption.length != 0 && this.selectedindex == 0)
if(_select.length > 1)
$(self.name).value = __select[__select.length - 2].value;
self.fun(this);
});
else
_select[i].setattribute(onchange,function(){
self._removeselect(this);
self._selectnode(self.source,this.value);
var __select = this.parentnode.getelementsbytagname(select);
if(self.selectfirst){
$(self.name).value = __select[__select.length - 1].value;
}else
$(self.name).value = __select[__select.length - 1].options[1].value;
if(self.firstoption.length != 0 && this.selectedindex == 0)
if(_select.length > 1)
$(self.name).value = __select[__select.length - 2].value;
self.fun(this);
});
}
}
this._selectnode = function(node,s){
for(var i = 0;i if(node.childnodes[i].getattribute(id) == s)
this.createselect(node.childnodes[i]);
else
if(node.childnodes[i].haschildnodes)this._selectnode(node.childnodes[i],s);
}
this._removeselect = function(o){
var _select = $(this.name).parentnode.getelementsbytagname(select);
var _f = false;
for(var i = 0;i if(_select[i] == o){_f = true;continue;}
if(_f){_select[i].parentnode.removechild(_select[i]);i--;}
}
}
}
其它类似信息

推荐信息