본문 바로가기

js/jsGrid

[jsgrid] grid merge




jsgrid 에서 grid 파싱 후 merge function 을 호출 할 이벤트는 onRefreshed 이다. 


$("#jsGrid").jsGrid({


    ... 옵션들

    ,

    onRefreshed: function (args) {

        gridMerge();

    }

});



onRefreshed 이후 호출되는 grid merge 함수


function gridMerge()

{

    var classNameMap = new Object();

    var gridRowTag = "#jsGrid > div.jsgrid-grid-body > table > tbody > tr";

    var gridRows = $(gridRowTag);


    $.each(gridRows, function (index, item) {

        var className = $(this).attr("class").replace(/[^0-9]/g, '');

        if (className !="" && classNameMap[className] == undefined)

            classNameMap[className] = $(gridRowTag + "." + className).length;

    });


    //console.log("classNameMap : " + JSON.stringify(classNameMap));


    $.each(classNameMap, function (index, item) {

        if (parseInt(item) > 1)

        {

            //table rows 중에서 현재 rowspan 이 들어가야하는 row 의node index 가져오기

            var firstIndex = $(gridRowTag).index($(gridRowTag + "." + index + ":eq(0)"));           


            for (var rowIndex = 0; rowIndex < item; rowIndex++) {

                var trRowIndex = firstIndex + rowIndex;


                if (rowIndex == 0) {

                    $(gridRowTag + ":eq(" + trRowIndex + ")." + index + " > td:eq(0)").attr("rowspan", item);

                    $(gridRowTag + ":eq(" + trRowIndex + ")." + index + " > td:eq(4)").attr("rowspan", item);

                    $(gridRowTag + ":eq(" + trRowIndex + ")." + index + " > td:eq(5)").attr("rowspan", item);

                } else {

                    $(gridRowTag + ":eq(" + trRowIndex + ")." + index + " > td:eq(0)").remove();

                    

                    // 헷갈림 주의~!!!

                    // td:eq(0) 요소가 삭제되어 index 가 하나 줄어들었다. 


                    //앞에서 요소하나 삭제함. $(gridRowTag + ":eq(" + trRowIndex + ")." + index + " > td:eq(4)").attr("rowspan", item); 에 해당하는 td는 td:eq(3)이 됨.

                    $(gridRowTag + ":eq(" + trRowIndex + ")." + index + " > td:eq(3)").remove();        


                    //앞에서 요소하나 삭제함. $(gridRowTag + ":eq(" + trRowIndex + ")." + index + " > td:eq(5)").attr("rowspan", item); 에 해당하는 td는 td:eq(3)이 됨. 

                    $(gridRowTag + ":eq(" + trRowIndex + ")." + index + " > td:eq(3)").remove();

                }

            }

        }

    });

}