2017-05-17 7 views
1

Chrome拡張機能の記述。Chrome拡張機能のJS - 要素がDOMに入るたびに関数を実行

特定のタイプの要素はDOMに入ると、私はJSがかかるその要素に対して関数をこれを認識し、実行することができるようにしたい(クラス.text-specialまたはタグ<span>の種類、またはID #searchResultなどすることができます)要素自体を引数とします。

「私にこの他の要素の子要素のみを渡してください」と言いますが、それでも同じ問題です。

これは可能ですか?

+0

あなたは要素がDOMに入ることを意味しますか?それはDOMに動的に追加されますか? –

+0

はい、動的にajax経由で追加しました – lollercoaster

答えて

0

要素が追加されているかどうかをほぼ連続して確認できますが、十分短い間隔を選択してIIFEでクロム拡張子を囲むことができます。

var frequency = null; 

    var readyStateFrequency = setInterval(function() { 

     if (document.readyState === "interactive" || document.readyState === "complete") { 

      clearInterval(readyStateFrequency); 

      frequency = setInterval(function() { 
       app.executeMe(); 
      }, 10); 
     } 
    }, 10); 

    var app; if (!app) app = {}; 

    (function(callback) { 

     var app = { 

      executeMe : function(){ 

          clearInterval(frequency); 

          // check if the DOM element exists(using selector query) and if found perform required logic 
          //this.doSomething(); 
      } 
     }; 

    window.app = app; 

    }(window)); 
+0

これはあまり役に立ちません。DOMをポーリングするだけです。私は、クエリにマッチする潜在的に追加されたDOM要素ごとに一度だけ呼び出されるリスナを設定したいと思います。 – lollercoaster

+0

上記のコードは機能しませんか、またはあなたはそのアプローチを好まないのですか? –

+0

jQuery .liveと.bindメソッドは廃止されました。そのため、イベントのリスンについてはわかりません。 –

1

MutationObserverを試みることができる何

document.getElementById("parent").onclick=function(e){ 
 
    if(e.target.className=="child"){ 
 
    console.log(e.target); 
 
    } 
 
}; 
 
//test 
 
document.getElementById("add").onclick=function(){ 
 
    document.getElementById("parent").innerHTML+='<div class="child">123</div>'; 
 
};
<div id="parent"><div class="child">abc</div></div> 
 
<button id="add">add</button>

+0

ユーザー以外のニースは、これらの要素をクリックしません。彼らは親の子としてDOMを入力するだけです。だからそれは本当にその質問に答えません。 – lollercoaster

関連する問題