If I understand your requirement correctly, one way to do this is with the Live Query plug-in.
Live Query ... has the ability to fire
a function (callback) when it matches
a new element and another function
(callback) for when an element is no
longer matched
For example:
$('#someRegion a').livequery( function(){
do_something();
});
Update: Since the DOM changes are not running through jQuery, unfortunately livequery doesn't see them. I mulled over this issue before and considered a polling-based solution in
this answer.
Update: Polling is kind of ugly, but if there's really no other alternative, here's a polling-based solution that uses a jQuery "dummy" manipulation to make livequery "see" the change. You'd only want to consider something like this as a last resort -- if there's no option to tie into a callback method.
First, set up livequery watching the container where the updates will occur:
$('div#container').livequery( function(){
$(this).css('color','red'); // do something
});
And then use setInterval()
, here wrapped in a convenience function:
function pollUpdate( $el, freq ){
setInterval( function(){
$el.toggleClass('dummy');
}, freq);
};
So you can have:
$(document).ready( function(){
pollUpdate( $('div#container'), 500 );
});
Here's a working example. Click the button to add new DOM elements without jQuery, and you'll see they get picked up (eventually) and restyled by livequery. Not pretty, but it does work.