jqueryでドキュメントに新しい要素が追加されたときは、どうすれば検出できますか?jqueryでドキュメントに新しい要素が追加されたことを検出するにはどうすればよいですか?
説明: "column-header"クラスの要素が文書にいつ追加されたかを知りたいと思います。私はこれらの要素にいくつかのjavascriptを実行する予定です。
どうすればいいですか?私はjQueryのjavascriptライブラリを使用します。
jqueryでドキュメントに新しい要素が追加されたときは、どうすれば検出できますか?jqueryでドキュメントに新しい要素が追加されたことを検出するにはどうすればよいですか?
説明: "column-header"クラスの要素が文書にいつ追加されたかを知りたいと思います。私はこれらの要素にいくつかのjavascriptを実行する予定です。
どうすればいいですか?私はjQueryのjavascriptライブラリを使用します。
、あなたもlivequery (extra plugin)ような何かを行うことができます。投票を使用することについてどのように
$(".column-header").live("click",function(){});
...
if($('.column-header')){
//do something...
}
か、またthis..itあなたはjQuery Mutation Eventsをチェックアウトする必要があり、より汎用的な
jQuery.exists = function(selector) { return ($(selector).length > 0); }
if ($(selector).exists()) {
// Do something
}
質問が残っていますが、いつ発言するのですか? – jAndy
うん、それはものだ。私はそれを何度も繰り返すことはしませんでした。 –
になりますような何かを行うことができます。これを試してみてください私はそれがあなたが探しているものだと信じています。
http://www.adaptavist.com/display/jQuery/Mutation+Eventsへのリンクをもう少し説明してください – MattSmith
ありがとう、見てください –
$(document).bind('DOMNodeInserted', function(e) {
console.log(e.target, ' was inserted');
});
DOMNodeInserted
はDOMレベル3イベントです。つまり、そのようなイベントをサポートするには、かなり新しいブラウザが必要です。
参考:リンクが壊れていたようです :
$('column-header').livequery(function()
{
// do things here with your column-header, like binding new events and stuff.
// this function is called when an object is added.
// check the API for the deletion function and so on.
});
UPDATE:あなたはそれにいくつかのjQueryをしたい場合はMDC
うーん...これは面白そうです。 –
これは今後の開発のための最良の選択です。ただし、これはIE8以下ではサポートされていないことに注意してください。私は誰かがIE8以下でこの仕事のようなものを作るためにすばやく汚い方法をやろうと思っていて、なんらかの理由でlivequeryを使いたくない場合、以下の答えを追加しました。 –
2016年[mutation events](https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Mutation_events)は推奨されていません。古いプロジェクトや新しいプロジェクトでは、この種の技術を使用しないことをお勧めします。ピチ –
を試してみてください - "クラスを持つ要素を探し続けますあなたがそれを見つけて行動を起こすまで、「列ヘッダー」を押してください。シンプルですね。
しかし、問題は、レンダリングされていないクリックだけでトリガされるということです。 –
)あなたはクラスcolumn-header
を持つすべての要素のために同じ機能を設定したいなら、あなたはjqueryの(住んで使用することができますthis link
それはうまくいくが、UIの経験には時間差があるだろう。それを避けるために願っています。 –
私はそれがページのdom構造がどれだけ深く、どれほど広がっているかによって決まると思います。私はいくつかのjqueryプラグインを使用すると、はるかに高速なパフォーマンスを達成するとは思わない - 特定の例でテストする必要があります。 – bogatyrjov
うん、私はライブクエリーを試みた。遅れがありました。 –
私はsetIntervalを使って繰り返し要素をチェックします。例えば。
var curLength=0;
setInterval(function(){
if ($('.column-header').length!=curLength){
curLength=$('.column-header').length;
// do stuff here
}
},100);
このコードは100ミリ秒ごと
それはうまくいくでしょう。しかしそれは重くないでしょうか? –
かなり重いですが、NodeAddedイベントのネイティブサポートはありません。これはそれが得られるほど良いです。両方のライブイベントを照会すると、どうやら何らかのsetIntervalループが使用されます。 – Ivan
重くなることはありません。Intervalを変数に設定してから、それをクリアしてください。 –
任意の新しい.colum-ヘッダ要素をチェックします私は、上記のDOMNodeInserted方法は、おそらく最もセクシーな選択だと思いますが、あなたはで動作するように起こっている何かを必要とする場合IE8と下は、あなたのような何かを行うことができ、次の、あなたが欲しいところが、それから方法を作ることだけで基本的な考え方に変更することができますされ
// wrap this up in en immediately executed function so we don't
// junk up our global scope.
(function() {
// We're going to use this to store what we already know about.
var prevFound = null;
setInterval(function() {
// get all of the nodes you care about.
var newFound = $('.yourSelector');
// get all of the nodes that weren't here last check
var diff = newFound.not(prevFound);
// do something with the newly added nodes
diff.addClass('.justGotHere');
// set the tracking variable to what you've found.
prevFound = newFound;
}, 100);
})();
は、あなたのためのsetIntervalの戻り値を保ちますそれを止めることができますか、何をする必要があります。しかし、それは仕事を完了する必要があります。
2013年まではMutationEventsは推奨されていません。他の誰がDOMに新しい要素を検出する問題を持っている場合は、代わりにMutationObserversを使用することができます。 https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver
リンクを貼り付けるだけで答えるだけでなく、あなたの答えを詳述してください。 (あなたの答えにフラグがあるので私はここに来た) – BrunoLM
受け入れ答えは、2011年から廃止されたプラグインを使用し、最高のupvoted答えは今deprecatedあり、変異イベントを使用しています。
今日、MutationObserverは、要素がDOMに追加されたことを検出するために使用する必要があります。 MutationObserversは現代のすべてのブラウザ(Chrome 26+、Firefox 14+、IE11、Edge、Opera 15+など)で広くサポートされるようになりました。
ここでは、MutationObserver
を使用して要素がDOMに追加されたときをリッスンする方法の簡単な例を示します。
簡潔にするために、私はノードを構築してDOMに挿入するためにjQuery構文を使用しています。任意のノードが追加またはdocument
から除去されるたびに
var myElement = $("<div>hello world</div>")[0];
var observer = new MutationObserver(function(mutations) {
if (document.contains(myElement)) {
console.log("It's in the DOM!");
observer.disconnect();
}
});
observer.observe(document, {attributes: false, childList: true, characterData: false, subtree:true});
$("body").append(myElement); // console.log: It's in the DOM!
observer
イベントハンドラがトリガされます。ハンドラ内でcontains
のチェックを実行してmyElement
がdocument
にあるかどうかを確認します。
mutations
に格納されている各MutationRecordを反復処理する必要はありません。myElement
に直接document.contains
のチェックを行うことができます。
パフォーマンスを向上させるには、document
を、DOMにmyElement
を含む特定の要素に置き換えます。
ありがとう、それは私のために働いた。 –
livequeryは存在しません – w35l3y
@ w35l3y私はこれがリンク先だと思います:http://plugins.jquery.com/livequery/ – Marnix