var 슬라이스 = Array.prototype.slice;
window.Bind = 함수(객체, 재미) {
var args = Slice.call(arguments).slice(2);
반환 함수() {
return fun.apply(object, args);
};
};
window.BindAsEventListener = function(object, fun,args) {
var args = Slice.call(arguments).slice(2);
반환함수(이벤트) {
return fun.apply(object, [event || window.event].concat(args));
}
};
//jQ에서 복사
window.Extend = 함수(){
var 대상 = 인수[0] || {}, i = 1, 길이 = 인수.길이, 깊이 = true, 옵션;
if ( typeof target === "boolean" ) {
깊은 = 목표;
대상 = 인수[1] || {};
나는 = 2;
}
if ( typeof target !== "object" && Object.prototype.toString.call(target)!="[object Function]")
대상 = {};
for(;i
if ( (옵션 = 인수[ i ]) != null )
for(옵션의 변수 이름){
var src = 대상[ 이름 ], copy = 옵션[ 이름 ];
if ( 대상 === 복사 )
계속;
if ( deep && copy && typeof copy === "object" && !copy.nodeType ){
target[ 이름 ] = 인수.callee( deep, src || ( copy.length != null ? [ ] : { } ), copy );
}
else if(복사 !== 정의되지 않음)
대상[이름] = 복사;
}
}
반환 대상;
};
window.objPos = 함수(o){
var x = 0, y = 0;
do{x = o.offsetLeft;y = o.offsetTop;}while((o=o.offsetParent));
return {'x':x,'y':y};
}
window.Class = 함수(속성){
var _class = function(){return (arguments[0] !== null && this.initialize && typeof(this.initialize) == 'function') ? this.initialize.apply(this, 인수) : this;};
_class.prototype = 속성;
return _class;
};
window.hasClass = 함수(요소, 클래스이름){
return element.className.match(new RegExp('(\s|^)' className '(\s|$)'));
} ;
window.addClass = 함수(요소, 클래스 이름) {
!this.hasClass(element, className)&&(element.className = " " className);
}
window.removeClass = function(element, className) {
hasClass(element, className)&&(element.className = element.className.replace(new RegExp('(\s|^)' className '(\s|$)'),' ')) ;
}
})(창);
var 테이블 = 새 클래스({
옵션 :{
최소 너비: 62
},
초기화: function(tab,set){
This.table = 탭;
This.rows = []; //모든 tr 참조 기록
This.sortCol = null; //정렬 중인 열을 기록합니다
This.inputtd = null; //편집 중인 td를 기록합니다
This.editconfig = {}; //테이블 편집 규칙 및 팁
This.thead = tab.getElementsByTagName('thead')[0];
This.theadTds = tab.getElementsByTagName('thead')[0].getElementsByTagName('td'); //일반적으로 사용되는 DOM 컬렉션은 속성으로 참조 가능
This.tbodyTds = tab.getElementsByTagName('tbody')[0].getElementsByTagName('td');
This.closConfig = {
on : 거짓,
~ ~
totd : null
};
This.widthConfig = {
td : null,
nexttd : null,
x : 0,
td폭 : 0,
다음td폭 : 0
};
확장(this,this.options);
//이유는 모르겠지만 설정하지 않으면 랜덤으로 점프합니다
(Sys.ie6||Sys.chrome)&&(tab.width=tab.offsetWidth)
// 해당 체크박스를 기록하고 라디오가 선택되었습니다. 즉 6에서는 DOM 작업을 수행할 때 이러한 상태를 기억하지 않습니다.
If(Sys.ie6){
This.checkbox = {}
var checkboxs = tab.getElementsByTagName('input'),i=0,l=checkboxs.length;
for(;i
(checkboxs[i].type=="checkbox"||checkboxs[i].type=="radio")&&
addListener(checkboxs[i],"click",Bind(this,function(elm,i){
elm.checked==true?(this.checkbox[i] = elm):(delete this.checkbox[i]);
|
};
var i=0,l=set.length,rows =tab.tBodies[0].rows,d=document,tabTads=tab.getElementsByTagName('td'),length=this.theadTds.length;
//편집용 입력
This.input = d.createElement('input')
This.input.type = "텍스트";
This.input.className = '편집';
//끌고 있는 div를 표시하는데 사용됩니다
This.div = d.body.appendChild(d.createElement('div'));
This.div.className ="div";
//확대/축소 시 수직선 표시
This.line = d.body.appendChild(d.createElement('div'));
This.line.className = '라인';
This.line.style.top = objPos(tab).y "px";
//세트를 탐색하고 몇 가지 설정을 수행합니다. for(;i
//정렬이 필요한 헤드헌터에게 이벤트 바인딩
addListener(this.theadTds[set[i].id],'click',Bind(this, this.sortTable, this.theadTds[set[i].id],set[i].type));
// 편집해야 하는 테이블의 열에 대한 필수 구성을 정의합니다.
set[i].edit&&(this.editconfig[set[i].id]={rule:set[i].edit.rule,message:set[i].edit.message});
}
//모든 tr을 정렬용 배열에 넣습니다
for( i=0,l=rows.length;i
This.rows[i]=rows[i];
//모든 td를 탐색하고 일부 설정을 지정합니다
for( i=0,l=tabTads.length;i
// 헤드에 모든 td를 표시하고 드래그할 때 를 사용하세요.
i
//편집해야 하는 td에 edit 속성을 추가합니다
i>=length&&this.editconfig[i%length]&&tabTads[i].setAttribute('edit',i%length);
}
//드래그 및 확대/축소 작업 바인딩
addListener(this.thead,'mousedown',BindAsEventListener(this,this.dragOrWidth));
//드래그하면 td의 해당 열로 레코드가 이동됩니다
addListener(this.thead,'mouseover',BindAsEventListener(this,this.theadHover));