/*----------------------
웹 애플리케이션 JavaScript 라이브러리
2009.11 잔치
--------------------------------------*/
//String原生对象扩展 置空左右端공간格
String.prototype.trim = function(){
return this.replace(/(^[sntr]*)|([snrt]*$) /g, "");
}; var p = function p(s) {
return (s.toString().length == 1) ? "0" s : s;
};
문자열 반환 ? string.replace(/dd?d?d?|MM?M?M?|yy?y?y?|hh?|HH?|mm?|ss?|tt?|zz?z?/g,
function(문자열) {
스위치(문자열) {
case "hh": return p(self.getHours() < 13 ? self.getHours() : (self.getHours() - 12)) ;
case "h": return self.getHours() < 13 ? self.getHours() : (self.getHours() - 12)
case "HH": return p(self.getHours() ));
case "H": return self.getHours();
case "mm": return p(self.getMinutes())
case "m": return self.getMinutes() ;
case "ss": return p(self.getSeconds());
case "s": return self.getSeconds()
case "yyyy": return self.getFullYear(); 🎜>case "yy": return self.getFullYear().toString().substring(2, 4);
case "dddd": return self.getDayName()
case "ddd": return self .getDayName(true);
case "dd": return p(self.getDate());
case "d": return self.getDate().toString()
case "MMMM" : return self.getMonthName();
case "MMM": return self.getMonthName(true);
case "MM": return p((self.getMonth() 1)); M": return self.getMonth() 1;
case "t": return self.getHours() < 12? Date.CultureInfo.amDesignator.substring(0, 1) : Date.CultureInfo.pmDesignator.substring(0, 1);
case "tt": return self.getHours() < 12? Date.CultureInfo.amDesignator : Date.CultureInfo.pmDesignator;
case "zzz":
case "zz":
case "z": return "";
}
}) : this.toString();
};
/*-------------------------*/
/ /声明对象
var App = {};
//对象继承或属성합
App.extend = function(obj, hash) {
this.each(hash, function(key, value) {
obj[key] = value;
});
obj를 반환합니다.
};
//遍历
App.each = function(obj, func, context) {
var length = obj.length, i = -1;
if(length !== undefine) {
while( i < length) if(func.call(context, obj[i], i, obj, length) === false) break;
}
else for(var key in obj) if(obj.hasOwnProperty(key)) if(func.call(context, key, obj[key], obj) === false) break;
obj를 반환합니다.
};
(function(doc, win){
var string = Object.prototype.toString,
quirks = doc.compatMode === "BackCompat",
docelem = doc.documentElement,
ua = win.navigator.userAgent.toLowerCase(),
version = (ua.match( /.(?:rv|it|ra|ie)[/: ]([d.] )/ ) || [ ])[1],
isChrome = /chrome/.test(ua),
isWebKit = /webkit/.test(ua),
isSafari = !isChrome && isWebKit,
isOpera = / Opera/.test(ua),
isIE = /msie/.test(ua ) && !isOpera,
isFF = /firefox/.test(ua)
//Dom加载
doc .ready = function(func) {
var isReady = false,doReady = function() {
if (isReady) return
isReady = true;
}; if (isIE) {
if (docelem.doScroll && win.self == win.top) {
(function() {
if (isReady) return;
try {
docelem .doScroll("왼쪽");
} catch(오류) {
setTimeout(arguments.callee, 0);
return;
}
doReady()}) ();
}else {
if (isReady) return;
this.attachEvent("onreadystatechange", function() {
if (doc.readyState === "complete") {
doc.detachEvent("onreadystatechange",args.callee);
doReady();
}
});
}
win.attachEvent('onload', doReady);
}else if (isWebKit && 버전 < 525) {
(function() {
if (isReady) return;
if (/loaded|complete/.test(doc.readyState))
doReady();
else
setTimeout(arguments.callee, 0)
})();
win.addEventListener('load', doReady, false);
}else {
if (!isFF)
this.addEventListener("DOMContentLoaded", function() {
doc.removeEventListener("DOMContentLoaded", 인수.callee, false);
doReady()
}, 거짓);
this.addEventListener('load', doReady, false);
}
};
App.extend(App,{
//类型检测
isArray: function(v) { //是否为数组
return string.apply(v) === "[object Array] ";
},
isFunction: function(v) { //是否为函数体
return string.apply(v) === "[객체 함수]";
},
isNumber: function(v) { //是否为数字
return typeof v === "number" && isFinite(v)
},
isDate: function(v) { //是否为日期
return string.apply(v) === "[객체 날짜]";
},
isElement: function(v) { //是否为Dom元素节点
return !!( v && v.nodeType === 1)
},
// 브라우저 감지
isOpera: isOpera,
isChrome: isChrome,
isWebKit: isWebKit,
isSafari: isSafari,
isIE: isIE,
isFF: isFF ,
isQuirks:quirks,
getVersion:version,
//id 요소 가져오기
$: function(id) {
return typeof id === "string" ? .getElementById(id) : id;
},
//이름 요소 컬렉션 가져오기
$N:function(name){
return doc.getElementsByName(name)},
//태그 요소 컬렉션 가져오기
$T:function(tag, root){
return (root || doc).getElementsByTagName(tag)
},
//By 속성 이름(포함 여부), 값 및 범위는
$A:function(attrName, attrValue, tag, root){
var elems = doc.all ? $T( 태그 || "*",root || doc), 결과 = [],
attVal = (attrValue 유형 != "정의되지 않음")? new RegExp("(^|\s)" attrValue "( \s|$)" ) : null;
for(var i=0; i
attr = elems[i][attrName] || elems[i].getAttribute( attrName);
if(typeof attr === "string" && attr.length > 0){
if(typeof attrValue === "undefine" || (attVal && attVal.test(attr)) ){
result .push(elems[i]);
}
}
}
return result
},
//본문 요소 가져오기
$B: doc.body | docelem,
//클래스 속성 요소 컬렉션 가져오기
$C:function(attrValue, tag, root){
return this.$A("className", attrValue, tag, root);
},
//브라우저 창 너비 가져오기
getWinWidth: win.innerWidth || docelem.clientWidth,
//가져오기 브라우저 창 높이
getWinHeight : win.innerHeight || docelem.clientHeight || doc.body.clientHeight,
//요소 스타일 가져오기
getStyle: function(elem,name){
if( elem.style[이름]){
return elem.style[이름];
}else if(elem.currentStyle){
return elem.currentStyle[이름]
}else if(doc .defaultView && doc.defaultView.getComputeStyle ){
name = name.replace(/([A-Z])/g,"-$1")
name = name.toLowerCase()
var s = doc.defaultView.getCompulatedStyle(elem ,"");
return s && s.getPropertyValue(name)
}else{
return null; //요소 화면 좌표 값 가져오기
getPosition: function() {
return docelem.getBoundingClientRect && function(o){
var pos = o.getBoundingClientRect(), root = o.ownerDocument || o .doc;
return {left :pos.left root.documentElement.scrollLeft,top:pos.top root.documentElement.scrollTop}
} || function(o){
var x = 0, y = 0;
do{ x = o.offsetLeft;y = o.offsetTop;}while((o=o.offsetParent))
return {left:x,top:y}; };
}(),
//투명도 설정
setOpacity: function (elem,num){
if(elem.filters){
elem.style.filter = "alpha( opacity=" num ")";
}else{
elem.style.opacity = num/100;
}
},
//요소 숨기기 또는 표시
숨기기: function(elem){elem.style.display = "none";},
show: function(elem){elem.style.display = "block";},
toggle: function(elem){
elem.style.display = this .getStyle(elem,"display") === "none" ?"block":"none"
},
//요소 클래스 속성 작업
addClass: function(elem, clsName) {
if (elem.className === '') {
elem.className = clsName;
}else if (elem.className !== '' && ( ' ' elem.className ' ').indexOf(' ' clsName ' ') === -1) {
elem.className = elem.className ' ' clsName;
}
},
RemoveClass: function(elem, clsName) {
if (clsName && (' ' elem.className ' ')).indexOf(' ' clsName ' ') > -1) {
elem.className = (' ' elem.className ' ').replace( ' ' clsName ' ', ' ').replace(/^ | $/g,'')
}
},
//Html 텍스트 객체 추가 (테이블 지원)
append: function(elem, text) {
if (typeof text === "string") {
if (elem.insertAdjacentHTML){
if (elem.tagName = == "TABLE"){
var html = elem.outerHTML,ep = elem.parentNode,sl = html.length
text = html.substr(0,sl-8) text html.substr(sl) -8,sl);
ep.insertAdjacentHTML("beforeEnd", text);
ep.replaceChild(ep.lastChild,elem)
}else{
elem.insertAdjacentHTML("beforeEnd" , text);
}
}else {
var rlt = null, rg = doc.createRange(), fm = rg.createContextualFragment(text)
rlt ? rlt) : elem.appendChild(fm) ;
}
}else if (typeof text === "object") elem.appendChild(text)
},
//요소 제거
remove:function(elem){
if (elem.parentNode) elem.parentNode.removeChild(elem);
},
//빈 요소 콘텐츠 및 하위 노드
empty:function( elem){
while( elem.firstChild){
elem.removeChild(elem.firstChild);
}
},
//이미지 사전 로드
loadimages: function(){
var a = 인수 ,loads = function(){
if(doc.images){ if(!doc.ps) doc.ps = []
var i,j=doc.ps. length; for(i=0 ; iif (a[i].indexOf("#")!=0){ doc.ps[j] = 새 이미지; [j ].src=a [i];}}
};
arguments.callee.caller ? load():doc.ready(loads)
},
/ /이벤트 바인딩
바인딩: function () {
if (win.addEventListener) {
return function(elem, sType, fnc) {
elem.addEventListener(sType, fnc, false); 🎜>}
}else if (win.attachEvent) {
return function(elem, sType, fnc) {
elem.attachEvent("on" sType, fnc)
} else {
return function(){};
}
}(),
//이벤트 바인딩 해제
unbind: function(elem, sType, fnc){
if(elem.removeEventListener) {
elem.removeEventListener(sType, fnc, false);
}else if(elem.detachEvent){
elem.detachEvent("on" sType, fnc);
elem ["on" sType] = null;
}
},
//이벤트 버블링 비활성화
stopPropagation: function(ev) {
if (ev.stopPropagation) {
ev .stopPropagation();
} else {
ev.cancelBubble = true;
}
},
//기본 이벤트 동작 금지
preventDefault: function(ev) {
if (ev.preventDefault) {
ev.preventDefault();
} else {
ev.returnValue = false;
},
//마우스 위치 가져오기
getXY: function(ev){
return {
x:ev.pageX ? ev.pageX : ev.clientX docelem.scrollLeft,
y:ev.pageY : ev.clientY docelem.scrollTop
}
},
//드래그 이벤트 바인딩
드래그: 함수(obj, obj2){//obj: 이동 객체 obj2: 드래그 지점
obj2 = obj2 | | obj; //드래그 지점이 없으면 드래그 지점은 움직이는 객체입니다.
var x, y, ut = this
obj2.onmousedown = function(e) {
e = e; || win.event;
ut.preventDefault(e);
obj.setCapture && obj.setCapture()
x = ut.getXY(e).x - parsInt(obj.style.left );
y = ut.getXY(e).y - parsInt(obj.style.top);
docelem.onmousemove = over;
docelem.onmouseup =
함수 오버(e){
e || win.event
obj.style.left = ut.getXY(e).x - x "px"
obj.style.top; ut.getXY(e).y - y "px";
}
function up(){
obj.releaseCapture && obj.releaseCapture()
docelem .onmousemove = null; >docelem.onmouseup = null;
}
},
//가로 스크롤 이벤트 바인딩
sliderX: function (obj,x1,x2,overEvent,upEvent) {
var x, t , ut = this;
obj.onmousedown = function (e){
e = e || win.event
ut.preventDefault(e)
obj.setCapture && obj.setCapture( );
t = ut.getXY(e).x -parseInt(obj.style.left);
docelem.onmousemove = over;
docelem.onmouseup = up
}
함수 오버(e){
e = e || win.event
x = ut.getXY(e).x - t
if(x if(x>x2) x=x2;
obj.style.left = x "px"
overEvent && overEvent(x)
}
function up(){
obj .releaseCapture && obj.releaseCapture();
docelem.onmousemove = null;
docelem.onmouseup =
upEvent && upEvent(x);
},
/ /세로 스크롤 이벤트 바인딩
sliderY: function (obj,y1,y2,overEvent,upEvent){
var y, t, ut = this
obj. e = e || win.event;
ut.preventDefault(e);
obj.setCapture && obj.setCapture()
t = ut.getXY (e).y - parsInt(obj. style.top);
docelem.onmousemove = over;
}
function over(e){
e || >y = ut.getXY(e).y - t;
if(yif(y>y2)
obj.style.top = y "px";
overEvent && overEvent(y);
function up(){
obj.releaseCapture &&
docelem.onmousemove = null; >docelem.onmouseup = null;
upEvent && upEvent(y)
}
},
//쿠키 설정
setCookie:function(n, v, t){
var exp = new Date();
exp.setTime(exp.getTime() (t||24)*60*60*1000)
doc.cookie = n "=" escape(v) " ;expires=" exp.toGMTString() ';path=/';
},
//쿠키 가져오기
getCookie:function(n){
var arr = doc.cookie.match( new RegExp("(^| )" n "=([^;]*)(;|$)"))
if(arr != null) return unescape (arr[2]); return null;
}
});
})(document,window)
//날짜 문자열 형식
App.parseDate = function(date){
var dt = 날짜 인스턴스 ? 날짜: Date(date.replace("-","/"))
return isNaN(dt.getTime())
}; 🎜>//Json 문자열을 객체로
App.parseJSON = function(jsonString) {
var result = false
try {
result = eval('(' jsonString ')')
}catch (e) {};
return result;
}
//반복되지 않는 고유 값 가져오기
App.getUid = function(){
return "uid " (new Date()).getTime() parseInt(Math.random()*100000);
};
//지정된 범위에서 난수 가져오기
App.random = function (n1 , n2){
return Math.floor(Math.random()*(n2-n1 1)) n1;
}
//초를 밀리초로 변환
App.s2ms = function ( str){
var t = str.split(":");
return t[0] * 60000 t[1] * 1000
};
//밀리초를 초로 변환
App.ms2s = 함수(ms){
return (ms/60000 ":" ms/1000`).replace(/.d /g,"").replace( /(^|:)(d )(?!d)/g,"$10$2");
};
//숫자를 숫자로 변환
App.num2number = function (num, n) {
return Array(n ).join("0").concat(num).slice(-n);
};
//숫자를 중국어로 변환
App.num2gb = function (n){
return "제로 일 이 삼 사 오 육 칠 팔 구".split("")[n]
//플래시 생성 코드
App.getFlash = 함수(url, 너비, 높이, param){
var tagName = "", o1 = {너비:너비||1, 높이:높이||1}, o2 = {};
if (this.isIE){
tagName = "객체 ";
o1.classid = "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000";
o1.codebase = "http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=10,0,0,0";
o2.movie = URL;
o2.quality = "높음";
param && this.extend(o2, param);
}else{
tagName = "삽입 ";
o1.type = "응용프로그램/x-충격파-플래시";
o1.pluginspage = "http://www.adobe.com/go/getflashplayer_cn";
o1.src = URL;
o1.quality = "높음";
param && this.extend(o1, param);
}
if(o1.width<2&&o1.height<2) tagName ='style="position:absolute; top:-100px;" ';
var a1=[], a2=[], i;
for(i in o1) a1.push(i '="' o1[i] '"');
for(i in o2) a2.push('');
'<' 반환 태그이름 a1.join(' ') '>' a2.join('') '' 태그이름 '>';
};
//播放器生成代码
App.getPlayer = function(url, width, height, param){
var wmp = ["6bf52a52-394a-11d3-b153-00c04f79faa6","application/x -mplayer2"];
var rmp = ["CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA","audio/x-pn-realaudio-plugin"];
var mp = /.rm$/.test(url) ? rmp : wmp;
var tagName = "", o1 = {너비:너비||1, 높이:높이||1}, o2 = {};
if (this.isIE){
tagName = "객체 ";
o1.classid = "clsid:" mp[0];
o2.url = URL;
param && this.extend(o2, param);
}else{
tagName = "삽입 ";
o1.type = mp[1];
o1.src = URL;
param && this.extend(o1, param);
}
if(o1.width<2&&o1.height<2) tagName ='style="position:absolute; top:-100px;" ';
var a1=[], a2=[], i;
for(i in o1) a1.push(i '="' o1[i] '"');
for(i in o2) a2.push('');
'<' 반환 태그이름 a1.join(' ') '>' a2.join('') '' 태그이름 '>';
};
//获取XMLHttp对象
App.xmlhttp = function (){
if (this.isFF) return new XMLHttpRequest();
var a = ["Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP","Microsoft.XMLHTTP","Msxml2.XMLHTTP.4.0","Msxml2.XMLHTTP.5.0"];
for (var i=0,l=a.length;itry{
return new ActiveXObject(a[i]);
}catch(e){}
}
false를 반환합니다.
};
//Get数据
App.get = function (url,callBack){
var x = this.xmlhttp();
x.open("get",url,true);
x.onreadystatechange = function(){
x.readyState==4 && (x.status==0||x.status==200) && callBack(x.responseText);
}
x.send(null);
};
//Post数据
App.post = function (url,arg,callBack){
var x = this.xmlhttp();
x.open("post",url,true);
x.setRequestHeader("Content-Length",arg.length);
x.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
x.onreadystatechange = function(){
x.readyState==4 && (x.status==0||x.status==200) && callBack(x.responseText);
}
x.send(arg);
};
많은 양의 수량을 갖고 있습니다.