Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 向上遍历DOM树以显示有关父节点的信息_Javascript - Fatal编程技术网

Javascript 向上遍历DOM树以显示有关父节点的信息

Javascript 向上遍历DOM树以显示有关父节点的信息,javascript,Javascript,我觉得这应该是一个容易的问题,但我发现自己陷入困境。我试图做的是设置一种方式,以便每次单击表(或任何位置)上的单元格时,它都会显示每个元素的父节点,基本上是遍历DOM树。我想我需要使用elem.parentNode,但我被困在遍历部分。任何能帮助我的大师都将不胜感激。直到今天我还以为像currentTarget和target这样的事件属性在IE中是不可用的。看起来他们只是在IE中有表亲,就像其他各种属性一样。感谢您的深入了解。getElementsByTagName返回的对象不是数组,因此需要使

我觉得这应该是一个容易的问题,但我发现自己陷入困境。我试图做的是设置一种方式,以便每次单击表(或任何位置)上的单元格时,它都会显示每个元素的父节点,基本上是遍历DOM树。我想我需要使用elem.parentNode,但我被困在遍历部分。任何能帮助我的大师都将不胜感激。

直到今天我还以为像
currentTarget
target
这样的事件属性在IE中是不可用的。看起来他们只是在IE中有表亲,就像其他各种属性一样。感谢您的深入了解。
getElementsByTagName
返回的对象不是数组,因此需要使用
Array.prototype.method.call
或正确地迭代它。@rxgx它实际上返回一个,它有一个
length
属性,并且(根据规范)有可以通过整数索引访问的项。因此,我所做的循环是非常好的。谢谢你的帮助。快速提问,为什么要使用element.parentNode而不是element?DOM中的每个元素都有它的
parentNode
——不包括根节点,根节点是
Document
。所以只要元素有一个
parentNode
,就可以在元素上迭代。在
while
body中,您将当前元素
parentNode
分配给元素变量,这样它可以不停地运行,直到到达没有
parentNode
文档。
var tables = document.getElementsByTagName('table');
for (var i=0,len=tables.length;i<len;++i){
  tables[i].onclick = function(evt){
    if (!evt) evt = window.event;
    var element = evt.target || evt.srcElement;
    while (element){
      console.log(element);
      element = element.parentNode;
    }
  };
}
document.body.onclick = function(evt){
  if (!evt) evt = window.event;
  var element = evt.target || evt.srcElement;
  while (element){
    console.log(element);
    element = element.parentNode;
  }
};
var element; //your clicked element
while(element.parentNode) {
    //display, log or do what you want with element
    element = element.parentNode;
}