Ответ 1
Если вы создаете веб-приложение, предназначенное для последних мобильных телефонов и более новых версий браузеров (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 в последних браузерах отлично подходят для мониторинга простых вставок и изменений в DOM, поймите, что этот метод можно использовать, чтобы сделать гораздо больше, поскольку он позволяет вам следить за любым совпадением правил CSS, которое вы можете использовать. Это очень мощно для многих случаев использования, поэтому я завернул это в библиотеку здесь: https://github.com/csuwildcat/SelectorListener
Вам нужно будет добавить соответствующие префиксы к имени события CSS и animationstart, если вы хотите настроить таргетинг на различные браузеры. Вы можете прочитать больше об этом в сообщении, связанном с выше.
Основной node вставной футляр
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);
Прослушивание более сложных селекторных совпадений:
Это позволяет сделать вещи, которые почти невозможно сделать с наблюдателями мутаций
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);