委托案例( table tr(5*5)
移入移出背景变色(pink)+ 的第三列移入移出背景变色(green)

document.getElementsByTagName("table")[0].onmouseover = function(e) {
  // console.log(e.target.nodeName);
            
  if (e.target.nodeName == "TR") {
    e.target.nodeName.style.background = "pink";
  }
  
  if (e.target.nodeName == "TD" && e.toElement.cellIndex == 2) {
     e.target.style.background = "green";
  }
}

document.getElementsByTagName("table")[0].onmouseout = function(e) {
  if (e.target.parentNode.nodeName == "TR") {
    e.target.parentNode.style.background = "";
  }
  
  if (e.target.nodeName == "TD" && e.toElement.cellIndex == 2) {
    e.target.style.background = "green";
  }
}
 
事件冒泡并不是所有节点都触发一次,而是从最下层的节点,逐级向上传递。所以这样是无法捕捉到 <tr> 触发的事件的,因为它不是最下层,它下面还有 <td>,
tr标签被td完全遮盖住,所以mouseover根本不会降临到tr上,都是在td上直接触发。但是我们可以通过event来找到事件源的父级,由此来控制tr背景。
学会利用event对象的属性来操作完成需求
 
document.getElementsByTagName("table")[0].onmouseover = function(e) {
  // console.log(e.target.parentNode.nodeName);
            
  if (e.target.parentNode.nodeName == "TR") {
    e.target.parentNode.style.background = "pink";
  }
  
  if (e.target.nodeName == "TD" && e.toElement.cellIndex == 2) {
     e.target.style.background = "green";
  }
}

document.getElementsByTagName("table")[0].onmouseout = function(e) {
  if (e.target.parentNode.nodeName == "TR") {
    e.target.parentNode.style.background = "";
  }
  
  if (e.target.nodeName == "TD" && e.toElement.cellIndex == 2) {
    e.target.style.background = "green";
  }
}
posted on 2022-04-06 19:18  TANTT  阅读(86)  评论(0)    收藏  举报