table.js
上传用户:huijianzhu
上传日期:2009-11-25
资源大小:9825k
文件大小:9k
源码类别:

电子政务应用

开发平台:

Java

  1. // 表格相关全局变量
  2. var selectedTD
  3. var selectedTR
  4. var selectedTBODY
  5. var selectedTable
  6. // 插入表格
  7. function TableInsert(){
  8. if (!isTableSelected()){
  9. ShowDialog('dialog/table.htm', 350, 380, true);
  10. }
  11. }
  12. // 修改表格属性
  13. function TableProp(){
  14. if (isTableSelected()||isCursorInTableCell()){
  15. ShowDialog('dialog/table.htm?action=modify', 350, 380, true);
  16. }
  17. }
  18. // 修改单元格属性
  19. function TableCellProp(){
  20. if (isCursorInTableCell()){
  21. ShowDialog('dialog/tablecell.htm', 350, 280, true);
  22. }
  23. }
  24. // 拆分单元格
  25. function TableCellSplit(){
  26. if (isCursorInTableCell()){
  27. ShowDialog('dialog/tablecellsplit.htm', 200, 150, true);
  28. }
  29. }
  30. // 修改表格行属性
  31. function TableRowProp(){
  32. if (isCursorInTableCell()){
  33. ShowDialog('dialog/tablecell.htm?action=row', 350, 280, true);
  34. }
  35. }
  36. // 插入行(在上方)
  37. function TableRowInsertAbove() {
  38. if (isCursorInTableCell()){
  39. var numCols = 0
  40. allCells = selectedTR.cells
  41. for (var i=0;i<allCells.length;i++) {
  42.   numCols = numCols + allCells[i].getAttribute('colSpan')
  43. }
  44. var newTR = selectedTable.insertRow(selectedTR.rowIndex)
  45. for (i = 0; i < numCols; i++) {
  46.   newTD = newTR.insertCell()
  47. newTD.innerHTML = "&nbsp;"
  48. if (borderShown == "yes") {
  49. newTD.runtimeStyle.border = "1px dotted #BFBFBF"
  50. }
  51. }
  52. }
  53. }
  54. // 插入行(在下方)
  55. function TableRowInsertBelow() {
  56. if (isCursorInTableCell()){
  57. var numCols = 0
  58. allCells = selectedTR.cells
  59. for (var i=0;i<allCells.length;i++) {
  60.   numCols = numCols + allCells[i].getAttribute('colSpan')
  61. }
  62. var newTR = selectedTable.insertRow(selectedTR.rowIndex+1)
  63. for (i = 0; i < numCols; i++) {
  64.   newTD = newTR.insertCell()
  65. newTD.innerHTML = "&nbsp;"
  66. if (borderShown == "yes") {
  67. newTD.runtimeStyle.border = "1px dotted #BFBFBF"
  68. }
  69. }
  70. }
  71. }
  72. // 合并行(向下方)
  73. function TableRowMerge() {
  74. if (isCursorInTableCell()) {
  75. var rowSpanTD = selectedTD.getAttribute('rowSpan')
  76. allRows = selectedTable.rows
  77. if (selectedTR.rowIndex +1 != allRows.length) {
  78. var allCellsInNextRow = allRows[selectedTR.rowIndex+selectedTD.rowSpan].cells
  79. var addRowSpan = allCellsInNextRow[selectedTD.cellIndex].getAttribute('rowSpan')
  80. var moveTo = selectedTD.rowSpan
  81. if (!addRowSpan) addRowSpan = 1;
  82. selectedTD.rowSpan = selectedTD.rowSpan + addRowSpan
  83. allRows[selectedTR.rowIndex + moveTo].deleteCell(selectedTD.cellIndex)
  84. }
  85. }
  86. }
  87. // 拆分行
  88. function TableRowSplit(nRows){
  89. if (!isCursorInTableCell()) return;
  90. if (nRows<2) return;
  91. var addRows = nRows - 1;
  92. var addRowsNoSpan = addRows;
  93. var nsLeftColSpan = 0;
  94. for (var i=0; i<selectedTD.cellIndex; i++){
  95. nsLeftColSpan += selectedTR.cells[i].colSpan;
  96. }
  97. var allRows = selectedTable.rows;
  98. // rowspan>1时
  99. while (selectedTD.rowSpan > 1 && addRowsNoSpan > 0){
  100. var nextRow = allRows[selectedTR.rowIndex+selectedTD.rowSpan-1];
  101. selectedTD.rowSpan -= 1;
  102. var ncLeftColSpan = 0;
  103. var position = -1;
  104. for (var n=0; n<nextRow.cells.length; n++){
  105. ncLeftColSpan += nextRow.cells[n].getAttribute('colSpan');
  106. if (ncLeftColSpan>nsLeftColSpan){
  107. position = n;
  108. break;
  109. }
  110. }
  111. var newTD=nextRow.insertCell(position);
  112. newTD.innerHTML = "&nbsp;";
  113. if (borderShown == "yes") {
  114. newTD.runtimeStyle.border = "1px dotted #BFBFBF";
  115. }
  116. addRowsNoSpan -= 1;
  117. }
  118. // rowspan=1时
  119. for (var n=0; n<addRowsNoSpan; n++){
  120. var numCols = 0
  121. allCells = selectedTR.cells
  122. for (var i=0;i<allCells.length;i++) {
  123. numCols = numCols + allCells[i].getAttribute('colSpan')
  124. }
  125. var newTR = selectedTable.insertRow(selectedTR.rowIndex+1)
  126. // 上方行的rowspan达到这行
  127. for (var j=0; j<selectedTR.rowIndex; j++){
  128. for (var k=0; k<allRows[j].cells.length; k++){
  129. if ((allRows[j].cells[k].rowSpan>1)&&(allRows[j].cells[k].rowSpan>=selectedTR.rowIndex-allRows[j].rowIndex+1)){
  130. allRows[j].cells[k].rowSpan += 1;
  131. }
  132. }
  133. }
  134. // 当前行
  135. for (i = 0; i < allCells.length; i++) {
  136. if (i!=selectedTD.cellIndex){
  137. selectedTR.cells[i].rowSpan += 1;
  138. }else{
  139. newTD = newTR.insertCell();
  140. newTD.colSpan = selectedTD.colSpan;
  141. newTD.innerHTML = "&nbsp;";
  142. if (borderShown == "yes") {
  143. newTD.runtimeStyle.border = "1px dotted #BFBFBF";
  144. }
  145. }
  146. }
  147. }
  148. }
  149. // 删除行
  150. function TableRowDelete() {
  151. if (isCursorInTableCell()) {
  152. selectedTable.deleteRow(selectedTR.rowIndex)
  153. }
  154. }
  155. // 插入列(在左侧)
  156. function TableColInsertLeft() {
  157.     if (isCursorInTableCell()) {
  158. moveFromEnd = (selectedTR.cells.length-1) - (selectedTD.cellIndex)
  159. allRows = selectedTable.rows
  160. for (i=0;i<allRows.length;i++) {
  161. rowCount = allRows[i].cells.length - 1
  162. position = rowCount - moveFromEnd
  163. if (position < 0) {
  164. position = 0
  165. }
  166. newCell = allRows[i].insertCell(position)
  167. newCell.innerHTML = "&nbsp;"
  168. if (borderShown == "yes") {
  169. newCell.runtimeStyle.border = "1px dotted #BFBFBF"
  170. }
  171. }
  172.     }
  173. }
  174. // 插入列(在右侧)
  175. function TableColInsertRight() {
  176.     if (isCursorInTableCell()) {
  177. moveFromEnd = (selectedTR.cells.length-1) - (selectedTD.cellIndex)
  178. allRows = selectedTable.rows
  179. for (i=0;i<allRows.length;i++) {
  180. rowCount = allRows[i].cells.length - 1
  181. position = rowCount - moveFromEnd
  182. if (position < 0) {
  183. position = 0
  184. }
  185. newCell = allRows[i].insertCell(position+1)
  186. newCell.innerHTML = "&nbsp;"
  187. if (borderShown == "yes") {
  188. newCell.runtimeStyle.border = "1px dotted #BFBFBF"
  189. }
  190. }
  191.     }
  192. }
  193. // 合并列
  194. function TableColMerge() {
  195. if (isCursorInTableCell()) {
  196. var colSpanTD = selectedTD.getAttribute('colSpan')
  197. allCells = selectedTR.cells
  198. if (selectedTD.cellIndex + 1 != selectedTR.cells.length) {
  199. var addColspan = allCells[selectedTD.cellIndex+1].getAttribute('colSpan')
  200. selectedTD.colSpan = colSpanTD + addColspan
  201. selectedTR.deleteCell(selectedTD.cellIndex+1)
  202. }
  203. }
  204. }
  205. // 删除列
  206. function TableColDelete() {
  207.     if (isCursorInTableCell()) {
  208. moveFromEnd = (selectedTR.cells.length-1) - (selectedTD.cellIndex)
  209. allRows = selectedTable.rows
  210. for (var i=0;i<allRows.length;i++) {
  211. endOfRow = allRows[i].cells.length - 1
  212. position = endOfRow - moveFromEnd
  213. if (position < 0) {
  214. position = 0
  215. }
  216. allCellsInRow = allRows[i].cells
  217. if (allCellsInRow[position].colSpan > 1) {
  218. allCellsInRow[position].colSpan = allCellsInRow[position].colSpan - 1
  219. } else { 
  220. allRows[i].deleteCell(position)
  221. }
  222. }
  223. }
  224. }
  225. // 拆分列
  226. function TableColSplit(nCols){
  227. if (!isCursorInTableCell()) return;
  228. if (nCols<2) return;
  229. var addCols = nCols - 1;
  230. var addColsNoSpan = addCols;
  231. var newCell;
  232. var nsLeftColSpan = 0;
  233. var nsLeftRowSpanMoreOne = 0;
  234. for (var i=0; i<selectedTD.cellIndex; i++){
  235. nsLeftColSpan += selectedTR.cells[i].colSpan;
  236. if (selectedTR.cells[i].rowSpan > 1){
  237. nsLeftRowSpanMoreOne += 1;
  238. }
  239. }
  240. var allRows = selectedTable.rows
  241. // colSpan>1时
  242. while (selectedTD.colSpan > 1 && addColsNoSpan > 0) {
  243. newCell = selectedTR.insertCell(selectedTD.cellIndex+1);
  244. newCell.innerHTML = "&nbsp;"
  245. if (borderShown == "yes") {
  246. newCell.runtimeStyle.border = "1px dotted #BFBFBF"
  247. }
  248. selectedTD.colSpan -= 1;
  249. addColsNoSpan -= 1;
  250. }
  251. // colSpan=1时
  252. for (i=0;i<allRows.length;i++) {
  253. var ncLeftColSpan = 0;
  254. var position = -1;
  255. for (var n=0; n<allRows[i].cells.length; n++){
  256. ncLeftColSpan += allRows[i].cells[n].getAttribute('colSpan');
  257. if (ncLeftColSpan+nsLeftRowSpanMoreOne>nsLeftColSpan){
  258. position = n;
  259. break;
  260. }
  261. }
  262. if (selectedTR.rowIndex!=i){
  263. if (position!=-1){
  264. allRows[i].cells[position+nsLeftRowSpanMoreOne].colSpan += addColsNoSpan;
  265. }
  266. }else{
  267. for (var n=0; n<addColsNoSpan; n++){
  268. newCell = allRows[i].insertCell(selectedTD.cellIndex+1)
  269. newCell.innerHTML = "&nbsp;"
  270. newCell.rowSpan = selectedTD.rowSpan;
  271. if (borderShown == "yes") {
  272. newCell.runtimeStyle.border = "1px dotted #BFBFBF"
  273. }
  274. }
  275. }
  276. }
  277. }
  278. // 是否选中表格
  279. function isTableSelected() {
  280. if (eWebEditor.document.selection.type == "Control") {
  281. var oControlRange = eWebEditor.document.selection.createRange();
  282. if (oControlRange(0).tagName.toUpperCase() == "TABLE") {
  283. selectedTable = eWebEditor.document.selection.createRange()(0);
  284. return true;
  285. }
  286. }
  287. // 光标是否在表格中
  288. function isCursorInTableCell() {
  289. if (eWebEditor.document.selection.type != "Control") {
  290. var elem = eWebEditor.document.selection.createRange().parentElement()
  291. while (elem.tagName.toUpperCase() != "TD" && elem.tagName.toUpperCase() != "TH"){
  292. elem = elem.parentElement
  293. if (elem == null)
  294.                 break
  295. }
  296. if (elem) {
  297. selectedTD = elem
  298. selectedTR = selectedTD.parentElement
  299. selectedTBODY =  selectedTR.parentElement
  300. selectedTable = selectedTBODY.parentElement
  301. return true
  302. }
  303. }
  304. }