html span 不可选中,span 禁止选中_span可编辑 属性 html 可编辑td 文字不可 选中...

/**

* JS实现可编辑的表格

* 用法:EditTables(tb1,tb2,tb2,......);

* Create by Senty at 2008-04-12

**/

//设置多个表格可编辑

functionEditTables() {for (var i = 0; i < arguments.length; i++) { //arguments叫做类数组对象

SetTableCanEdit(arguments[i]); //设置表可以编辑

}

}//设置表格单击事件

functionSetTableCanEdit(table) {for (var i = 1; i < table.rows.length; i++) { //循环传递过来的对象的行 第0行不传递

SetRowCanEdit(table.rows[i]); //设置行可以编辑

}

}functionSetRowCanEdit(row) {for (var j = 0; j < row.cells.length; j++) { //循环传递过来的对象的单元格

//如果当前单元格指定了编辑类型,则表示允许编辑

var editType = row.cells[j].getAttribute("EditType"); //方法返回指定属性名的属性值。

if (!editType) { //editType = null 表示单元格没有指定

//如果当前单元格没有指定,则查看当前列是否指定

editType = row.parentNode.rows[0].cells[j].getAttribute("EditType"); //传递过来的行的父元素下的行集合的第一行的指定属性名的属性值

}if (editType) { //单元格指定的有EditType属性值

row.cells[j].onclick = function () { //该单元格添加 单击事件

EditCell(this); //调用编辑单元格方法 //传递单元格对象

}

}

}

}//设置指定单元格可编辑

functionEditCell(element, editType) {var editType = element.getAttribute("EditType");//方法返回指定属性名的属性值。

if (!editType) {//如果当前单元格没有指定,则查看当前列是否指定

editType = element.parentNode.parentNode.rows[0].cells[element.cellIndex].getAttribute("EditType");//第一行的当前列是否指定

}switch(editType) {case "TextBox": //指定的是输入框

CreateTextBox(element, element.innerHTML); //调用创建文本框函数,传递td和td中的内容

break;case "DropDownList": //指定的是下拉框

CreateDropDownList(element);break;default:break;

}

}//为单元格创建可编辑输入框

functionCreateTextBox(element, value) {//检查编辑状态,如果已经是编辑状态,跳过

var editState = element.getAttribute("EditState"); //方法返回指定属性名的属性值。

if (editState != "true") { //判断不在编辑状态

//创建文本框

var textBox = document.createElement("INPUT");

textBox.type= "text";

textBox.className= "EditCell_TextBox";//设置文本框当前值

if (!value) { //属性值为空的时候

value = element.getAttribute("Value");//获取td指定属性名的Value属性值

}

textBox.value= value;//编辑框 内容赋值

//设置文本框的失去焦点事件

textBox.onblur = function() {

CancelEditCell(this.parentNode, this.value); //取消编辑 单元格事件 //传递td 和编辑框的内容

}//向当前单元格添加文本框

ClearChild(element); //清空td中的内容

element.appendChild(textBox);//td追加这个元素

textBox.focus(); //获得焦点

textBox.select(); //内容全选

//改变状态变量

element.setAttribute("EditState", "true"); //设置指定属性名和属性值

element.parentNode.parentNode.setAttribute("CurrentRow", element.parentNode.rowIndex);//设置这个td父元素的父元素的currentrow属性为这个元素的父元素的所在行

}

}//为单元格创建选择框

functionCreateDropDownList(element, value) {//检查编辑状态,如果已经是编辑状态,跳过

var editState = element.getAttribute("EditState");//获取指定属性名和属性值

if (editState != "true") { //判断不在编辑状态

//创建下接框

var downList = document.createElement("Select");

downList.className= "EditCell_DropDownList";//添加列表项

var items = element.getAttribute("DataItems");if (!items) {

items= element.parentNode.parentNode.rows[0].cells[element.cellIndex].getAttribute("DataItems");//td所在列的属性值

}if(items) {

items= eval("[" + items + "]");for (var i = 0; i < items.length; i++) { //遍历对象

var oOption = document.createElement("OPTION");

oOption.text=items[i].text;

oOption.value=items[i].value;

downList.options.add(oOption);

}

}//设置列表当前值

if (!value) {

value= element.getAttribute("Value");//获取td的值

}

downList.value=value;//设置创建下接框的失去焦点事件

downList.onblur = function() {

CancelEditCell(this.parentNode, this.value, this.options[this.selectedIndex].text); //取消编辑单元格

}//向当前单元格添加创建下接框

ClearChild(element); //清空td下内容

element.appendChild(downList); //追加下拉框

downList.focus();//获得焦点

//记录状态的改变

element.setAttribute("EditState", "true");

element.parentNode.parentNode.setAttribute("LastEditRow", element.parentNode.rowIndex);

}

}//取消单元格编辑状态

functionCancelEditCell(element, value, text) {

element.setAttribute("Value", value); //设置td的Value属性为编辑框内容

if(text) {

element.innerHTML=text;

}else{

element.innerHTML= value; //td插入这个传递过来的编辑框内容

}

element.setAttribute("EditState", "false"); //设置编辑状态为假

//检查是否有公式计算

CheckExpression(element.parentNode);

}//清空指定对象的所有字节点

functionClearChild(element) {

element.innerHTML= "";

}//添加行

functionAddRow(table, index) {var lastRow = table.rows[table.rows.length - 1];var newRow = lastRow.cloneNode(true);

table.tBodies[0].appendChild(newRow);

SetRowCanEdit(newRow);returnnewRow;

}//删除行

functionDeleteRow(table, index) {for (var i = table.rows.length - 1; i > 0; i--) {var chkOrder = table.rows[i].cells[0].firstChild;if(chkOrder) {if (chkOrder.type = "CHECKBOX") {if(chkOrder.checked) {//执行删除

table.deleteRow(i);

}

}

}

}

}//提取表格的值,JSON格式

functionGetTableData(table) {var tableData = newArray();

alert("行数:" +table.rows.length);for (var i = 1; i < table.rows.length; i++) {

tableData.push(GetRowData(tabProduct.rows[i]));

}

console.log(tableData);returntableData;

}//提取指定行的数据,JSON格式

functionGetRowData(row) {var rowData ={};for (var j = 0; j < row.cells.length; j++) {

name= row.parentNode.rows[0].cells[j].getAttribute("Name");if(name) {var value = row.cells[j].getAttribute("Value");if (!value) {

value=row.cells[j].innerHTML;

}

rowData[name]=value;

}

}//alert("ProductName:" + rowData.ProductName);

//或者这样:alert("ProductName:" + rowData["ProductName"]);

returnrowData;

}//检查当前数据行中需要运行的字段

functionCheckExpression(row) {for (var j = 0; j < row.cells.length; j++) {

expn= row.parentNode.rows[0].cells[j].getAttribute("Expression");//如指定了公式则要求计算

if(expn) {var result =Expression(row, expn);var format = row.parentNode.rows[0].cells[j].getAttribute("Format");if(format) {//如指定了格式,进行字值格式化

row.cells[j].innerHTML =formatNumber(Expression(row, expn), format);

}else{

row.cells[j].innerHTML=Expression(row, expn);

}

}

}

}//计算需要运算的字段

functionExpression(row, expn) {var rowData =GetRowData(row);//循环代值计算

for (var j = 0; j < row.cells.length; j++) {

name= row.parentNode.rows[0].cells[j].getAttribute("Name");if(name) {var reg = new RegExp(name, "i");

expn= expn.replace(reg, rowData[name].replace(/\,/g, ""));

}

}returneval(expn);

}**

* 格式化数字显示方式

* 用法

* formatNumber(12345.999,'#,##0.00');

* formatNumber(12345.999,'#,##0.##');

* formatNumber(123,'000000');

* @param num

* @param pattern*/

/*以下是范例

formatNumber('','')=0

formatNumber(123456789012.129,null)=123456789012

formatNumber(null,null)=0

formatNumber(123456789012.129,'#,##0.00')=123,456,789,012.12

formatNumber(123456789012.129,'#,##0.##')=123,456,789,012.12

formatNumber(123456789012.129,'#0.00')=123,456,789,012.12

formatNumber(123456789012.129,'#0.##')=123,456,789,012.12

formatNumber(12.129,'0.00')=12.12

formatNumber(12.129,'0.##')=12.12

formatNumber(12,'00000')=00012

formatNumber(12,'#.##')=12

formatNumber(12,'#.00')=12.00

formatNumber(0,'#.##')=0*/

functionformatNumber(num, pattern) {var strarr = num ? num.toString().split('.') : ['0'];var fmtarr = pattern ? pattern.split('.') : [''];var retstr = '';//整数部分

var str = strarr[0];var fmt = fmtarr[0];var i = str.length - 1;var comma = false;for (var f = fmt.length - 1; f >= 0; f--) {switch (fmt.substr(f, 1)) {case '#':if (i >= 0) retstr = str.substr(i--, 1) +retstr;break;case '0':if (i >= 0) retstr = str.substr(i--, 1) +retstr;else retstr = '0' +retstr;break;case ',':

comma= true;

retstr= ',' +retstr;break;

}

}if (i >= 0) {if(comma) {var l =str.length;for (; i >= 0; i--) {

retstr= str.substr(i, 1) +retstr;if (i > 0 && ((l - i) % 3) == 0) retstr = ',' +retstr;

}

}else retstr = str.substr(0, i + 1) +retstr;

}

retstr= retstr + '.';//处理小数部分

str = strarr.length > 1 ? strarr[1] : '';

fmt= fmtarr.length > 1 ? fmtarr[1] : '';

i= 0;for (var f = 0; f < fmt.length; f++) {switch (fmt.substr(f, 1)) {case '#':if (i < str.length) retstr += str.substr(i++, 1);break;case '0':if (i < str.length) retstr += str.substr(i++, 1);else retstr += '0';break;

}

}return retstr.replace(/^,+/, '').replace(/\.$/, '');

}

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值