Добрый день!
В XUL  есть такая замечательная вещь как вещатели и наблюдатели. 
В двух словах - один (или несколько) тегов налюдает(ют) за изменением атрибутов другого (других) тегов.
Подробнее на русском:
http://www.intuit.ru/department/se/mozilla/6/4.html
Очень удобная вещь. Позволяет отказаться от навешивания событий на элементы. 
Но есть один недостаток. 
Эта штука работает только при изменении атрибутов элементов (тегов). Н.п.: element.setAttribute('color', 'red').
При изменении свойств элемента н.п.: 
element.childNodes.length  ( в случае добавления дочернего элемента)
эта штука не работает. 
В идеале хотелось бы иметь следующую возможность.
Создать такой javascript- объект наблюдатель, которому при создании  передаются ссылки на наблюдаемые js или DOM объекты (их свойства) - вещатели и, функцию  - обработчик, которая бы срабатывала каждый раз, когда происходит какое либо изменение в наблюдаемом объекте (со свойствами объекта ). 
пример:
/** Массив из свойств наблюдаемых объектов - */
var node = document.getElementById('main');
var ao = [ node.childNodes, node.style.color];
/** Функция - обработчик */
var hnd = function (el, prop, old_value, new_value){ 
	var msg = "";
	if (prop=='childNodes'){
		if (prop.length == 10){
			msg = "Число дочерних узлов достигло 10!";
			node.setAttribute('color', 'red'); 
			clearInterval(it);
		}	
		alert(msg);   
	};
	if (prop=='color'){
		msg = "Цвет элемента изменился со значения "
		+ old_value +" на " +new_value; 		
		alert(msg);   
	};
};
/** Создание обозревателя */
var obs = new Observer(ao, hnd);
/** Функция для проверки */
var f = function(){
	var span = document.createElement('span')
	node.appendChild(span); 
} 
 
var it = setInterval(f, 1000);