/*
* Create by nhosw at i-swear.com
* Last Modify 2007.05.19
* 이 주석은 삭제하지마시길 바랍니다.
*/
/*
* rowspantable
* @param string tbl 테이블이름
* @param int sortnode 정렬기준점 , 0이면 기준점 없음
* @param int sortdirect 정렬방향, 0이면 무지향, 1이면 왼쪽으로 나가면서 rowspan, 2면 우측으로 가면서 rowspan
* @param boolean sorttype 정렬타입, false 이면 무조건 정렬, true이면 기준점이 rowspan 되어야 rowspan 됨
* @param boolean thfind 테이블의 최상위 td 검사 여부 true 면 검사, false 면 검사 안함 디폴트 false
*/
var tblArr;
function rowspantable(tbl, sortnode, sortdirect, sorttype, thfind) {
tblArr = null;
tblArr = Array();
var tmpArr = Array();
var tr = null;
var td = null;
var tmp = null;
if (typeof(tbl) != "object") tbl = document.getElementById(tbl);
// 인자가 올바른지 확인
if (!tbl) return;
if (sortdirect != 0 && sortdirect != 1 && sortdirect != 2) return;
if (sorttype != true && sorttype != false) return;
if (!thfind) thfind = 1;
else thfind = 0;
// 인자가 올바른지 확인 end
nodeFind(tbl , 0, 0);
// 1차원 배열
var trcnt = tblArr.length;
for (var i=0; i<tblArr.length; i++) {
if (!tblArr[i]) continue;
// 2차원 배열
for (var j=0; j<tblArr[i].length; j++) {
if (!tblArr[i][j]) continue;
// tdnode 가 sortnode 보다 크다면 continue
if (sortdirect == 1 && j > sortnode) continue;
if (sortdirect == 2 && j < sortnode) continue;
// Rowspan 하기 위해 검사합니다.
if (i < trcnt - 1 && tblArr[i][j] == tblArr[i+1][j]) {
// sorttype 이 true 이면 기준점 확인할것.
if (sorttype == true) {
if (tblArr[i][sortnode] != tblArr[i+1][sortnode]) continue;
}
// tmpArr 에 넣는다
tmpArr[tmpArr.length] = i+","+j;
}
}
// 2차원 배열 End
}
// 1차원 배열 end
// tblArr 초기화
tblArr = null;
// rowspan
for (var i=tmpArr.length-1; i>=0; i--) {
tmp = tmpArr[i].split(",");
tr = tmp[0];
td = tmp[1];
if (tr <= thfind) continue;
tbl.childNodes[0].childNodes[tr-1].childNodes[td-1].rowSpan = tbl.childNodes[0].childNodes[tr].childNodes[td-1].rowSpan + 1;
tbl.childNodes[0].childNodes[tr].childNodes[td-1].removeNode(true);
}
}
function nodeFind(el, trnode, tdnode) {
var cnt = el.childNodes.length;
var tmp = new Array();
try {
for (var i=0; i<cnt; i++) {
// tr 일 경우 trnode++
if (el.childNodes[i].nodeName == "TR") { trnode++; tdnode = 0; }
else if (el.childNodes[i].nodeName == "TD" || el.childNodes[i].nodeName == "TH") { tdnode++; }
if (el.childNodes[i].nodeValue) {
if (!tblArr[trnode]) tblArr[trnode] = Array();
tblArr[trnode][tdnode] = el.childNodes[i].nodeValue;
}
if (el.childNodes.length > 0) nodeFind(el.childNodes[i], trnode, tdnode);
}
}
catch (e) { return; }
}
이 글은 스프링노트에서 작성되었습니다.
'Computer > JavaScript' 카테고리의 다른 글
동적으로 자바스크립트 로드하기 (0) | 2012.08.10 |
---|---|
동적으로 js 로딩 (0) | 2012.08.10 |
Ctrl F 를 웹에서 구현 (0) | 2012.08.10 |
jQuery ajaxUpload handleError not defined 에러 (2) | 2012.04.20 |
IE8 jQuery not working fadeIn fadeOut (2) | 2012.03.09 |