В дополнение к «необработанным» инструментам, предоставляемым API MutationObserver
, существуют «удобные» библиотеки для работы с мутациями DOM.
Рассмотрим: MutationObserver представляет каждое изменение DOM в терминах поддеревьев. Так что, если вы, например, ожидаете вставки определенного элемента, он может быть глубоко внутри дочерних элементов mutations.mutation[i].addedNodes[j]
.
Другая проблема заключается в том, что ваш собственный код, реагируя на мутации, меняет DOM - вы часто хотите отфильтровать его.
Хорошей удобной библиотекой, которая решает такие проблемы, является mutation-summary
(заявление об отказе: я не автор, я просто довольный пользователь), которая позволяет вам задавать запросы на интересующие вас вопросы. и получите именно это.
Пример базового использования из документов:
var observer = new MutationSummary({
callback: updateWidgets,
queries: [{
element: '[data-widget]'
}]
});
function updateWidgets(summaries) {
var widgetSummary = summaries[0];
widgetSummary.added.forEach(buildNewWidget);
widgetSummary.removed.forEach(cleanupExistingWidget);
}
Вы правильно: ввод тегов пользователями - это в значительной степени рецепт неприятностей.
Я бы посоветовал использовать специальные плагины для контента, который вы хотите разрешить пользователям добавлять.
Я больше знаком с TinyMCE, но уверен, что там - это широкий спектр плагинов FCKEditor для таких вещей, как YouTube. Например, плагин Youtube для FCKeditor .
Если вы хотите разрешить видео, вам лучше предоставить плагин, чтобы пользователь мог сделать это легко и не переходил в режим просмотра исходного кода. Просмотр исходного кода - это последнее средство, представьте, что его не существует, или даже отключите его.
На самом деле это довольно легко сделать. На своем форуме делал что-то подобное: Как вставить видео . Вот код плагина: fck_postvideo.html и fckplugin.js .
Добавьте его в допустимые теги в fckconfig.js как таковые:
FCKConfig.ProtectedSource.Add (// gi);