0

我有一个 JS 脚本,它创建了一个新节点并将其插入 HTML 页面。我正在处理 DOM 突变事件并且可以捕获 DOMNodeInserted 事件。在该函数中,我想找出源(即在 HTML 的哪一部分调用了脚本函数)和目标(即在 HTML 页面中添加节点的部分)。

我可以使用 找到目标event.target,但我无法找到事件的来源。

例如,考虑以下伪代码 HTML 页面:

<html>
<head>
<script>
   function test() {
      //DOM access
      <div_object>.setAttribute("attr", "value");
   }
</script>
</head>
<body onload="test()">
   <div id="123">
   </div>
</body>
</html>

我希望我的源是 BODY (因为那是脚本被启动),目标应该是 div(123) (因为属性被添加到 div_123.

我怎样才能做到这一点?

4

3 回答 3

0

关于什么

<html>
<head>
<script>
   function test(element) {
      //DOM access
      element.setAttribute("attr", "value");
   }
</script>
</head>
<body onload="test(this)">
   <div id="123">
   </div>
</body>
</html>

?

于 2010-11-02T07:21:05.083 回答
0

有趣的。我看了一下here(回答获取格式)

<html>
<head>
<script>
function test(e) {
  if (e) var event=e;
//DOM access
  var t="";
  for (o in event) t+='<br/>'+o+':'+event[o]
  document.getElementById('d123').innerHTML=t;
}
</script>
</head>
<body onload="test(event)">
   <div id="d123">
   </div>
</body>
</html>
于 2010-11-02T07:31:53.503 回答
0

抱歉,您无法找出导致事件被触发的代码片段,它们是完全解耦的。您必须通过将其自己的值this/存储event.target在一个变量中来让触发代码进行协作,以便稍后触发代码拾取。

但是如果你有这样的合作,你就不需要 DOM Mutation Events。

如果您有一个事件处理层(许多 JS 框架的一部分),您可以将this/target跟踪放在该层中,因此触发的代码可以询问“在我之前触发的最后一个事件是什么?”。

但我不相信这是值得的。通常最好添加自己的协作钩子来在组件之间进行通信;您通常不能依赖 DOM 突变事件,因为它们不是全局和完全支持的(或者在 IE<9 上确实完全支持)。

于 2010-11-02T07:39:43.663 回答