做了一個jquery插件,使表格的標題列可左右拉伸


 示例下載

插件名稱命名為:jquery.tableresize.js,代碼如下:

/*
Writen by mlcactus, 2014-11-24
這是我封裝的一個jquery插件,能夠使table的各列可以左右拉伸,從而使寬度變小或變大
用法:$("#table_id").tableresize();
*/
(function ($) {
    $.fn.tableresize = function (options) {
        var defaults = {
            //當table的寬度到達默認最大值時,是否繼續增大以至於出現橫向滾動條
            resizeTable: true
        }; 
        var opts = $.extend(defaults, options);


        var _document = $("body");
        //設定user-select樣式,防止內容被選中
        var set_user_select = function (jqueryobj, val) {
            jqueryobj.css("-moz-user-select", val).css("-webkit-user-select", val).css("-ms-user-select", val);
        };
        $(this).each(function () {
            if (!$.tableresize) {
                $.tableresize = {};
            }
            var _table = $(this);
            //設定ID
            var id = _table.attr("id") || "tableresize_" + (Math.random() * 100000).toFixed(0).toString();
            var tr = _table.find("tr").first(), ths = tr.children(), _firstth = ths.first();
            //設定臨時變量存放對象
            var cobjs = $.tableresize[id] = {};
            cobjs._currentObj = null, cobjs._currentLeft = null;
            ths.mousemove(function (e) {
                var _this = $(this);
                var left = _this.offset().left, top = _this.offset().top, width = _this.outerWidth(), height = _this.outerHeight(), right = left + width, bottom = top + height, pageX = e.pageX, pageY = e.pageY;
                var leftside = !_firstth.is(_this) && Math.abs(left - pageX) <= 5, rightside = Math.abs(right - pageX) <= 5;
                if (cobjs._currentLeft || pageY > top && pageY < bottom && (leftside || rightside)) {
                    _document.css("cursor", "e-resize");
                    set_user_select(_table, "none");
                    if (!cobjs._currentLeft) {
                        if (leftside) {
                            cobjs._currentObj = _this.prev();
                        }
                        else {
                            cobjs._currentObj = _this;
                        }
                    }
                }
                else {
                    _document.css("cursor", "auto");
                    cobjs._currentObj = null;
                }
            });
            ths.mouseout(function (e) {
                if (!cobjs._currentLeft) {
                    cobjs._currentObj = null;
                    _document.css("cursor", "auto");
                    set_user_select(_table, "auto");
                }
            });
            _document.mousedown(function (e) {
                if (cobjs._currentObj) {
                    cobjs._currentLeft = e.pageX;
                }
                else {
                    cobjs._currentLeft = null;
                }
            });
            _document.mouseup(function (e) {
                if (cobjs._currentLeft) {
                    var changeWidth = e.pageX - cobjs._currentLeft;
                    cobjs._currentObj.width(cobjs._currentObj.width() + changeWidth);
                    if (opts.resizeTable) {
                        _table.width(_table.width() + changeWidth);
                    }
                }
                cobjs._currentObj = null;
                cobjs._currentLeft = null;
                _document.css("cursor", "auto");
                set_user_select(_table, "auto");
            });
        });
    };
})(jQuery);

 

頁面代碼為:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <style type="text/css" >
        td{ text-align:center;}
    </style>
    <script type="text/javascript" src="script/jquery-1.10.2.js"></script>
    <script type="text/javascript" src="script/jquery.tableresize.js"></script>
    <script type="text/javascript">
        $(document).ready(function () {
             //該設置使table達到默認最大寬度時,將不再繼續變寬
            var ops = { resizeTable: false };
            //使兩張table同時支持左右拉伸
            $("table").tableresize(ops);
        });
    </script>
</head>
<body>
    表格1<br/>
    <table cellspacing="0" border="1" style="border-collapse:collapse;" rules="all">
		<tbody><tr>
			<td style="width:200px;">ID</td><td style="width:200px;">名字</td><td style="width:200px;">年紀</td><td style="width:200px;">地址</td><td style="width:200px;">電話</td>
		</tr><tr>
			<td>22</td><td>Name:44</td><td>Age:23</td><td>Address:47</td><td>Phone:15</td>
		</tr><tr>
			<td>28</td><td>Name:42</td><td>Age:68</td><td>Address:30</td><td>Phone:50</td>
		</tr><tr>
			<td>29</td><td>Name:63</td><td>Age:48</td><td>Address:90</td><td>Phone:76</td>
		</tr>
	</tbody>
    </table>
    <br/>表格2<br/>
    <table cellspacing="0" border="1" style="border-collapse:collapse;" rules="all">
		<tbody><tr>
			<td style="width:200px;">ID</td><td style="width:200px;">名字</td><td style="width:200px;">年紀</td><td style="width:200px;">地址</td><td style="width:200px;">電話</td>
		</tr><tr>
			<td>22</td><td>Name:44</td><td>Age:23</td><td>Address:47</td><td>Phone:15</td>
		</tr><tr>
			<td>28</td><td>Name:42</td><td>Age:68</td><td>Address:30</td><td>Phone:50</td>
		</tr>
	</tbody></table>

</body>
</html>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM