问答详情
源自:9-22 编程练习

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

      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()这句话我也不是很能理解,函数不是可以直接调用吗,为什么要加这句话?求助大神解答啊啊啊

提问者:楠木楼林3812467 2016-09-19 23:48

个回答

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

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

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

  • 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节点。

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

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

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