关于参考答案中的var _table=document.getElementById("table").lastChild;

来源:9-22 编程练习

楠木楼林3812467

2016-09-19 23:48

      window.onload = function(){
        _change();
      }
                  
     // 鼠标移动改变背景,可以通过给每行绑定鼠标移上事件和鼠标移除事件来改变所在行背景色。
     function _change(){
      var _table=document.getElementById("table").lastChild;
      var _trs=document.getElementsByTagName("tr");
      for (var i = 0; i < _trs.length; i++) {
        _trs[i].onmouseover=function(){
          this.style.backgroundColor="#f2f2f2";
        }
        _trs[i].onmouseout=function(){
          this.style.backgroundColor="#fff";
        }
      }
     }    
		
     
	 
	 
     
      // 编写一个函数,供添加按钮调用,动态在表格的最后一行添加子节点;
     function _add(obj){
         var _table=document.getElementById("table").lastChild;
         var _tr=document.createElement("tr");
         
         var _td=document.createElement("td");
         _td.innerHTML="<input type='text'/>";
         _tr.appendChild(_td);
         
         var _td=document.createElement("td");
         _td.innerHTML="<input type='text'/>";
         _tr.appendChild(_td);
         
         var _td=document.createElement("td");
         _td.innerHTML="<a href='javascript:;' onClick='_remove(this)' >删除</a>";
         _tr.appendChild(_td);
         
         _table.appendChild(_tr);
         
         _change();
         
     }
    		
   	 
     // 创建删除函数
     function _remove(obj){
        var _table=document.getElementById("table").lastChild;
        var _tr=obj.parentNode.parentNode;
        _table.removeChild(_tr);
     }

这里为什么每个函数内定义的第一个变量都要取.lastChild不是很懂

还有window.onload = function()这句话我也不是很能理解,函数不是可以直接调用吗,为什么要加这句话?求助大神解答啊啊啊

写回答 关注

4回答

  • 慕粉3555832
    2016-09-22 14:48:14
    已采纳

    tbody是table的内置属性,还有thead,tfoot,分别是表头,表尾。

    tbody元素是必须的,就是你页面代码没写tbody真正运行的时候页面会给每个table加一个tbody,所以table.tr的父子链连不起来,必须是table.tbody.tr才可以

    new新的开...

    那这样为什么要最后一个节点呢……他的第一个节点也是tbody啊

    2016-10-14 20:52:18

    共 2 条回复 >

  • nanisore_0
    2017-09-14 11:25:31

    还有window.onload = function()这句话我也不是很能理解,函数不是可以直接调用吗?

    >>这句话就是在加载网页的时候就调用高亮的函数,不调用就没法运行该函数啊。

  • T_Ryu
    2016-09-20 17:13:21

    答案里的是table下还有tbody标签,然后tbody标签里面才是tr,貌似比我们这个里多了个tbody。用lastchild也许是兼容把?因为table下除了tbody节点外还有空白处也算节点。lastchild确保获得的节点是tbody节点。

    楠木楼林38...

    啊?没有啊,没看到tbody标签诶。。。

    2016-09-20 17:46:48

    共 1 条回复 >

  • strivehappy
    2016-09-20 01:31:48

    1、添加个删除都是对table下的lastChild操作的,所以就顺便这样定义了吧

    2、window.onload = function()的作用时保证先加载body段,后加载运行script段;如果没有这句话,就会按照从上到下的顺序执行,也就会导致getElement这些操作都返回失败了

    楠木楼林38...

    table的lastChild不是空白文本吗,还有就是之前在看removeChild的例子的时候都是直接父节点删除的,为啥这里要取最后一个子节点我还是不理解诶。

    2016-09-20 17:48:55

    共 1 条回复 >

JavaScript进阶篇

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

468061 学习 · 21891 问题

查看课程

相似问题