Right now im trying to find a way to detect when an elements HTML has changed.
I’m currently trying:
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);
What I do is every 150 milliseconds I check for the HTML of #chat and then every 200 seconds I check the HTML again and then check if variable a does not equal to variable b them in the future I will so something with that but for right now I just alert something.
You can see it live here: http://jsfiddle.net/MT47W/
Obviously this way is not working and is not very accurate at all.
Is there a better/different to do/achieve this?
Thanks for any help, I’ve been trying to figure out how to do this a better for about a week now but I just can’t find a fix for this and i’m hoping I posted this problem at the right place, and at the right time.
Use a
varto store the element’s currenttextthen check against it in asetInvervaland update thevarto store the currenttextafter checking:Fiddle
You may as well store the value in the
.data()of the element to avoid using globals.Example using
.data():Fiddle
Another approach, to save client’s memory, you can just store the number of child
divs your#chatelement has:Fiddle
EDIT: Here’s my very final addition, with a DOM mutation event listener:
Fiddle (not tested in IE < 8)
Note: As noted in the comments, even though mutation events are still supported they’re classed as deprecated by W3C due to the performance loss and some incompatibilities across different browsers, therefore it’s suggested to use one of the solutions above and only use DOM Mutation events when there’s no other way around.