Sha*_*313 12 javascript jquery detect setinterval
现在我试图找到一种方法来检测元素HTML何时发生了变化.
我正在尝试:
var a, b;
setInterval(function() {
a = $('#chat').text();
}, 150);
setInterval(function() {
b = $('#chat').text();
if (a !== b) {
alert("There has been a new message.");
}
}, 200);?
Run Code Online (Sandbox Code Playgroud)
我做的是每隔150毫秒我检查一次#chat的HTML然后每隔200秒我再次检查HTML,然后检查变量a是否等于变量b它们将来我会这样做但是现在我只是提醒一些事情
你可以在这里看到它:http://jsfiddle.net/MT47W/
显然这种方式不起作用,根本不是很准确.有没有更好的/不同的做/实现这个?
感谢您的帮助,我一直在努力弄清楚如何做到这一点好一周,但我找不到解决方案,我希望我把这个问题发布在正确的地方,并且在合适的时间.
使用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
Run Code Online (Sandbox Code Playgroud)
您也可以将值存储 .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);
Run Code Online (Sandbox Code Playgroud)
另一种方法,以节省客户端的内存,你可以保存孩子的数量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);
Run Code Online (Sandbox Code Playgroud)
$('#chat').on('DOMNodeInserted', function() {
alert("There has been a new message.");
});
Run Code Online (Sandbox Code Playgroud)
小提琴(未在IE中测试<8)
注意:如评论中所述,即使仍然支持突变事件,由于性能损失和不同浏览器之间的某些不兼容性,它们被W3C归类为弃用,因此建议使用上述解决方案之一并仅使用DOM Mutation没有其他方法的事件.
| 归档时间: |
|
| 查看次数: |
1734 次 |
| 最近记录: |