Если вы создаете веб-приложение, предназначенное для последних мобильных телефонов и новых версий браузеров (Firefox 5+, Chrome 4+, Safari 4+, iOS Safari 3+, Android 2.1+), вы можете использовать следующий код для создайте классное событие для вставки dom-узлов, и оно даже запускается на узлах, изначально являющихся частью статической разметки страницы!
Вот ссылка на полный пост с примером: http://www.backalleycoder.com/2012/04/25/i-want-a-damnodeinserted/
Примечание по Mutation Observers: в то время как новые функции Mutation Observers в недавних браузерах отлично подходят для мониторинга простых вставок и изменений в DOM, имейте в виду, что этот метод можно использовать для гораздо большего, поскольку он позволяет Вы должны отслеживать любое совпадение с правилом CSS . Это очень мощный для многих вариантов использования, поэтому я обернул это в библиотеке здесь: https://github.com/csuwildcat/SelectorListener
Вам нужно будет добавить соответствующие префиксы к имени события CSS и animationstart, если вы хотите настроить таргетинг на различные браузеры. Вы можете прочитать больше об этом в сообщении, связанном с выше.
Базовый узел вставки
CSS
@keyframes nodeInserted {
from {
outline-color: #fff;
}
to {
outline-color: #000;
}
}
div.some-control {
animation-duration: 0.01s;
animation-name: nodeInserted;
}
JavaScript
document.addEventListener('animationstart', function(event){
if (event.animationName == 'nodeInserted'){
// Do something here
}
}, true);
Прослушивание более сложных селекторных совпадений:
Это позволяет делать вещи, которые практически невозможно сделать с помощью Mutation Observers
CSS
@keyframes adjacentFocusSequence {
from {
outline-color: #fff;
}
to {
outline-color: #000;
}
}
.one + .two + .three:focus {
animation-duration: 0.01s;
animation-name: adjacentFocusSequence;
}
JavaScript
document.addEventListener('animationstart', function(event){
if (event.animationName == 'adjacentFocusSequence'){
// Do something here when '.one + .two + .three' are
// adjacent siblings AND node '.three' is focused
}
}, true);