0

新しいノードを作成してHTMLページに挿入するJSスクリプトがあります。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(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ミューテーションイベントは必要ありません。

(多くのJSフレームワークの一部であるように)イベント処理レイヤーがある場合は、this/targetトラッキングをそのレイヤーに配置できるため、トリガーされたコードは「私の前に最後に発生したイベントは何でしたか?」と尋ねることができます。

しかし、私はこれが価値があるとは確信していません。通常、コンポーネント間で通信する独自​​の協調フックを追加するのが最善です。DOMミューテーションイベントはグローバルに完全にサポートされていないため(または実際にはIE <9でまったくサポートされていないため)、通常はDOMミューテーションイベントに依存することはできません。

于 2010-11-02T07:39:43.663 に答える
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 に答える