zoukankan      html  css  js  c++  java
  • Javascript自动增加表格行、手动增加行、清除/复位行数据

    //为表格主体添加单击事件,当单击时添加行数,使表格保持有5个空行
    function autoRowsTable(tbodyID) {
        var tb = "";
        if (!document.getElementById(tbodyID)) {
            return;
        }
        if (!document.getElementById(tbodyID).tagName.toUpperCase()=="TBODY") {
            if (!document.getElementById(tbodyID).tBodies[0]) {
                return;
            } else {
                tb = document.getElementById(tbodyID).tBodies[0];
            }
        } else {
            tb = document.getElementById(tbodyID);
        }
        for (var i = 0; i < tb.rows.length; i++) {
    		AddAutoRowsEvent(tb.rows[i]);
        }
    }
    //自动增加行
    function autoRows(e) {
    	var e = e || event;
    	var obj = e.target || e.srcElement;
    	while (obj.tagName != "TR") {
    		obj = obj.parentNode;
    	}
    	var tb=obj.parentNode;
    	var n = 4 - (tb.rows.length - obj.rowIndex);
    	if (n > 0) {
    		var row = obj.parentNode.lastChild.cloneNode(true);
    		for (var j = 0; j < n; j++) {
    			var newRow = row.cloneNode(true);
    			//如果是IE则新克隆的节点不具备原来节点的默认值属性,此处重写新节点
    			if (window.ActiveXObject) {
    				for (var k = 0; k < newRow.childNodes.length; k++) {
    					newRow.childNodes[k].innerHTML = obj.parentNode.lastChild.childNodes[k].innerHTML.replace(/jQuery\d+\=\"\d+\"/ig, "");
    				}
    			}
    			tb.insertBefore(newRow, tb.rows[tb.rows.length - 1].nextSibling);
    			//为新增加的行添加事件
    			AddAutoRowsEvent(tb.rows[tb.rows.length - 1]);
    		}
    	}
    }
    //为指定行增加事件
    function AddAutoRowsEvent(tr){
    	if (tr.addEventListener) {
    		tr.addEventListener("click", autoRows, false);
    	} else if (tr.attachEvent) {
    		tr.attachEvent("onclick", autoRows); // useCapture unsupported
    	}
    	var c = tr.cells.length;
    	for (var j = 0; j < c; j++) {
    		var childs = tr.cells[j].childNodes;
    		for (var k = 0; k < childs.length; k++) {
    			if (childs[k].type == "text" || childs[k].type == "textarea" || childs[k].type == "button") {
    				if (childs[k].addEventListener) {
    					childs[k].addEventListener("focus", autoRows, false);
    				} else if (childs[k].attachEvent) {
    					childs[k].attachEvent("onfocus", autoRows); // useCapture unsupported
    				}
    			}
    		}
    	}		
    }
    
    //在表格中指定位置插入指定行数,新插入的行内容为同一表格主体最后一行
    //obj:行内的任意对象
    //n:要增加的行数
    //bAutoRows:是否要添加自动增加行的属性
    function insertRow(obj, n, bAutoRows) {
        while (obj.tagName != "TR") {
            obj = obj.parentNode;
        }
        for (var i = 0; i < n; i++) {
            var cloneRow = obj.parentNode.lastChild.cloneNode(true);
            //如果是IE则新克隆的节点不具备原来节点的默认值属性,此处重写新节点
            if (window.ActiveXObject) {
                for (var k = 0; k < cloneRow.childNodes.length; k++) {
                    cloneRow.childNodes[k].innerHTML = obj.parentNode.lastChild.childNodes[k].innerHTML.replace(/jQuery\d+\=\"\d+\"/ig, "");
                }
            }
            obj.parentNode.insertBefore(cloneRow, obj.nextSibling);
    		if(bAutoRows){
    			AddAutoRowsEvent(obj.nextSibling);
    		}
        }
    }
    //清除指定行数据
    //obj为行或者行内的节点
    //startColnum:起始列
    //endColumn:终止列
    //isReset:是否恢复到初始值
    function clearRowData(obj, startColnum, endColumn, isReset) {
        while (obj.tagName != "TR") {
            obj = obj.parentNode;
        }
        var cellsCount = obj.cells.length;                  //此行单元格总数
        if (startColnum < 0 || !startColnum) {             //如果未指定清除起始列则从第一列清除
            startColnum = 0;
        }
        if (endColumn > cellsCount - 1 || !endColumn) {     //如果未指定清除终止列则清除到最后一列前(通常最后一列用于放置清除按钮)
            endColumn = cellsCount - 1;
        }
        if (isReset == undefined) {
            isReset = false;
        }
        for (var c = startColnum; c <= endColumn; c++)		//循环各列,设置单元格里的控件值
        {
            for (var j = 0; j < obj.cells[c].childNodes.length; j++) {  //循环处理指定单元格中的子节点
                var node = obj.cells[c].childNodes[j];
                switch (node.type) {
                    case "text":
                    case "hidden":
                    case "textarea":
                        if (isReset) {
                            node.value = node.defaultValue;
                        } else {
                            node.value = "";
                        }
                        break;
    
                    case "select-one":
                    case "select-multiple":
                        if (isReset) {
                            for (var k = node.options.length - 1; k >= 0; k--) {
                                node.options[k].selected = node.options[k].defaultSelected;
                            }
                        } else {
                            for (var k = node.options.length - 1; k >= 0; k--) {
                                node.options.remove(k);
                            }
                        }
                        break;
                    case "checkbox":
                    case "radio":
                        if (isReset) {
                            node.checked = node.defaultChecked;
                        } else {
                            node.checked = false;
                        }
                        break;
                }
            }
        }
    }
  • 相关阅读:
    [转]Worksheet.Change Event (Excel)
    [转]EXCEL如何使用动态公式
    [转]用NPOI操作EXCEL--数据有效性
    [转]How to insert a row between two rows in an existing excel with HSSF (Apache POI)
    [转]Excel
    [转]asp.net解决高并发的方案.
    [转]ActionScript 3.0入门:Hello World、文件读写、数据存储(SharedObject)、与JS互调
    Programming ActionScript 3.0 for Flash
    页游 《大皇帝》
    [转]Flash ActionScript2.0面向对象游戏开发-推箱子
  • 原文地址:https://www.cnblogs.com/apollokk/p/6713921.html
Copyright © 2011-2022 走看看