hebing.js 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. /**
  2. * author ____′↘夏悸
  3. * create date 2012-11-5
  4. *
  5. **/
  6. $.extend($.fn.datagrid.methods, {
  7. autoMergeCells : function (jq, fields) {
  8. return jq.each(function () {
  9. var target = $(this);
  10. if (!fields) {
  11. fields = target.datagrid("getColumnFields");
  12. }
  13. var rows = target.datagrid("getRows");
  14. var i = 0,
  15. j = 0,
  16. temp = {};
  17. for (i; i < rows.length; i++) {
  18. var row = rows[i];
  19. j = 0;
  20. for (j; j < fields.length; j++) {
  21. var field = fields[j];
  22. var tf = temp[field];
  23. if (!tf) {
  24. tf = temp[field] = {};
  25. tf[row[field]] = [i];
  26. } else {
  27. var tfv = tf[row[field]];
  28. if (tfv) {
  29. tfv.push(i);
  30. } else {
  31. tfv = tf[row[field]] = [i];
  32. }
  33. }
  34. }
  35. }
  36. $.each(temp, function (field, colunm) {
  37. $.each(colunm, function () {
  38. var group = this;
  39. if (group.length > 1) {
  40. var before,
  41. after,
  42. megerIndex = group[0];
  43. for (var i = 0; i < group.length; i++) {
  44. before = group[i];
  45. after = group[i + 1];
  46. if (after && (after - before) == 1) {
  47. continue;
  48. }
  49. var rowspan = before - megerIndex + 1;
  50. if (rowspan > 1) {
  51. target.datagrid('mergeCells', {
  52. index : megerIndex,
  53. field : field,
  54. rowspan : rowspan
  55. });
  56. }
  57. if (after && (after - before) != 1) {
  58. megerIndex = after;
  59. }
  60. }
  61. }
  62. });
  63. });
  64. });
  65. }
  66. });