使用 avar
存储元素的当前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);
小提琴
另一种方法,为了节省客户的内存,您可以只存储元素的 childdiv
的数量:#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.");
});
小提琴(未在 IE < 8 中测试)
注意:如评论中所述,尽管突变事件仍受支持,但由于性能损失和不同浏览器之间的一些不兼容,它们被W3C 归类为已弃用,因此建议使用上述解决方案之一,仅使用 DOM Mutation没有其他办法时的事件。