a を使用しvar
て要素の現在の値を格納し、text
それを a でチェックし、チェック後にsetInverval
を更新しvar
て現在の値を格納しtext
ます。
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
フィドル
.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);
フィドル
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);
フィドル
編集: DOM ミューテーション イベント リスナーを使用した最後の追加は次のとおりです。
$('#chat').on('DOMNodeInserted', function() {
alert("There has been a new message.");
});
Fiddle (IE < 8 ではテストされていません)
注:コメントに記載されているように、ミューテーション イベントは引き続きサポートされていますが、パフォーマンスの低下とさまざまなブラウザー間での非互換性のために、W3C によって非推奨として分類されています。したがって、上記のソリューションのいずれかを使用し、DOM ミューテーションのみを使用することをお勧めします。他に方法がないときのイベント。