1. 程式人生 > >jQuery合併表格的自制簡易外掛

jQuery合併表格的自制簡易外掛

一、外掛程式碼

   ;(function($){

        //合併行
        $.fn.mergeRow = function(x,y,z){
            _mergeRowOrCol.call(this,x,y,z,z);
        };
        //合併列
        $.fn.mergeCol = function(x,y,z){
            _mergeRowOrCol.call(this,z,z,x,y);
        }
        /**
        * 目前只支援跨行或跨列,不支援跨行又跨列
        *   x:行的開始
        *   y:行的結尾
        *   z:列的開始
        *   j:列的結尾
        */
        var _mergeRowOrCol = function(x,y,z,j){
            var index = 0,temp = null,isrow =x!==y?true:false;
            this.each(function(){
                $(this).find("tr:gt("+(x-1)+")").filter("tr:lt("+(y-x+1)+")").each(function(i,dom){
                    if(isrow){
                        $(this).find('td:eq('+z+')').each(function(){ //遍歷td
                            if(temp==null){
                                temp = this;
                                $(temp).attr("rowSpan",y-x+1);
                            }else{
                                $(this).hide();
                            }
                        });
                    }else{
                        $(this).find("td:eq("+z+")").attr("colSpan",(j-z)+1)
                        $(this).find("td:gt("+z+")").filter("td:lt("+(j-z)+")").hide();
                        return false;
                    }
                });
            });
        };
        
    })(jQuery);

二、使用方法

    $(function(){
      $(".test").mergeCol(1,2,1);
      $(".test").mergeRow(2,4,3);
    });

三、效果

四、完整demo

<!DOCTYPE html>
<html lang="en"><head><title></title>
    <script type="text/javascript" src="../jquery-1.11.2.min.js"></script>
</head>
<style>
    table{border-collapse:collapse;padding:5px;text-align:center;width:500px;margin:50px auto;}
    td{border: 1px solid #ccc;}
</style>
<body>
    <script>
    ;(function($){

        //合併行
        $.fn.mergeRow = function(x,y,z){
            _mergeRowOrCol.call(this,x,y,z,z);
        };
        //合併列
        $.fn.mergeCol = function(x,y,z){
            _mergeRowOrCol.call(this,z,z,x,y);
        }
        /**
        * 目前只支援跨行或跨列,不支援跨行又跨列
        *   x:行的開始
        *   y:行的結尾
        *   z:列的開始
        *   j:列的結尾
        */
        var _mergeRowOrCol = function(x,y,z,j){
            var index = 0,temp = null,isrow =x!==y?true:false;
            this.each(function(){
                $(this).find("tr:gt("+(x-1)+")").filter("tr:lt("+(y-x+1)+")").each(function(i,dom){
                    if(isrow){
                        $(this).find('td:eq('+z+')').each(function(){ //遍歷td
                            if(temp==null){
                                temp = this;
                                $(temp).attr("rowSpan",y-x+1);
                            }else{
                                $(this).hide();
                            }
                        });
                    }else{
                        $(this).find("td:eq("+z+")").attr("colSpan",(j-z)+1)
                        $(this).find("td:gt("+z+")").filter("td:lt("+(j-z)+")").hide();
                        return false;
                    }
                });
            });
        };

    })(jQuery);

    $(function(){
      $(".test").mergeCol(1,2,1);
      $(".test").mergeRow(2,4,3);
    });
    
    </script>

    <table class="test">
        <tr>
            <td>1</td>
            <td>2</td>
            <td>3</td>
            <td>4</td>
            <td>5</td>
        </tr>
        <tr>
            <td>1</td>
            <td>2</td>
            <td>3</td>
            <td>4</td>
            <td>5</td>
        </tr>
        <tr>
            <td>1</td>
            <td>2</td>
            <td>3</td>
            <td>4</td>
            <td>5</td>
        </tr>
        <tr>
            <td>1</td>
            <td>2</td>
            <td>3</td>
            <td>4</td>
            <td>5</td>
        </tr>
        <tr>
            <td>1</td>
            <td>2</td>
            <td>3</td>
            <td>4</td>
            <td>5</td>
        </tr>
        <tr>
            <td>1</td>
            <td>2</td>
            <td>3</td>
            <td>4</td>
            <td>5</td>
        </tr>
    </table>

</body>
</html>