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();
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值