为了账号安全,请及时绑定邮箱和手机立即绑定

js添加和删除节点, 方法调用是通过子节点中的节点来添加的呢。

分析了老师的代码才知道自己错在哪里了。  document.getElementById('table').lastChild;    原来对于  removeChild()方法的理解 都不太正确, 应该是 子节点列表中的节点调用此方法,同理 appendChild().  对么?

正在回答

3 回答

<!DOCTYPE html>
<html>
 <head>
  <title> new document </title>  
  <meta charset="UTF-8">
  <meta http-equiv="Content-Type" content="text/html; charset=gbk"/>    

 </head> 
 <body> 
	   <table border="1" width="50%" id="table">
	   <tr>
		<th>学号</th>
		<th>姓名</th>
		<th>操作</th>
	   </tr>  

	   <tr>
		<td>xh001</td>
		<td>王小明</td>
		<td><a href="javascript:remove();" >删除</a></td>   <!--在删除按钮上添加点击事件  -->
	   </tr>

	   <tr>
		<td>xh002</td>
		<td>刘小芳</td>
		<td><a href="javascript:remove();" >删除</a></td>   <!--在删除按钮上添加点击事件  -->
	   </tr>  

	   </table>
	   <input type="button" value="添加一行"  />   <!--在添加按钮上添加点击事件  -->
	      <script>
	      var table = document.getElementById("table");
        var tr = table.getElementsByTagName("tr");
      window.onload = function(){
      	//点击添加新行,开始
      	   var but = document.getElementsByTagName("input")[0];
      	   but.onclick = function(){
      	   	var newtr = document.createElement("tr");
      	   	var td1 = document.createElement("td");
      	   	var td2 = document.createElement("td");
      	   	var td3 = document.createElement("td");
      	   	td1.style.height = "20px";
      	   	newtr.appendChild(td1);
      	   	newtr.appendChild(td2);
      	   	newtr.appendChild(td3);
      	   	table.appendChild(newtr);
      	   }
      	   //鼠标经过变色;
       for (var i=0;i<tr.length; i++){
        	tr[i].onmousemove = function(){
        		this.style.backgroundColor = "#f2f2f2"
        	};
        	tr[i].onmouseout = function(){
        		this.style.backgroundColor = "#fff";
        	}
        }
    }
      // 删除当前行;
    function remove(){
    	var a = table.getElementsByTagName("a");
    	for (var i=0;i<a.length;i++){
    		a[i].onclick = function(){
    			var parent = this.parentNode.parentNode;
    			var oldparent = parent.parentNode;
    			oldparent.removeChild(parent);
    		}
    	}
    }
   
     


  </script> 
 </body>
</html>

JS dom中替换或者删除某个节点都需要通过这个节点的父节点来操作的

0 回复 有任何疑惑可以回复我~
#1

yummy5 提问者

我之前也是这么想的,因为不知道this 然后 看了下老师的 代码,那个 var tab_node = document.getElementById('table').lastChild; ***** tab_node.appendChild(new_node_tr); 就给我看懵了... 到现在也不是很理解老师的这个 lastChild是想干什么
2017-03-29 回复 有任何疑惑可以回复我~
#2

慕粉1440489053 回复 yummy5 提问者

因为表格在浏览器加载的时候会自动添加一个在<table>标签内添加一个<tbody>子标签,也就是tr的父节点。 <table><tbody><tr></tr></tbody></table>。。。。tab_node 实际上就是 tbody这个节点
2017-03-29 回复 有任何疑惑可以回复我~
#3

慕粉1440489053 回复 慕粉1440489053

table的最后一个子节点 就是 tboby
2017-03-29 回复 有任何疑惑可以回复我~
#4

yummy5 提问者

ohh 原来是这样啊,差点就搞错 ^_^ 受教了
2017-03-30 回复 有任何疑惑可以回复我~
查看2条回复

但是看老师第九章的练习代码:添加一行<tr>

var tab_node = document.getElementById('table').lastChild;

*****
tab_node.appendChild(new_node_tr);

table.lastChild  ——应该就是 tr 了吧 ,然后用 tr  去 添加 tr.   就相当于就相当于 兄弟节点 添加了兄弟节点
我试过了 去掉 lastChild 但是发现 如果去掉之后 添加节点时没有问题的,但是删除节点的方法会有问题。

0 回复 有任何疑惑可以回复我~

document.getElementById('table').lastChild  返回id为table的对象的最后一个子节点

<body>


<ul id="test">

  <li>JavaScript</li>

  <li>HTML</li>

</ul> 

 

<script type="text/javascript">


  var a = document.getElementById("test");           //把id为test的对象赋值给a

  var b = document.createElement("li");            //在对象li的字节后添加一个新对象li 

    b.innerHTML="PHP";                                   //为空字节赋值

  a .appendChild(b)                             //在a中添加一个新的子字节。a是li的父

</script> 


</body>



0 回复 有任何疑惑可以回复我~
#1

yummy5 提问者

但是看老师第九章的练习代码:添加一行<tr> var tab_node = document.getElementById('table').lastChild; ***** tab_node.appendChild(new_node_tr); table.lastChild ——应该就是 tr 了吧 ,然后用 tr 去 添加 tr. 就相当于就相当于 兄弟节点 添加了兄弟节点 我试过了 去掉 lastChild 但是发现 如果去掉之后 添加节点时没有问题的,但是删除节点的方法会有问题。
2017-03-27 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
JavaScript进阶篇
  • 参与学习       468189    人
  • 解答问题       21891    个

本课程从如何插入JS代码开始,带您进入网页动态交互世界

进入课程

js添加和删除节点, 方法调用是通过子节点中的节点来添加的呢。

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信