可編輯的jquery表格外掛程式

來源:互聯網
上載者:User
/*可編輯的表格外掛程式v1.0*//*author:塵絮緣 xcl  date:2011-12-02*//*update:2011-12-05*//*qq:80213876          *//*說明:雙擊行編輯,再雙擊則儲存更多參數,請參照最下方的:defaults*/var tableListInfo = {    init: function(options) {        options = $.extend(tableListInfo.defaults, options); //這裡其實就是合并多個對象為一個。這裡就是,如果你在調用的時候寫了新的參數,就用你新的參數,如果沒有寫,就用預設的參數。        //滑過變色        $(options.tableClass).hover(function() {            $(this).addClass(options.trHoverClass);        }, function() {            $(this).removeClass(options.trHoverClass);        });        //設定奇數行和偶數行的樣式        $(options.tableClass + ":odd").addClass(options.trOddClass);        $(options.tableClass + ":even").addClass(options.trEvenClass);        //單擊選中        $(options.tableClass).live("click", function() {            $(this).hasClass(options.trSelectedClass) ? $(this).removeClass(options.trSelectedClass) : $(this).addClass(options.trSelectedClass);            return false;        });        //全選        $(options.selectAllClass).live("click", function() {            $(options.tableClass).addClass(options.trSelectedClass);            return false;        });        //全不選        $(options.selectNothingClass).live("click", function() {            $(options.tableClass).removeClass(options.trSelectedClass);            return false;        });        //反選        $(options.selectOtherClass).live("click", function() {            $(options.tableClass).each(function() {                $(this).hasClass(options.trSelectedClass) ? $(this).removeClass(options.trSelectedClass) : $(this).addClass(options.trSelectedClass);            });            return false;        });        //刪除        $(options.delClass).live("click", function() {            var ids = [];            var trObjs = [];            $(options.tableClass).each(function() {                if ($(this).hasClass(options.trSelectedClass)) {                    ids.push($(this).attr(options.idAttr));                    trObjs.push($(this));                }            });            if (ids.length > 0) {                if (options.delCallBack != null) {                        var str=options.delCallBack(ids, trObjs).split(",");//刪除失敗的ID數組for (var i = 0; i < trObjs.length; i++) {var flag=1;                            for(var m=0;m<str.length;m++){if(trObjs[i].attr(options.idAttr)==str[m])//刪除失敗的行{flag=0;break;}}if(flag==1){trObjs[i].fadeTo("normal", 0.6, function() {$(this).remove();});}}                }            }            return false;        });        //編輯        $(options.editClass).live("click", function() {            var ids = [];            var trObjs = [];            $(options.tableClass).each(function() {                if ($(this).hasClass(options.trSelectedClass)) {                    ids.push($(this).attr(options.idAttr));                    trObjs.push($(this));                }            });            if (ids.length > 1) {                alert(options.trEditMsg);                return false;            }            else if (ids.length == 1) {                if (options.editCallBack != null) {                    options.editCallBack(ids, trObjs);                }            }            return false;        });        //單擊“全部取消編輯”按鈕        $(options.cancleAllClass).live("click", function() {            $(options.tableClass + " .cancleEditCurrentTr").click();            return false;        });        //單擊行後面的"取消編輯"        $("a.cancleEditCurrentTr").live("dblclick", function(event) {            event.stopPropagation();            return false;        }).live("click", function(event) {            $parnetTr = $(this).closest("tr");            $parnetTr.html(unescape($parnetTr.attr("oldInfo"))).removeAttr("oldInfo");            event.stopPropagation();            return false;        });        //雙擊tr(事件切換,雙擊編輯,再雙擊則儲存)        $(options.tableClass).live("dblclick", function(event) {            if ($(this).attr("oldInfo") == undefined) {//當前tr不在編輯狀態                $(this).attr("oldInfo", escape($(this).html())); //儲存未編輯時的tr的html                //產生可編輯的tr                if (options.trSaveCallBack != null) {                    if(options.tdEnableEditClass=="") return false;$currentTds=$(this).find("td"+options.tdEnableEditClass)$currentTrLineTr = $(this);                    $currentTds.each(function(i) {                        var v = $.trim($(this).text());                        $(this).html("<input type=\"text\" " + options.tdEditInputAttr + " class=\"" + options.tdEditInputClass + "\" value=\"" + v + "\"/>");                        if (i == $currentTds.length - 1)//如果是最後一個td,則在後面產生一個按鈕“取消編輯”                        {                            $($currentTds[i]).find("." + options.tdEditInputClass).after("<a href=\"javascript:void(0);\" class=\"cancleEditCurrentTr\">" + options.cancleBtnText + "</a>");                        }                    });                }            }            else { //儲存tr回調資料                //提取當前行的每列資料,並存到數組中。                var trValue = [];                $(this).find("td").each(function() {                    if ($(this).find(":input").length > 0)//如果該列中有input,則提取出來                    {                        trValue.push($.trim(escape($($(this).find(":input")[0]).val())));                    }                    else {                        trValue.push($.trim(escape($(this).text())));                    }                });                if (options.trSaveCallBack($(this).attr(options.idAttr), trValue) == 1) {                    //儲存成功                    $(this).removeAttr("oldInfo");                    $(this).find("td").each(function(i) {                        $(this).html(unescape(trValue[i]));                    });                }                else {//儲存失敗                    //$(this).html(unescape($(this).attr("oldInfo"))).removeAttr("oldInfo");                }            }            event.stopPropagation();            return false;        });        //單擊全部儲存        $(options.saveAllClass).live("click", function() {            if (options.trSaveAllCallBack != null) {                var currentEditObjs = [];                var ids = [];                for (var i = 0; i < $(options.tableClass).length; i++) {                    if ($($(options.tableClass)[i]).attr("oldInfo") != undefined) {                        currentEditObjs.push($($(options.tableClass)[i]));                        ids.push($($(options.tableClass)[i]).attr(options.idAttr));                    }                }if(currentEditObjs.length==0)return false;                var failIds = (options.trSaveAllCallBack(ids, currentEditObjs)).split(","); //返回的是儲存失敗的id集合(用|分隔的字串)                for (var m = 0; m < currentEditObjs.length; m++) {                    var flag = 0;                    for (var f = 0; f < failIds.length; f++) {                        //失敗                        if (failIds[f] == currentEditObjs[m].attr(options.idAttr)) {                            //currentEditObjs[m].html(unescape(currentEditObjs[m].attr("oldInfo"))).removeAttr("oldInfo");                            flag = 1;                            break;                        }                    }                    if (flag == 1) continue;                    //提取當前行的每列資料,並存到數組中。                    var trValue = [];                    currentEditObjs[m].find("td").each(function() {                        if ($(this).find(":input").length > 0)//如果該列中有input,則提取出來                        {                            trValue.push($.trim(escape($($(this).find(":input")[0]).val())));                        }                        else {                            trValue.push($.trim(escape($(this).text())));                        }                    });                    currentEditObjs[m].removeAttr("oldInfo");                    currentEditObjs[m].find("td").each(function(i) {                        $(this).html(unescape(trValue[i]));                    });                }            }            return false;        });    },    defaults: {//注意樣式和選取器        tableClass: ".tableList tr:gt(0)", //表格容器class        trHoverClass: "trHover", //滑過的樣式        trSelectedClass: "trSelected", //選中的樣式        delClass: ".delSelected", //刪除按鈕class        editClass: ".editSelected", //編輯按鈕class        selectAllClass: ".selectAll", //全選按鈕class        selectNothingClass: ".selectNothing", //全不選按鈕class        selectOtherClass: ".selectOther", //反選按鈕class        idAttr: "ref", //存放ID的行屬性        delCallBack: null, //刪除回呼函數(ids:ref的屬性值集合;trObjs:要刪除的行jq對象數組)        editCallBack: null, //編輯回呼函數(ids:ref的屬性值集合;trObjs:要編輯的行jq對象數組)        trSaveCallBack: null, //雙擊正在編輯的tr儲存回呼函數(id:當前行的ref的屬性值;trObj:要編輯的tr的jq對象)        trSaveAllCallBack: null, //全部儲存回呼函數(ids:當前行的ref的屬性值;trObjs:要編輯的tr的jq對象)        tdEnableEditClass: ".enableEdit", //為""則每個td都不可以編輯,如果不為空白,則指定class的td能編輯        tdEditInputClass: "EditInput", //正在編輯列中的Input的樣式        tdEditInputAttr: "", //正在編輯列中的Input的其它屬性,格式:"name='xxx'  id='xx'"        trOddClass: "trOdd", //奇數行樣式        trEvenClass: "trEven", //偶數行樣式        trEditMsg: "只能選一項進行編輯!", //如果選了多條記錄進行編輯時的提醒語        cancleBtnText: "取消編輯", //當編輯tr時,後面的取消按鈕的文字        cancleAllClass: ".cancleEditAll", //全部取消按鈕class        saveAllClass: ".saveEditAll"//全部儲存按鈕class    }}

/*css hack by xcl  2011-12-01*/.trHover{background:#eee!important;color:#f00;}.trSelected{background:#9f6!important;color:#f00;}.tableList{border:solid 1px #95b3d7;border-collapse:collapse;}.tableList td{border:solid 1px #95b3d7;}.trOdd{background:#F2FFFF;}.trEven{background:#F0F5FF;}.EditInput{width:80px;}

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html> <head>  <title> table</title>  <script type="text/javascript" src="jquery-1.5.1.min.js"></script>  <script type="text/javascript" src="table.min.js"></script>  <link href="table.css" rel="stylesheet" type="text/css"/>  <script type="text/javascript">      $(function() {          tableListInfo.init({ tableObj: ".tableList tr:gt(0)", tdEnableEditClass: ".enableEdit",              delCallBack: function(ids, trObjs) {alert("1,3,4刪除失敗!");return "1,3,4";//刪除失敗的id號  },              editCallBack: function(ids, trObjs) {                  alert(ids +"\n"+trObjs[0].html());              },              trSaveCallBack: function(id, trVlaue) {  return 1;//儲存成功則返回1              },  trSaveAllCallBack:function(ids,trObjs){ alert("10,11,13更新失敗!"); return "10,11,13";//儲存失敗的ID號  }          });      })  </script> </head> <body><div><table class="tableList" style="width:100%;text-align:center;"><tr>    <td width="25%">標題</td>    <td width="25%">標題</td>    <td width="25%">標題</td>    <td width="25%">標題</td></tr><tr ref="1">    <td>ASP.NET</td>    <td class="enableEdit">C#</td>    <td class="enableEdit">vb.net</td>    <td>mvc</td></tr><tr ref="2">    <td class="enableEdit">.NET</td>    <td class="enableEdit">C#</td>    <td class="enableEdit">vb.net</td>    <td class="enableEdit">mvc</td></tr><tr ref="3">    <td class="enableEdit">JAVA</td>    <td class="enableEdit">C#</td>    <td class="enableEdit">vb.net</td>    <td class="enableEdit">mvc</td></tr><tr ref="4">    <td class="enableEdit">C#</td>    <td class="enableEdit">C#</td>    <td class="enableEdit">vb.net</td>    <td class="enableEdit">mvc</td></tr><tr ref="5">    <td class="enableEdit">RUBY</td>    <td class="enableEdit">C#</td>    <td class="enableEdit">vb.net</td>    <td class="enableEdit">mvc</td></tr><tr ref="6"><td class="enableEdit">C++</td><td class="enableEdit">C#</td><td class="enableEdit">vb.net</td><td class="enableEdit">mvc</td></tr><tr ref="6"><td class="enableEdit">MS</td><td class="enableEdit">C#</td><td class="enableEdit">vb.net</td><td class="enableEdit">mvc</td></tr><tr ref="8"><td class="enableEdit">C</td><td class="enableEdit">C#</td><td class="enableEdit">vb.net</td><td class="enableEdit">mvc</td></tr><tr ref="9"><td class="enableEdit">LOGO</td><td class="enableEdit">C#</td><td class="enableEdit">vb.net</td><td class="enableEdit">mvc</td></tr><tr ref="10"><td class="enableEdit">JAVA EE</td><td class="enableEdit">C#</td><td class="enableEdit">vb.net</td><td class="enableEdit">mvc</td></tr><tr ref="11"><td  class="dis">OBJECT C</td><td class="enableEdit">C#</td><td class="enableEdit">vb.net</td><td  class="dis">mvc</td></tr><tr ref="12"><td class="enableEdit">WM</td><td class="enableEdit">C#</td><td class="enableEdit">vb.net</td><td class="enableEdit">mvc</td></tr><tr ref="13"><td class="enableEdit">WPPP</td><td class="enableEdit">C#</td><td class="enableEdit">vb.net</td><td class="enableEdit">mvc</td></tr><tr ref="14"><td class="enableEdit">TTTT</td><td class="enableEdit">C#</td><td class="enableEdit">vb.net</td><td class="enableEdit">mvc</td></tr></table><div style="width:100%"><a href="javascript:void(0);" class="selectAll">全選</a>   <a href="javascript:void(0);" class="selectNothing">全不選</a>   <a href="javascript:void(0);" class="selectOther">反選</a>   <a href="javascript:void(0);" class="editSelected">編輯已選項</a>   <a href="javascript:void(0);" class="delSelected">刪除已選項</a>   <a href="javascript:void(0);" class="cancleEditAll">全部取消編輯</a>   <a href="javascript:void(0);" class="saveEditAll">全部儲存編輯</a>   </div></div> </body></html>

 

 

 

 

:http://ishare.iask.sina.com.cn/f/22778265.html 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.