通过 js 对表格进行更删减改

效果图:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<!--<script type="text/javascript" src="js/index.js"></script>-->
</head>

<body>
	<center>
		<table id="tab" border="1">
			<tr>
				<th width="25%">年级</th>
				<th width="25%">性别</th>
				<th width="25%">姓名</th>
				<th width="25%">操作</th>
			</tr>
			<tr>
				<td></td>
				<td></td>
				<td></td>
				<td>
				<button>编辑</button>
				<button>删除</button>
				</td>
			</tr>
		</table>
		<button id="but">添加</button>
	</center>
</body>
</html>

<script>
var but=null;	//添加按钮
var tab=null;	//表格
var n=0;		//行标志
var dd = null;	//定义一个变量 存所有的td
var thLength = 0;//thLength是th标签的个数

window.onload = function(){
	//初始化
	tabInit();
	//添加行
	addRows();
}

/*
功能:初始化按钮和表格对象
参数:
返回值:
*/
function tabInit(){
	//添加按钮  点击调用addRows方法添加一行
	but=document.getElementById("but");
	but.addEventListener("click",addRows);
	
	//表格  用来追加行的
	tab=document.getElementById("tab");
	//添加表格的属性  宽度  边框 点击事件
	tab.setAttribute("width","50%");
	tab.setAttribute("border","1");
	thLength = document.getElementsByTagName("th").length;
}
/*
功能:创建tr  td  放到表格里面
参数:
返回值:
*/
function addRows(){
	n++;//做标记删除按钮和行的关联标记
	//创建tr 一会放到表格
	var trdom=document.createElement("tr");
	var tddom="";//创建td  一会放到tr里面
	var czdom="";//创建删除按钮  一会放到一行最后一个td
	//thLength是th标签的个数
	for(var i=0;i<thLength;i++){
		tddom=document.createElement("td");
		//最后一个单元格里面有一个删除按钮
		if(i == thLength-1){
			czdom=document.createElement("button");
			czdom.innerHTML="删除";
			//添加标识  和行相关联 64行
			czdom.setAttribute("flage",n);
			//点击事件
			czdom.addEventListener("click",del);
			//将按钮放到td里面
			tddom.appendChild(czdom);
			//设置居中 同时用来判断是否添加单元格事件
			tddom.style.textAlign="center";
		}
		//将td 放到 tr 里面
		trdom.appendChild(tddom);
	}
	//设置tr的属性和这一行的删除按钮相关联 52行
	trdom.setAttribute("flage",n);
	//将ttr放到 tab里面
	tab.appendChild(trdom);

//	****************** 
//	给每个单元格添加事件 
//	******************
	//获取所有的td
	dd = document.getElementsByTagName("td"); 
	//给所有的td加上点击事件
	for(var j=0;j<dd.length;j++){
		dd[j].addEventListener("click",addclick); 
	}
}
/*
功能:td点击事件,将内容提换为文本框
参数:
返回值:
*/
function addclick(evt){
	var tdObj = this;//被点击的那个td对象
	var tdStr = "";//用来存td里面的内容 放到文本框中
	//判断是最后一个td就结束方法
	if(tdObj.style.textAlign != ""){
		return;
	}
	//获取td里面的内容  将内容给文本框
	tdStr = tdObj.innerHTML;
	tdObj.innerHTML = '<input type="text" value="'+tdStr+'" onBlur="xiaoshi(this)"  style="border: none">';
//	设置当前操作的td属性 
//	文本框时区焦点将文本框的值给td 
//	为了定位到正在操作的td
	tdObj.setAttribute("selTd","sel");
	//删除事件 防止和文本框冲突
	for(var l=0;l<dd.length;l++){
		dd[l].removeEventListener('click',addclick); 
	}
}
/*
功能:文本框失去焦点 文本框消失
参数:  文本框对象
返回值:
*/
function xiaoshi(obj){
	//获取到文本框的内容
	var val = obj.value;
	//将这个文本框删除 td清空
	obj.remove();

	//将文本框的内容给td  找到所有td
	dd = document.getElementsByTagName("td"); 
	for(var i = 0; i<dd.length;i++){
		//通过selTd 属性判断当前正在操作的td
		if(dd[i].getAttribute("selTd") == "sel"){
//			将文本框的内容给td
			dd[i].innerHTML = val;
//			将 属性selTd 删除  保证唯一性
			dd[i].removeAttribute("selTd");
		}
	}
     //给所有的td加上点击事件
	for(var j=0;j<dd.length;j++){
		dd[j].addEventListener("click",addclick); 
	}
}
/*
功能:点击删除将本行删除
参数:
返回值:
*/
function del(){  //
	var btnObj = this;//btnObj是删除按钮 对象
	var num=btnObj.getAttribute("flage");
	var trarr=document.getElementsByTagName("tr");
	for(var a in trarr){
		if(trarr[a].getAttribute("flage") == num){
			trarr[a].remove();
		}
	}
}
</script>

  

原文地址:https://www.cnblogs.com/1301694f/p/8338914.html