2011-02-09 7 views
9

В javascript, возможно, используя jQuery, как я могу определить, изменилось ли содержимое html данного элемента?jQuery: Как определить, изменился ли html в данном элементе?

Я хотел бы быть в состоянии сделать Somthing как:

$('#myDiv').change(function(){ 
    // do some stuff 
}); 

Я в основном пытаются обнаружить, если данные элементы будут добавлены к DIV или внутренней HTML заданных элементов (например, этикетки), а затем скрыть или показать div в зависимости от содержимого.

Любое альтернативное представление о том, как достичь smt, как это, также оценивается.

Я надеюсь, что мне не придется возвращаться к некоторому неясному плагину, чтобы сделать это!

ПРИМЕЧАНИЕ: это должно работать хотя бы в IE8!

+0

+1 для удивительного глазного плаката –

ответ

20

Вы можете использовать событие DOM Level 3 DOMNodeInserted. Пример:

$('#myDiv').bind('DOMNodeInserted', function(e) { 
    console.log('element: ', e.target, ' was inserted); 
}); 

Demo: http://www.jsfiddle.net/vsgdZ/1/

событие будет срабатывать каждый раз, когда новый узел был приложен к элементу, на котором вы связать обработчик.

+0

А как насчет события 'DOMSubtreeModified'? (Поддерживается только браузером Chrome, Firefox и Safari) – Jan

+0

@Jan: Если я правильно понимаю требование OP (обнаружение новых узлов), это событие будет прекрасно. – jAndy

+0

и будет ли это событие гореть, если изменилось имя класса одного из детей? Это также «изменение содержания». Я не говорю, что ваше решение неверно, просто предлагая другое событие, которое может помочь, если ему нужно больше, чем обнаружение вставки новых детей. – Jan