如何将一个事件附加到DOM的所有节点上?

问题描述:

我只是尝试将所有节点附加到单击事件。但我不明白如何在onload时添加它们。
我只是试图找出从点击的地方到根节点的节点列表的完整路径。这里是我的代码,我无法确定要传递的addEvent()参数。如何将一个事件附加到DOM的所有节点上?

function addEvent(node){ // i used this function in onload event 
     if(node == null) return; 
     node.onclick = catchClickedItem; 
     for(var i = 0; i < node.childNodes.length; i++){ 
      addEvent(node.childNodes[i]); 
     } 
    } 

    function catchClickedItem(e){ 
     alert(e.target);  
    } 

我试图与这个添加的addEvent:

window.onload = addEvent 

我遇到这个错误

Uncaught TypeError: Cannot read property 'length' of undefined 
+0

你能证明你怎么骂你的'的addEvent()'函数? –

+2

'childNodes'也包含'Text'和注释节点。你真的想要这个吗?另外,“这不起作用”不是问题描述。 – Xufox

+3

寻求调试帮助的问题(“**为什么不是这个代码工作?”)必须包含所需的行为,特定的问题或错误以及在问题本身**中重现**所需的最短代码。没有**明确问题陈述**的问题对其他读者无用。请参阅:[如何创建最小,完整和可验证示例](https://*.com/help/mcve)。 –

添加事件侦听器的每一个节点是一个坏主意。代替。而不是使用addEventListener而不是onclick

document.addEventListener("click", function(e) { 
 
    alert(e.target.innerHTML); 
 
    e.stopPropagation(); 
 
});
<div> 
 
    <div>hello</div> 
 
    <div> 
 
    <div>world</div> 
 
    <div> 
 
     <div>foo</div> 
 
    </div> 
 
    </div> 
 
</div>