Ueditor 二次开发 表格数据自动排名
利用Ueditor的二次开发功能,对表格数据进行自动排名。
//排名函数文件:paiming.js
//取消关闭
$G("cancelBtn").onclick = function () {
dialog.close(false);
};
//取上次操作参数
$G("lastBtn").onclick = function () {
var PaiMing=getCookie('PaiMing');
console.log(PaiMing);
var PaiMingS = PaiMing.split(",");
if(PaiMingS.length>6){
$G("rowBeginD").value=PaiMingS[0];
$G("rowEndDS").value=PaiMingS[1];
$G("rowPMwz").value=PaiMingS[2];
$G("rowMerge").value=PaiMingS[3];
$G("colBeginD").value=PaiMingS[4];
$G("colEndDS").value=PaiMingS[5];
$G("colPMcolor").value=PaiMingS[6];
}
};
//排名操作
$G("runBtn").onclick = function () {
var rowBegin = parseInt($G("rowBeginD").value)-1,
rowEndDS = parseInt($G("rowEndDS").value),
rowPMwz = parseInt($G("rowPMwz").value)-1,
rowMerge = parseInt($G("rowMerge").value)-1,
colBegin = parseInt($G("colBeginD").value)-1,
colEndDS = parseInt($G("colEndDS").value),
colPMcolor= $G("colPMcolor").value.replace(/^\s|\s$/g, "");
if (!rowBegin||!rowPMwz||!colBegin ) {
return false;
}
if(rowBegin<=0||colBegin<=0){
alert('参数设置有问题');
return false;
}
setCookie('PaiMing',(rowBegin+1)+','+rowEndDS+','+(rowPMwz+1)+','+(rowMerge+1)+','+(colBegin+1)+','+colEndDS+','+colPMcolor);
var zhtml=editor.getContent();
var tTable=editor.document.getElementsByTagName('table');
if(tTable.length==0){
alert('没有表格进行此操作!');
return false;
}
var uTable=tTable[0].ueTable;
var tColsNum=uTable.colsNum;//表的列数
var tRowsNum=uTable.rowsNum;//表的行数
//第一格是合并行的拆分
var cell=uTable.getCell(0,0);
var cellInfo=uTable.getCellInfo(cell);
if(cellInfo.colSpan>1||cellInfo.rowSpan>1){
uTable.splitToCells(cell);
}
//从colBegin开始列,逐列计算排名
for(var i=colBegin;i<tColsNum;i++){
var cell=uTable.getCell(rowBegin,i);
var cellInfo=uTable.getCellInfo(cell);
if(!cellInfo.colIndex){
break;
}
var isNum=0;
var arr = []; //先声明一维
for(var j=rowBegin;j<tRowsNum-rowEndDS;j++){//获取此列单元格值
arr[j]=uTable.getCell(j,i).innerText;
if(/^-?\d*.?\d+$/.test(arr[j])){//无数字的空列就不增列不往下执行了
isNum++;
}
}
if(isNum==0){//空列跳过本循环
continue;
}
uTable.insertCol(i+cellInfo.colSpan, cell);//插入一列,排名列
tColsNum=uTable.colsNum;//重新计算总列数
var TLcell=uTable.getCell(0,i);
uTable.setCellContent(uTable.getCell(rowPMwz,i+1),'排名');
uTable.getCell(rowPMwz,i+1).style.cssText = "color:"+ colPMcolor+";";
uTable.getCell(rowPMwz,i+1).setAttribute('Align', 'center');
for(var j=rowBegin;j<tRowsNum-rowEndDS;j++){//排名
var mc=1;
for (k=rowBegin;k<tRowsNum-rowEndDS;k++){
if (/^-?\d*.?\d+$/.test(arr[j])&&/^-?\d*.?\d+$/.test(arr[k])){
if (parseFloat(arr[j])<parseFloat(arr[k])){
mc++;
}
}
}
if(/^-?\d*.?\d+$/.test(arr[j])){
uTable.setCellContent(uTable.getCell(j,i+1),mc);
uTable.getCell(j,i+1).style.cssText = "color:"+ colPMcolor+";";//排名颜色灰色,居中显示
uTable.getCell(j,i+1).setAttribute('Align', 'center');
}
}
i++;//跳过排名列,再进行下一列操作
// break;
}
//表格整理,默认第1,2行
var cell,cellR,cellInfo,cellInfoR,cellText,cellTextR
var iCol=colBegin;//列开始整理合并
for(var i=0;i<=rowMerge;i++){//默认操作第1、2行
for(var j=iCol;j<100;j++){
cell= uTable.getCell(i,j);
cellR=uTable.getCell(i,j+1);
if(cellR==null){ //不是表格单元格就退出循环
break;
}
cellInfo= uTable.getCellInfo(cell);
cellInfoR=uTable.getCellInfo(cellR);
if(cellInfoR.colSpan==1){
uTable.mergeRight(cell);
}
}
}
$G('showMsg').innerHTML = '<font color=red>数据排名完成!</font>';
var zhtml=editor.getContent();
zhtml=zhtml.replace(/(valign="null"|rowspan="1"|colspan="1"|word-break:[^;]*;)/gi,'');
editor.setContent(zhtml);
};
//清理排名数据
$G("clearBtn").onclick = function () {
var rowBegin = parseInt($G("rowBeginD").value)-1,
rowEndDS = parseInt($G("rowEndDS").value),
rowPMwz = parseInt($G("rowPMwz").value)-1,
rowMerge = parseInt($G("rowMerge").value)-1,
colBegin = parseInt($G("colBeginD").value)-1,
colEndDS = parseInt($G("colEndDS").value),
colPMcolor= $G("colPMcolor").value.replace(/^\s|\s$/g, "");
if (!rowBegin||!rowPMwz||!colBegin ) {
//console.log('!rowBegin='+!rowBegin+';rowPMwz='+rowPMwz+'colBegin='+colBegin);
return false;
}
if(rowBegin<=0||colBegin<=0){
alert('参数设置有问题');
return false;
}
setCookie('PaiMing',(rowBegin+1)+','+rowEndDS+','+(rowPMwz+1)+','+(rowMerge+1)+','+(colBegin+1)+','+colEndDS+','+colPMcolor);
var zhtml=editor.getContent();
var tTable=editor.document.getElementsByTagName('table');
if(tTable.length==0){
alert('没有表格进行此操作!');
return false;
}
// $G('showMsg').innerHTML = '<font color=blue>排名数据清理开始......</font>';
var uTable=tTable[0].ueTable;
var tColsNum=uTable.colsNum;//表的列数
var tRowsNum=uTable.rowsNum;//表的行数
for(var i=0;i<tColsNum;i++){//从第一列开始
var cell=uTable.getCell(rowPMwz,i);
if(cell==null){
break;
}
var cellInfo=uTable.getCellInfo(cell);
var cellTxt=cell.innerText;
if(cellTxt=='排名'){//删除列
uTable.deleteCol(cellInfo.colIndex);
i=i-1;
tColsNum=uTable.colsNum;//重新计算总列数
}
}
$G('showMsg').innerHTML = '<font color=red>排名数据清理完成!</font>';
var zhtml=editor.getContent();
zhtml=zhtml.replace(/(valign="null"|rowspan="1"|colspan="1"|word-break:[^;]+;)/gi,'');
zhtml=zhtml.replace(/(style="")/gi,'');
zhtml=zhtml.replace(/<p>([^<]*)<\/p><p>([^<]*)<\/p>/gi,'$1<br/>$2');
zhtml=zhtml.replace(/<p>([^<]*)<\/p>/gi,'$1');
editor.setContent(zhtml);
//console.log('行='+uTable.rowsNum+';列='+uTable.colsNum);
//console.log(Cell.innerText);//行,列,内容
//console.log(uTable.getTabNextCell(Cell));//当前格右边格
//console.log(uTable.getHSideCell(Cell));//当前格左边格
};
function getCookie(name){
var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)");
if(arr=document.cookie.match(reg)){
return unescape(arr[2]);
}else{
return null;
}
}
function setCookie(name,value){
var Days = 30;
var exp = new Date();
exp.setTime(exp.getTime() + Days*24*60*60*1000);
document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
}