setInverval
で、それに対してチェックし、確認した後、現在のtext
を保存するためにvar
を更新し、その要素の現在のtext
を保存するためにvar
を使用します。
var a = $('#chat').text();
setInterval(function() {
if (a !== $('#chat').text()) { //checks the stored text against the current
alert("There has been a new message."); //do your stuff
}
a = $('#chat').text(); //updates the global var to store the current text
}, 150); //define your interval time, every 0.15 seconds in this case
Fiddle
あなたが同様に格納することができます。グローバルの使用を避けるために要素の.data()
の値。
例.data()
使用:
:
$('#chat').data('curr_text', $('#chat').text());
setInterval(function() {
if ($('#chat').data('curr_text') !== $('#chat').text()) {
alert("There has been a new message.");
}
$('#chat').data('curr_text', $('#chat').text());
}, 150);
Fiddle
別のアプローチは、あなただけのdiv
があなたの#chat
要素を持っているの子の数を格納することができ、クライアントのメモリを節約するために
$('#chat').data('n_msgs', $('#chat').children().length);
setInterval(function() {
if ($('#chat').data('n_msgs') !== $('#chat').children().length) {
alert("There has been a new message.");
}
$('#chat').data('n_msgs', $('#chat').children().length);
}, 150);
Fiddle
EDIT:はここ
DOM mutation event listenerで、私の非常に最後の添加です:
$('#chat').on('DOMNodeInserted', function() {
alert("There has been a new message.");
});
Fiddle(IE < 8でテストされていない)
注:で述べたようにたとえ突然変異イベントがまだサポートされているとしても、コメントはdeprecated by W3Cとして分類されますフォームの損失といくつかの異なるブラウザ間での非互換性があるため、上記のソリューションの1つを使用し、別の方法がない場合にのみDOM Mutationイベントを使用することをお勧めします。
私は間違っているかもしれませんが、私はDOMイベントを聞いてもそれほどうまくサポートされておらず、最新の仕様から完全に削除されています。 – zatatatata
@VahurRoosimaa、私は間違っているかもしれませんが、jQueryは主にイベントの委任をリスニングするDOMイベントで動作し、最近は回答で広く使用されています。現在、互換性の問題が発生した場合は、古いリビジョンも動作します。 =]またはDOM変異イベントを具体的に意味しましたか? –
すごく感謝しています。私はこれまで聞いたことがありません:DOMNodeInsertedとそれがうまくサポートされているかどうかわからないのでVahurは言ったので、私は使い方がうまくいかないと思います。しかし、これらすべての方法に感謝します。しかし、私はちょうど#chatで子供の長さを取得するというデータを使うことも考えました。私は毎日何か新しいことを学びます! :) – Shawn31313