| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822 | 
							- Namespace.register("U.UF.E");
 
- //初始化table
 
- /**
 
- *  表格总接口
 
- * range为编辑器的光标对象
 
- */
 
- U.UF.E.table = function (range) {
 
-     var _p,
 
-         _inputo,
 
-         _inputt,
 
-         _frag = $$("frag"),
 
-         _table = U.UF.E.table;  //简写命名空间
 
-     _table._range = range;
 
-     _p = $$("p", { "style": { "cssText": "text-align: left;font-weight: bold;padding: 10px 0 0 15px;" }, "innerHTML": "表格尺寸: " }, _frag);
 
-     _p = $$("p", { "style": { "cssText": "text-align: left;margin-top: 15px;font-size: 14px;padding-left: 30px;" }, "innerHTML": "列数: " }, _frag);
 
-     _inputo = $$("input", { "type": "number", "style": { "cssText": "width: 80px;margin-left: 65px;" }, "min": "1" }, _p);
 
-     _p = $$("p", { "style": { "cssText": "text-align: left;padding-left: 30px;margin-top: 15px;font-size: 14px;margin-bottom: 22px;" }, "innerHTML": "行数: " }, _frag);
 
-     _inputt = $$("input", { "type": "number", "style": { "cssText": "width: 80px;margin-left: 65px;" }, "min": "1" }, _p);
 
-     //弹出框的html代码
 
-     U.UF.UI.confirm(_frag, function () {    //弹框输入 行 和 列
 
-         var _row = _inputo.value;   //行
 
-         var _col = _inputt.value;   //列
 
-         if (_row >= 1 && _col >= 1) {   //如果 行和列的值大于1 则添加表格
 
-             _table.addTable(_row, _col);
 
-         }
 
-     });
 
-     U.selectEl(document).unbind('mousedown', U.UF.E.table.removeFocus); //先取消事件监听 在添加 防止重复绑定
 
-     U.selectEl(document).bind('mousedown', U.UF.E.table.removeFocus); //添加点击时的聚焦效果 并且若存在textarea元素 则删除并获取textarea的值给td
 
- };
 
- //初始化整理table,功能作用: 给外部添加的table元素添加样式和事件
 
- U.UF.E.table.load = function (tableel) {
 
-     var _table = U.UF.E.table;  //简写命名空间
 
-     var _tableEl = tableel;
 
-     if (_tableEl.features) return;  //如果已初始化 则直接返回
 
-     _tableEl.features = true;   //代表已初始化过
 
-     var _pelDiv = _tableEl.parentNode;  //父节点的初始化
 
-     var _allTd = _tableEl.querySelectorAll("td");
 
-     _allTd.forEach(function (v) {   /*删除所有display为none的dt元素*/
 
-         U.selectEl(v).rmAttr("width");
 
-         var _value = U.selectEl(v).css("display");
 
-         if (_value === "none") {
 
-             v.remove();
 
-         }
 
-     });
 
-     _pelDiv.style.cssText = "overflow-y:hidden;padding-bottom:5px;padding-right:7px;";   //_div的样式
 
-     _tableEl.style.cssText = _tableEl.style.cssText + "border-spacing: 0;border-collapse: collapse;position: relative;";
 
-     _tableEl.contentEditable = "false";
 
-     _table.tableOver(_tableEl);  //添加选中选出事件 防止选中td时 选中外面的元素 而报错
 
-     var _trList = _tableEl.querySelectorAll("tr");
 
-     var _tdList = U.selectEl(_tableEl).find("td");
 
-     //列拉升处理
 
-     for (var i = 0; i < _tdList.length; i++) {
 
-         var _tdCopy = _tdList[i];
 
-         _tdCopy.contentEditable = "true";
 
-         _tdCopy.style.cssText += ";outline:0;box-sizing:border-box;position:relative;padding:0px;border:2px solid #333;" //这样子写csstext不会给覆盖
 
-         var _tdWidth = _tdCopy.clientWidth;
 
-         _tdCopy.style.width = _tdWidth + "px";    //给td添加width
 
-         _table.loadCell(_tdCopy); //初始有合并单元格 的情况
 
-         var _colRule = $$("div", { "style": { "outline": "0", "zIndex": "1", "position": "absolute", "top": 0, "right": 0, "cursor": "col-resize", "width": "3px", "height": "100%" }, "tabindex": "0", "contenteditable": "false", "className": "U_MD_O_W_Table_colRule", "inline": true }, _tdCopy); //列尺
 
-         _table.colExpanding(_colRule); //给列尺 添加左右拉伸事件
 
-         _table.dragCheckd(_tdCopy);    //td拖拽的选中事件
 
-         _table.rightClick(_tableEl);    //添加右键
 
-     }
 
-     //行拉升处理
 
-     for (var i = 0; i < _trList.length; i++) {
 
-         var _trEl = _trList[i];
 
-         _trEl.style.cssText += ";position:relative;overflow:hidden;";
 
-         var _rowRule = $$("div", { "style": { "outline": "0", "zIndex": "1", "position": "absolute", "left": 0, "margin-top": _trEl.clientHeight + "px", cursor: "row-resize", height: "3px", width: "100%" }, tabindex: "0", "contenteditable": "false", "className": "U_MD_O_W_Table_rowRule", "inline": true }, _trEl); //行尺
 
-         _table.rowExpanding(_rowRule);  //行尺 上下拉伸事件
 
-     };
 
- }
 
- /**
 
- * 初始有合并单元格 的情况
 
- * tdEl td元素
 
- */
 
- U.UF.E.table.loadCell = function (tdEl) {
 
-     var _table = U.UF.E.table;  //简写命名空间
 
-     var _tableEl = _table.parentSelect(tdEl, "table");   //获取table元素
 
-     var _colSpan = tdEl.colSpan - 1;   //跨了_colSpan列
 
-     var _rowSpan = tdEl.rowSpan - 1;  //跨了_rowSpan行
 
-     if (_colSpan >= 1) {
 
-         for (var i = 0; i < _colSpan; i++) {
 
-             var _newTd = $$("td");
 
-             _newTd.style.display = "none";
 
-             _table.After(tdEl, _newTd);
 
-         }
 
-     }
 
-     if (_rowSpan >= 1) {
 
-         var _tdIndex = _table.index(tdEl);       //获取该td的所在索引
 
-         var _trIndex = _table.index(tdEl.parentNode);  //获取该行tr所在位置
 
-         var _trList = _tableEl.querySelectorAll("tr"); //获取所有的tr
 
-         for (var i = 1; i <= _rowSpan; i++) {    //获取该tr的下_rowSpan个tr
 
-             var _tdList = _trList[_trIndex + i].querySelectorAll("td"); //获取该tr的所有td
 
-             var _td = _tdList[_tdIndex - 1];
 
-             for (var j = 0; j <= _colSpan; j++) {
 
-                 var _newTd = $$("td");
 
-                 _newTd.style.display = "none";
 
-                 _table.After(_td, _newTd);
 
-             }
 
-         }
 
-     }
 
- }
 
- /**
 
- * 创建表格
 
- * @param row   表格的行
 
- * @param col   表格的列
 
- */
 
- U.UF.E.table.addTable = function (row, col) {
 
-     var i, j, _tr, _td,
 
-         _frag = $$("frag"),
 
-         _pel = U.UF.E.table.createTablePel(),  //table父节点
 
-         _table = $$("table", { style: { cssText: "border-spacing: 0;border-collapse: collapse;width: 100%;position: relative;table-layout:fixed;"} }, _pel),
 
-         _tbody = $$("tbody", {}, _table),
 
-         _width = Math.max(Math.floor(_table.clientWidth / col), 50)
 
-     ;
 
-     // var _width = Math.max(Math.floor(_table.clientWidth / col), 50);
 
-     //循环创建tr td
 
-     for (i = 0; i < row; i++) {
 
-         _tr = $$("tr", {}, _frag);  //创建tr
 
-         for (j = 0; j < col; j++) {
 
-             _td = $$("td", { style: { width: _width + "px" }, "innerHTML": "<br />" }, _tr);
 
-         }
 
-     }
 
-     _tbody.appendChild(_frag);    //修改
 
-     U.UF.E.table.load(_table);
 
- };
 
- /**
 
- * 换行并返回该行的div 然后在该行下面创建空div(防止表格后无法聚焦)
 
- * return 创建表格的div(父节点)
 
- */
 
- U.UF.E.table.createTablePel = function () {
 
-     var _table = U.UF.E.table;
 
-     //console.log(_table._range);
 
-     var _range = U.UF.E.table._range,   //获取光标
 
-         _div = U.UF.E.getLineElement(_range.startContainer);    //获取光标所在行的div
 
-     if (_div.textContent !== "") {   //如果该行有内容 则新建一行div
 
-         var _div = U.selectEl("#" + U.UF.E.key.addLine(_range).addLine)[0];
 
-     }
 
-     //   U.selectEl(_div).attr("contenteditable", "false");    //无内容的div(表格的父节点) 取消编辑效果
 
-     _div.style.cssText = "overflow-y:hidden;padding-bottom:5px;padding-right:7px;width:90%";   //_div的样式
 
-     U.UF.E.key.addLine(_range);   //在表格的父节点下添加div 防止无法聚焦
 
-     _table.placeCaretAtEnd(_div);
 
-     return _div;
 
- };
 
- /**
 
- * 将表格的第一个tr里的所有列尺元素 添加 zindex为1 的样式
 
- * tableEl 表格元素
 
- */
 
- U.UF.E.table.firstLinePeak = function (tableEl) {
 
-     U.selectEl(tableEl).find(".U_UF_E_Table_peak").css("height", 0);  //原来有列尺的元素高度清0
 
-     U.selectEl(tableEl).find(".U_UF_E_Table_peak").removeClass("U_UF_E_Table_peak");  //改变 删除所有列尺的zIndex为1的样式
 
-     var _height = tableEl.clientHeight;  //获取表格的高
 
-     var _colRuleList = tableEl.querySelectorAll("tr")[0].querySelectorAll(".U_MD_O_W_Table_colRule"); //获取第一行的列尺
 
-     for (var i = 0, len = _colRuleList.length; i < len; i++) {
 
-         var _colRule = _colRuleList[i];
 
-         _colRule.style.height = _height + "px"; //所有列尺的高等于表格的高
 
-         U.selectEl(_colRule).addClass("U_UF_E_Table_peak");
 
-     }
 
- };
 
- /**
 
- *
 
- * @param table 防止选中事件时选中到表格外的元素而报错
 
- */
 
- U.UF.E.table.tableOver = function (table) {
 
-     U.selectEl(table).bind('mouseover', function () {    //判断鼠标是否在该table里 如果在 才可以选择区域
 
-         this.over = true;
 
-     });
 
-     U.selectEl(table).bind('mouseout', function () {
 
-         this.over = false;
 
-     });
 
- };
 
- /**
 
- *
 
- * @param colrule 列尺(div) 添加左右拉伸事件
 
- */
 
- U.UF.E.table.colExpanding = function (colrule) {
 
-     var _div = colrule;
 
-     U.selectEl(_div).bind({
 
-         'mousedown': function (e) {
 
-             U.selectEl("#U_UF_EL_rightmenu")[0] && U.selectEl("#U_UF_EL_rightmenu")[0].remove();    //删除右键元素
 
-             U.UF.EV.stopBubble(e);                                    //阻止冒泡
 
-             this.style.backgroundColor = "#8cb3e0"; //修改列尺(div)的颜色
 
-             var _table = U.UF.E.table;
 
-             var _this = this;
 
-             var _tdEl = this.parentNode;  //获取td(每个列对应一个td父节点)
 
-             var _tableEl = _table.parentSelect(this, "table");    //获取所在的table
 
-             var _tableElWidth = _tableEl.clientWidth;       //table当前的宽度
 
-             var _trList = _tableEl.querySelectorAll("tr");    //获取所有的tr
 
-             var _tdElIndex = _table.index(_tdEl);  //获取td在tr的索引位置(列)
 
-             var _dis,   //移动的距离
 
-                 _disX;   //移动后的位置
 
-             var _oMouseX = e.pageX;                                   //获取鼠标按下时的X坐标
 
-             var _oX = parseInt(this.style.right);               //获取当前Left坐标
 
-             var expandingMove = function (e) {                      //拖拽时移动用的函数
 
-                 U.UF.EV.stopDefault(e);                               //取消默认拖拽
 
-                 var _mouseX = e.pageX;                                //鼠标移动时的x坐标
 
-                 _dis = _mouseX - _oMouseX;                            //移动的距离
 
-                 _disX = _dis + _oX;                                   //移动后的位置
 
-                 U.selectEl(_this).css("right", -_disX + "px");             //同步当前的left
 
-             };
 
-             var expandingUp = function () {                  //拖拽时松开用的函数
 
-                 _this.style.backgroundColor = "";   //列尺颜色 变为空
 
-                 var _child;
 
-                 for (var i = 0, len = _trList.length; i < len; i++) {
 
-                     var _colTdEl = U.selectEl("td", _trList[i])[_tdElIndex];   //列的td _trList[i].querySelectorAll("td")
 
-                     _colTdEl.style.width = _colTdEl.offsetWidth + _disX + "px";    //同步宽度
 
-                     var _colRule = _colTdEl.querySelectorAll('.U_MD_O_W_Table_colRule');    //该td对应的列尺
 
-                     U.selectEl(_colRule).css("right", "0px"); //同步当前的left
 
-                     _child = U.selectEl("div", _trList[i]);
 
-                     _child[_child.length - 1].style.marginTop = _trList[i].offsetHeight + "px";
 
-                 }
 
-                 U.selectEl(document).unbind('mousemove', expandingMove);
 
-                 U.selectEl(document).unbind('mouseup', expandingUp);
 
-             };
 
-             U.selectEl(document).bind('mousemove', expandingMove);
 
-             U.selectEl(document).bind('mouseup', expandingUp)
 
-         },
 
-         'dblclick': function (e) {
 
-             U.UF.EV.stopBubble(e);                                    //阻止冒泡
 
-         },   //阻止td的双击
 
-         'mousemove': function (e) {
 
-             U.UF.EV.stopBubble(e);                                    //阻止冒泡
 
-             U.UF.EV.stopDefault(e);                                //取消默认拖拽
 
-         }
 
-     });
 
- };
 
- /**
 
- *
 
- * @param rowrule 行尺(div) 添加上下拉伸事件
 
- */
 
- U.UF.E.table.rowExpanding = function (rowrule) {   //高度扩张
 
-     var _div = rowrule;
 
-     U.selectEl(_div).bind({
 
-         'mousedown': function (e) {
 
-             U.selectEl("#U_UF_EL_rightmenu")[0] && U.selectEl("#U_UF_EL_rightmenu")[0].remove();    //删除右键元素
 
-             this.style.backgroundColor = "#8cb3e0";
 
-             U.UF.EV.stopBubble(e);                                     //阻止冒泡
 
-             var _oMouseY = e.pageY;                                    //获取鼠标按下时的Y坐标
 
-             var _this = this;
 
-             var _oY = parseInt(this.style.marginTop);                 //获取当前Top坐标
 
-             var _trEl = this.parentNode;                                //获取tr
 
-             var expandingMove = function (e) {                           //拖拽时移动用的函数
 
-                 U.UF.EV.stopDefault(e);                                //取消默认拖拽
 
-                 var _mouseY = e.pageY;                                 //鼠标移动时的Y坐标
 
-                 var _dis = _mouseY - _oMouseY + _oY;                   //移动的距离
 
-                 _dis = Math.max(30, _dis);                              //拉伸后的tr的高度不能小于30px
 
-                 _trEl.style.height = _dis + "px";
 
-                 var clienHeight = _trEl.clientHeight; //tr的高度 会根据内容有个最小值 因此 这个tr最后的高度 才是最终值
 
-                 _dis = Math.max(clienHeight, _dis);
 
-                 _trEl.style.height = _dis + "px";
 
-                 U.selectEl(_this).css("margin-top", _dis + "px");
 
-             };
 
-             var expandingUp = function () {                  //拖拽时松开用的函数
 
-                 var _table = U.UF.E.table;  //简写命名空间    
 
-                 var _tableEl = _table.parentSelect(_this, "table");  //获取table元素
 
-                 _table.firstLinePeak(_tableEl); //更新第一行的列尺高度
 
-                 _this.style.backgroundColor = "";
 
-                 U.selectEl(document).unbind('mousemove', expandingMove);
 
-                 U.selectEl(document).unbind('mouseup', expandingUp);
 
-             };
 
-             U.selectEl(document).bind('mousemove', expandingMove);
 
-             U.selectEl(document).bind('mouseup', expandingUp)
 
-         },
 
-         'mousemove': function (e) {
 
-             U.UF.EV.stopBubble(e);                                    //阻止冒泡
 
-             U.UF.EV.stopDefault(e);                                //取消默认拖拽
 
-         }
 
-     });
 
- };
 
- /*
 
- * 添加文本框 并给文本框添加事件
 
- * parent td元素(文本框父元素)
 
- * text 为文本 可要可不要
 
- */
 
- U.UF.E.table.createTextArea = function (parent, text) {
 
-     var _textArea = $$("textarea", { className: "U_UF_E_Table_tdText", value: text || "", contenteditable: "true", inline: true }, parent);   //添加textarea 并且将td的内容放入textarea
 
-     U.selectEl(_textArea).bind('mousedown', function (e) {
 
-         U.selectEl("#U_UF_EL_rightmenu")[0] && U.selectEl("#U_UF_EL_rightmenu")[0].remove();    //删除右键元素              //阻止冒泡
 
-     }); //阻止td的冒泡 (选中效果 和 聚焦效果)
 
-     var autoHeight = function (el) {  //表格自动适应高
 
-         el.nodeType === 1 ? "" : el = el.target;    //el只能为textarea
 
-         el.scrollHeight ? el.style.height = el.scrollHeight + "px" : "";   //此处为textarea的高度跟随文字输入的内容自动增高
 
-         var _rowRuleList = U.selectEl(".U_MD_O_W_Table_rowRule");   //获取所有行尺
 
-         for (var i = 0, len = _rowRuleList.length; i < len; i++) {
 
-             var _trPel = _rowRuleList[i].parentNode;    //每个行尺 对应一个 tr元素
 
-             _trPel.style.height = _trPel.clientHeight;  //使每个tr的height 等于 clientHeight
 
-             U.selectEl(_rowRuleList[i]).css("margin-top", _trPel.clientHeight + "px");    //同步margintop 的位置
 
-         }
 
-     };
 
-     autoHeight(_textArea);  //由于textarea输入自后td的高度会变化 因此所有行尺的位置重新定位
 
-     U.selectEl(_textArea).bind('keydown', autoHeight);    //键盘监听 自动适应高
 
-     U.selectEl(_textArea).bind('keyup', autoHeight);  //键盘监听 自动适应高
 
-     U.selectEl(_textArea).bind('blur', function () {
 
-         var _textla = U.selectEl(".U_UF_E_Table_tdText");
 
-         var _tdEl = U.selectEl(".U_UF_E_Table_tdText")[0].parentNode;
 
-         _tdEl.innerText = _textla[0].value;
 
-         _textla.remove();
 
-     });
 
- }
 
- /**
 
- *
 
- * @param td 添加鼠标拖拽效果的 td
 
- * 给td添加鼠标拖拽的选中效果
 
- */
 
- U.UF.E.table.dragCheckd = function (td) {
 
-     var _tdEl = td;
 
-     U.selectEl(_tdEl).bind('mousedown', function (e) {
 
-         U.UF.EV.stopBubble(e); //阻止冒泡
 
-         U.selectEl("#U_UF_EL_rightmenu")[0] && U.selectEl("#U_UF_EL_rightmenu")[0].remove(); //删除右键元素
 
-         if (e.button != 2) {
 
-             var _table = U.UF.E.table;
 
-             //移除原本选中的效果
 
-             U.selectEl(".U_UF_E_Table_tdCheckd").removeClass("U_UF_E_Table_tdCheckd");
 
-             U.selectEl(".U_UF_E_Table_tdCurrent").removeClass("U_UF_E_Table_tdCurrent");
 
-             //给td添加聚焦样式
 
-             U.selectEl(this).addClass("U_UF_E_Table_tdCurrent");
 
-             var _start = this; //获取点击元素
 
-             var _startX = _table.index(_start); //记录x坐标轴
 
-             var _startY = _table.index(this.parentNode);   //获取y坐标轴
 
-             var _checkFlag = true;   //注意下面的_table.over是一个属性 防止选中区域在表格外面
 
-             var _tableEl = _table.parentSelect(this, "table");    //获取父节点table
 
-             //拖拽时移动用的函数
 
-             var _drapMove = function (e) {
 
-                 var tagEl = e.path.filter(_filter)[0];
 
-                 if (tagEl) {
 
-                     U.UF.EV.stopBubble(e); //阻止冒泡
 
-                     if (!(_tableEl.over) || (tagEl === _start && _checkFlag)) return;    //此处防止选中table外元素 与 鼠标必须选中两个td才会有选中效果
 
-                     _checkFlag = false;  //如果不同 则选中过两个元素
 
-                     var _endX = _table.index(tagEl);   //结束点的x坐标
 
-                     var _endY = _table.index(tagEl.parentNode); //结束点的y坐标
 
-                     U.selectEl(".U_UF_E_Table_tdCheckd").removeClass("U_UF_E_Table_tdCheckd");
 
-                     _table.tdAddClass(tagEl.parentNode, _startX, _startY, _endX, _endY);   //给开始点和结束点组成的矩形 添加选中的class
 
-                 }
 
-             };
 
-             var _dragUp = function () { //拖拽时松开用的函数
 
-                 U.selectEl(document).unbind('mousemove', _drapMove);
 
-                 U.selectEl(document).unbind('mouseup', _dragUp);
 
-                 _checkFlag = true;
 
-             };
 
-             var _filter = function (el) {
 
-                 return el.nodeName && el.nodeName === "TD"
 
-             }
 
-             U.selectEl(document).bind('mousemove', _drapMove);
 
-             U.selectEl(document).bind('mouseup', _dragUp);
 
-         }
 
-     });
 
- };
 
- /**
 
- *  添加右键
 
- *  tableEl 表格元素
 
- */
 
- U.UF.E.table.rightClick = function (tableEl) {
 
-     var _table = U.UF.E.table;
 
-     var leftAddCol = {
 
-         innerHTML: '左侧添加列',
 
-         onclick: function () {
 
-             _table.addColumn("left");
 
-             U.selectEl("#U_UF_EL_rightmenu")[0] && U.selectEl("#U_UF_EL_rightmenu")[0].remove();    //删除右键元素
 
-         },
 
-         onmousedown: function (e) {
 
-             U.UF.EV.stopBubble(e);                                    //阻止冒泡
 
-         }
 
-     };
 
-     var rightAddCol = {
 
-         innerHTML: '右侧添加列',
 
-         onclick: function () {
 
-             _table.addColumn("right");
 
-             U.selectEl("#U_UF_EL_rightmenu")[0] && U.selectEl("#U_UF_EL_rightmenu")[0].remove();    //删除右键元素
 
-         },
 
-         onmousedown: function (e) {
 
-             U.UF.EV.stopBubble(e);                                    //阻止冒泡
 
-         }
 
-     };
 
-     var upAddLine = {
 
-         innerHTML: '向上添加行',
 
-         onclick: function () {
 
-             _table.addTr("up");
 
-             U.selectEl("#U_UF_EL_rightmenu")[0] && U.selectEl("#U_UF_EL_rightmenu")[0].remove();    //删除右键元素
 
-         },
 
-         onmousedown: function (e) {
 
-             U.UF.EV.stopBubble(e);                                    //阻止冒泡
 
-         }
 
-     };
 
-     var downAddLine = {
 
-         innerHTML: '向下添加行',
 
-         onclick: function () {
 
-             _table.addTr("down");
 
-             U.selectEl("#U_UF_EL_rightmenu")[0] && U.selectEl("#U_UF_EL_rightmenu")[0].remove();    //删除右键元素
 
-         },
 
-         onmousedown: function (e) {
 
-             U.UF.EV.stopBubble(e);                                    //阻止冒泡
 
-         }
 
-     };
 
-     var removeCol = {
 
-         innerHTML: '删除列',
 
-         onclick: function () {
 
-             _table.removeColumn();
 
-             U.selectEl("#U_UF_EL_rightmenu")[0] && U.selectEl("#U_UF_EL_rightmenu")[0].remove();    //删除右键元素
 
-         },
 
-         onmousedown: function (e) {
 
-             U.UF.EV.stopBubble(e);                                    //阻止冒泡
 
-         }
 
-     };
 
-     var removeLine = {
 
-         innerHTML: '删除行',
 
-         onclick: function () {
 
-             _table.removeTr();
 
-             U.selectEl("#U_UF_EL_rightmenu")[0] && U.selectEl("#U_UF_EL_rightmenu")[0].remove();    //删除右键元素
 
-         },
 
-         onmousedown: function (e) {
 
-             U.UF.EV.stopBubble(e);                                    //阻止冒泡
 
-         }
 
-     };
 
-     var mergeCells = {
 
-         innerHTML: '合并单元格',
 
-         onclick: function () {
 
-             _table.mergeCells();
 
-             U.selectEl("#U_UF_EL_rightmenu")[0] && U.selectEl("#U_UF_EL_rightmenu")[0].remove();    //删除右键元素
 
-         },
 
-         onmousedown: function (e) {
 
-             U.UF.EV.stopBubble(e);                                    //阻止冒泡
 
-         }
 
-     };
 
-     var _arr = [leftAddCol, rightAddCol, upAddLine, downAddLine, removeCol, removeLine, mergeCells];
 
-     U.selectEl(tableEl).bind('contextmenu', function (e) {
 
-         U.UF.EV.stopBubble(e);                                    //阻止冒泡
 
-         U.UF.EV.stopDefault();
 
-         U.UF.EL.rightMenu(_arr, tableEl);
 
-         U.selectEl("#U_UF_EL_rightmenu").bind('contextmenu', function (e) {   //右键元素属于table 因此需要阻止冒泡
 
-             U.UF.EV.stopBubble(e);                                    //阻止冒泡
 
-         });
 
-     });
 
-     U.selectEl(tableEl).bind('mousedown', function (e) {
 
-         U.selectEl("#U_UF_EL_rightmenu")[0] && U.selectEl("#U_UF_EL_rightmenu")[0].remove();    //删除右键元素
 
-     });
 
- };
 
- /**
 
- *
 
- * @param direction 参数为 "left" 或 "right"
 
- * 左右侧添加列
 
- */
 
- U.UF.E.table.addColumn = function (direction) {
 
-     var _table = U.UF.E.table;
 
-     var tdList = U.selectEl(".U_UF_E_Table_tdCheckd");
 
-     if (!tdList[0]) { //如果没有 选中的td
 
-         if ($(".U_UF_E_Table_tdCurrent")[0]) { //再判断 有无聚焦的 td
 
-             tdList = U.selectEl(".U_UF_E_Table_tdCurrent");
 
-         } else {
 
-             return; //如果没有 则直接返回
 
-         }
 
-     }
 
-     var _tdEl;
 
-     if (direction === "left") {
 
-         _tdEl = tdList[0];
 
-     } else if (direction === "right") {
 
-         _tdEl = tdList[tdList.length - 1];
 
-     }
 
-     _table.insertTd(_tdEl, direction);
 
- };
 
- /**
 
- *
 
- * @param td  td元素
 
- * @param direction  供添加左右列用的api 参数为 "left" 或 "right"
 
- * 向每个tr的列(td) 前方或后方插入td
 
- */
 
- U.UF.E.table.insertTd = function (td, direction) {
 
-     var _table = U.UF.E.table;
 
-     var _tdEl = td,
 
-             _index = _table.index(_tdEl),    //在tr中位于所有td的位置
 
-             _dir = direction;
 
-     var _tableEl = _table.parentSelect(_tdEl, 'table');
 
-     var _trList = U.selectEl(_tableEl).find("tr");
 
-     var _tableElWidth = _tableEl.offsetWidth; //记住当前的宽度
 
-     for (var i = 0, len = _trList.length; i < len; i++) {  //遍历每个tr的列(td) 在前方或后方插入td
 
-         var _currentColumn = U.selectEl(_trList[i]).find("td")[_index];    //当前列
 
-         var _tdElClone = _tdEl.cloneNode(); //克隆td
 
-         if (_dir === "left") {
 
-             _table.Before(_currentColumn, _tdElClone);    //在列的前面添加td
 
-         }
 
-         else if (_dir === "right") {
 
-             _table.After(_currentColumn, _tdElClone); //在列的后面添加td
 
-         }
 
-         var _colRule = $$("div", { style: { position: "absolute", top: 0, left: "-7px", "margin-left": _tdElClone.style.width, cursor: "col-resize", width: "7px" }, className: "U_MD_O_W_Table_colRule", inline: true }, _tdElClone); //列尺
 
-         _table.colExpanding(_colRule); //添加左右拉伸事件
 
-         _table.createTextArea(_tdElClone); //添加文本框
 
-         _table.dragCheckd(_tdElClone);    //td拖拽的选中事件
 
-         U.selectEl(_tdElClone).removeClass("U_UF_E_Table_tdCheckd"); //清楚添加后的列的选中的样式
 
-         U.selectEl(_tdElClone).removeClass("U_UF_E_Table_tdCurrent");
 
-     }
 
-     _tableEl.style.width = _tableElWidth + _tdEl.offsetWidth + "px";
 
-     _table.firstLinePeak(_tableEl);    //第一行tr的所有列尺添加zIndex为1
 
- };
 
- /**
 
- *
 
- * @param direction 参数为 "up" 或 "down"
 
- * 上下添加行
 
- */
 
- U.UF.E.table.addTr = function (direction) {
 
-     var _table = U.UF.E.table;
 
-     var tdList = U.selectEl(".U_UF_E_Table_tdCheckd");
 
-     if (!tdList[0]) { //如果没有 选中的td
 
-         if ($(".U_UF_E_Table_tdCurrent")[0]) { //再判断 有无聚焦的 td
 
-             tdList = U.selectEl(".U_UF_E_Table_tdCurrent");
 
-         } else {
 
-             return; //如果没有 则直接返回
 
-         }
 
-     }
 
-     var _trEl, _trElClone;
 
-     if (direction === "up") {
 
-         _trEl = tdList[0].parentNode;
 
-         _trElClone = _table.cloneTr(_trEl); //克隆tr 并给td 添加表格事件
 
-         _table.Before(_trEl, _trElClone);
 
-     } else if (direction === "down") {
 
-         _trEl = tdList[tdList.length - 1].parentNode;    //向下插入行
 
-         _trElClone = _table.cloneTr(_trEl); //克隆tr 并给td 添加表格事件
 
-         _table.After(_trEl, _trElClone);
 
-     }
 
-     var _tableEl = _table.parentSelect(tdList[0], 'table');
 
-     _table.firstLinePeak(_tableEl);    //将表格的第一个tr里的所有列尺元素 添加 zindex为1 的样式
 
- };
 
- /**
 
- *  删除行
 
- */
 
- U.UF.E.table.removeTr = function () {
 
-     var _table = U.UF.E.table;
 
-     var tdList = U.selectEl(".U_UF_E_Table_tdCheckd");
 
-     if (!tdList[0]) { //如果没有 选中的td
 
-         if ($(".U_UF_E_Table_tdCurrent")[0]) { //再判断 有无聚焦的 td
 
-             tdList = U.selectEl(".U_UF_E_Table_tdCurrent");
 
-         } else {
 
-             return; //如果没有 则直接返回
 
-         }
 
-     }
 
-     var start = _table.index(tdList[0].parentNode);
 
-     var end = _table.index(tdList[tdList.length - 1].parentNode);
 
-     var _tableEl = _table.parentSelect(tdList[0], "table");
 
-     var _parentDiv = _table.parentSelect(_tableEl, "div");
 
-     var _trList = U.selectEl(_tableEl).find("tr");
 
-     for (var i = start; i <= end; i++) {
 
-         _trList[i].remove();
 
-     }
 
-     if (!(_tableEl.querySelectorAll("tr").length)) {
 
-         _parentDiv.remove();
 
-         return
 
-     }
 
-     _table.firstLinePeak(_tableEl);    //将表格的第一个tr里的所有列尺元素 添加 zindex为1 的样式
 
- };
 
- /**
 
- *
 
- * @param tr 需要克隆的tr
 
- * 克隆tr 并添加表格事件
 
- */
 
- U.UF.E.table.cloneTr = function (tr) {
 
-     var _table = U.UF.E.table;
 
-     var _trNodes = tr.cloneNode(true); //带子节点的tr
 
-     var _trClone = tr.cloneNode();  //无子节点的tr
 
-     var _cloneTd = U.selectEl(_trNodes).find("td");
 
-     for (var i = 0, len = _cloneTd.length; i < len; i++) {
 
-         var _td = _cloneTd[i].cloneNode();
 
-         U.selectEl(_td).rmAttr("rowspan");   //删除跨行的属性
 
-         _trClone.appendChild(_td);
 
-         var _colRule = $$("div", { style: { position: "absolute", top: 0, left: "-7px", "margin-left": _td.style.width, cursor: "col-resize", width: "7px" }, className: "U_MD_O_W_Table_colRule", inline: true }, _td); //列尺
 
-         _table.colExpanding(_colRule); //添加左右拉伸事件
 
-         //_table.tdDbClick(_td); //添加双击事件
 
-         _table.createTextArea(_td);
 
-         _table.dragCheckd(_td);    //td拖拽的选中事件
 
-     }
 
-     var _rowRule = $$("div", { style: { position: "absolute", zIndex: "1", left: 0, "margin-top": "30px", cursor: "row-resize", height: "3px", width: "100%" }, className: "U_MD_O_W_Table_rowRule", inline: true }, _trClone); //行尺
 
-     _table.rowExpanding(_rowRule);  //上下拉伸事件
 
-     U.selectEl(_trClone).find(".U_UF_E_Table_tdCheckd").removeClass("U_UF_E_Table_tdCheckd");    //删除所有选中表格和 聚焦表格的样式
 
-     U.selectEl(_trClone).find(".U_UF_E_Table_tdCurrent").removeClass("U_UF_E_Table_tdCurrent");
 
-     return _trClone;
 
- };
 
- /**
 
- *  合并单元格功能
 
- */
 
- U.UF.E.table.mergeCells = function () {
 
-     var _table = U.UF.E.table;
 
-     var _tdList = U.selectEl(".U_UF_E_Table_tdCheckd");
 
-     if (_tdList.length <= 1) return;
 
-     var _x1 = _table.index(_tdList[0]);  //x坐标开始点
 
-     var _y1 = _table.index(_tdList[0].parentNode); //y坐标开始点
 
-     var _x2 = _table.index(_tdList[_tdList.length - 1]); //x坐标结束点
 
-     var _y2 = _table.index(_tdList[_tdList.length - 1].parentNode);  //y坐标结束点
 
-     var _tableEl = _table.parentSelect(_tdList[0], "table");    //获取table元素
 
-     var _trList = _tableEl.querySelectorAll("tr");  //获取table里所有tr
 
-     var _text = "";     //合并后的总内容
 
-     var allWidth = 0;   //合并后的总宽度
 
-     for (var i = _y1; i <= _y2; i++) {  /*该循环*/
 
-         var _trAllTd = _trList[i].querySelectorAll("td"); //获取选中表格的所在tr
 
-         for (var j = _x1; j <= _x2; j++) { // 获取选中表格的 所在td
 
-             var _tdEl = _trAllTd[j];    //获取每个选中的单元格
 
-             _text += _tdEl.innerText;   //合并内容
 
-             if (i === _y1) { //只计算选中表格第一行 的总宽度
 
-                 allWidth += _tdEl.offsetWidth;
 
-             }
 
-             if (i === _y1 && j === _x1) continue;    //第一个td就跳过 其他的则display为 none
 
-             U.selectEl(_tdEl).css("display", "none");
 
-         }
 
-     }
 
-     var _textNode = document.createTextNode(_text); //文字节点 _text为总内容
 
-     var _firstNode = _table.getFirstText(_tdList[0]);   //获取被合并单元格的td所在的文字节点
 
-     _firstNode ? _firstNode.remove() : ""; //如果存在文字节点 则删除
 
-     _tdList[0].appendChild(_textNode); //然后将新创建的总文字节点 添加到该单元格里
 
-     _tdList[0].style.width = allWidth + "px"; //添加总宽度
 
-     var _col = U.selectEl(_tdList[0]).attr("colspan");
 
-     _col <= _x2 - _x1 + 1 ? U.selectEl(_tdList[0]).attr("colspan", _x2 - _x1 + 1) : ""; //跨的列数
 
-     U.selectEl(_tdList[0]).attr("rowspan", _y2 - _y1 + 1); //跨的行数
 
-     U.selectEl(_tdList[0].querySelector(".U_MD_O_W_Table_colRule")).css("margin-left", allWidth + 'px');   //更新 列尺的位置
 
-     _table.firstLinePeak(_tableEl);    //将表格的第一个tr里的所有列尺元素 添加 zindex为1 的样式
 
- };
 
- /**
 
- * 删除列
 
- */
 
- U.UF.E.table.removeColumn = function () {
 
-     var _table = U.UF.E.table
 
-     var tdList = U.selectEl(".U_UF_E_Table_tdCheckd");
 
-     if (!tdList[0]) { //如果没有 选中的td
 
-         if ($(".U_UF_E_Table_tdCurrent")[0]) { //再判断 有无聚焦的 td
 
-             tdList = U.selectEl(".U_UF_E_Table_tdCurrent");
 
-         } else {
 
-             return; //如果没有 则直接返回
 
-         }
 
-     }
 
-     var _start = _table.index(tdList[0]);  //列的开始位置
 
-     var _end = _table.index(tdList[tdList.length - 1]); //列的结束位置
 
-     var _tableEl = _table.parentSelect(tdList[0], 'table');
 
-     var _trList = U.selectEl(_tableEl).find("tr");
 
-     var _widthSum = 0;  //删除列的总宽
 
-     for (var i = 0, len = _trList.length; i < len; i++) {
 
-         var _tdList = U.selectEl(_trList[i]).find("td");
 
-         for (var j = _start; j <= _end; j++) {
 
-             i === 0 ? _widthSum += _tdList[j].offsetWidth : "";    //只计算第一行删除的列宽
 
-             _tdList[j].remove();
 
-         }
 
-     }
 
-     _tableEl.style.width = _tableEl.offsetWidth - _widthSum + "px";
 
-     var _tdLen = _tableEl.querySelectorAll("td").length;  //获取当前列的长度
 
-     if (!_tdLen) {    //如果table不存在td 则删除table和 table父节点(div)
 
-         var _parentDiv = _table.parentSelect(_tableEl, "div");
 
-         _parentDiv.remove();
 
-         return
 
-     }
 
-     _table.firstLinePeak(_tableEl);    //将表格的第一个tr里的所有列尺元素 添加 zindex为1 的样式
 
- };
 
- /**
 
- * 添加点击时的聚焦效果 并且若存在textarea元素 则删除并获取textarea的值给td
 
- */
 
- U.UF.E.table.removeFocus = function () {        //添加点击时的聚焦效果 并且若存在textarea元素 则删除并获取textarea的值给td
 
-     U.selectEl(".U_UF_E_Table_tdCheckd").removeClass("U_UF_E_Table_tdCheckd");
 
-     U.selectEl(".U_UF_E_Table_tdCurrent").removeClass("U_UF_E_Table_tdCurrent");
 
-     return;
 
-     var _textArea = U.selectEl(".U_UF_E_Table_tdText")[0],        //如果存在textarea元素 则将其变为文本
 
-             _pel;
 
-     _textArea ? _pel = _textArea.parentNode : ""; //如果textArea存在 先获取父节点td 然后将其变为文本
 
-     if (_pel) {
 
-         var _textNode = document.createTextNode(_textArea.value);
 
-         _pel.appendChild(_textNode);
 
-         _textArea.remove();
 
-     }
 
-     var _rowRuleList = U.selectEl(".U_MD_O_W_Table_rowRule"); //使div的margintop 及时更新
 
-     for (var i = 0, len = _rowRuleList.length; i < len; i++) {
 
-         var _trEl = _rowRuleList[i].parentNode;
 
-         _trEl.style.height = _trEl.clientHeight;
 
-         U.selectEl(_rowRuleList[i]).css("margin-top", _trEl.clientHeight + "px");
 
-     }
 
- };
 
- /**
 
- *
 
- * @param tr 获取所有tr用的(遍历所有tr)
 
- * @param x1 开始点x坐标
 
- * @param y1 开始点y坐标
 
- * @param x2 结束点x坐标
 
- * @param y2 结束点y坐标
 
- */
 
- U.UF.E.table.tdAddClass = function (tr, x1, y1, x2, y2) {   //获取首尾坐标轴 最后组成矩形 然后添加选中的class
 
-     var _trList = tr.parentNode.querySelectorAll("tr");
 
-     var _x1 = Math.min(x1, x2);
 
-     var _x2 = Math.max(x1, x2);
 
-     var _y1 = Math.min(y1, y2);
 
-     var _y2 = Math.max(y1, y2);
 
-     for (var i = _y1; i <= _y2; i++) {
 
-         var _tdList = _trList[i].querySelectorAll("td");
 
-         for (var j = _x1; j <= _x2; j++) {
 
-             U.selectEl(_tdList[j]).addClass("U_UF_E_Table_tdCheckd");
 
-         }
 
-     }
 
- }
 
- /**
 
- *
 
- * @param el 元素
 
- * @returns {number} 返回当前元素在所有同类型元素 的第几个位置
 
- */
 
- U.UF.E.table.index = function (el) {
 
-     var _el = el;
 
-     var _name = _el.nodeName;   //获取该元素的节点名
 
-     var _list = _el.parentNode.querySelectorAll(_name); //获取父节下的所有自己的节点
 
-     for (var i = 0, len = _list.length; i < len; i++) {
 
-         if (_list[i] === _el) {
 
-             return i;   //返回在数组的索引
 
-         }
 
-     }
 
- };
 
- /**
 
- * 获取td的第一个文本元素
 
- */
 
- U.UF.E.table.getFirstText = function (td) {
 
-     var _child = td.childNodes;
 
-     for (var i = 0, len = _child.length; i < len; i++) {
 
-         if (_child[i].nodeType === 3) {
 
-             return _child[i];
 
-         }
 
-     }
 
-     return false;
 
- }
 
- /*获取指定标签的父节点*/
 
- U.UF.E.table.parentSelect = function (el, type) {
 
-     var _this = el;
 
-     var type = type.toUpperCase();
 
-     if (_this.tagName === type) return _this;
 
-     var parent = _this.parentNode;
 
-     while (parent.tagName !== type) {
 
-         parent = parent.parentNode;
 
-     }
 
-     return parent;
 
- };
 
- /*在元素前面插入新元素*/
 
- U.UF.E.table.Before = function (el, newEl) {
 
-     var _this = el;
 
-     var parentEl = _this.parentNode;
 
-     parentEl.insertBefore(newEl, _this);
 
- };
 
- /*在元素后面插入新元素*/
 
- U.UF.E.table.After = function (el, newEl) {
 
-     var _this = el;
 
-     if (_this && _this.parentNode) {
 
-         var parentEl = _this.parentNode;
 
-         var child = parentEl.childNodes;
 
-         var last = child[child.length - 1] || parentEl.lastChild;
 
-         if (last === _this) {
 
-             parentEl.appendChild(newEl);
 
-         } else {
 
-             parentEl.insertBefore(newEl, _this.nextSibling);
 
-         }
 
-         return newEl;
 
-     }
 
- };
 
- /**
 
- *  使光标聚焦在该元素后面
 
- * @param el 需要文字聚焦的 元素节点
 
- */
 
- U.UF.E.table.placeCaretAtEnd = function (el) {    //传入光标要去的节点对象
 
-     if (el.collapse) {   //如果存在el.collapsed 则是range
 
-         var range = el;
 
-         range.collapse(false);
 
-         var sel = window.getSelection();
 
-         sel.removeAllRanges();
 
-         sel.addRange(range);
 
-         return;
 
-     }
 
-     if (typeof window.getSelection != "undefined" && typeof document.createRange != "undefined") {
 
-         el.focus && el.focus();
 
-         var range = document.createRange();
 
-         range.selectNodeContents(el);
 
-         range.collapse(false);
 
-         var sel = window.getSelection();
 
-         sel.removeAllRanges();
 
-         sel.addRange(range);
 
-     } else if (typeof document.body.createTextRange != "undefined") {
 
-         var textRange = document.body.createTextRange();
 
-         textRange.moveToElementText(el);
 
-         textRange.collapse(false);
 
-         textRange.select();
 
-     }
 
- };
 
- /*
 
- 合并单元格使用bug:
 
- 1.选中表格时 如出现行和列对不齐时 除了删除列不会有问题以外 其他都会出问题	
 
- 解决思路:由于合并单元格后 每行的td都对不齐了 因此需要修改选中td的接口 不准出现参差不齐的情况
 
- 2.在合并单元格的那一列用添加列 删除列会有bug   
 
- 解决思路: 由于合并单元格时 有占用两列或两行的情况 因此需要在添加列删除列那里将占用两列以上的情况考虑进去 针对colspan属性做判断
 
- 3.在合并单元格的那一行除了 向上添加行功能 其他都会有bug
 
- 解决思路:由于跨行合并单元格 会使第第一行变成占2行或以上 其他行display为none 因此如果向下添加行则需要将display为none 消掉 主要也是需要针对rowspan属性做判断
 
- */
 
 
  |