edit: изменение вызова .ready () в соответствии с предложением Мэтта.
Я использую jQuery для настройки чего-то вроде этого:
$(function ()
{
$('.myThing').each(function() {
... configure it ...
});
});
Моя проблема в том, когда новый элемент добавляется вDOM после .ready () был вызван.Конфигурация не выполняется для этих элементов.
Для простых вещей, таких как привязка события щелчка, .live () выполняет свою работу.Но для более сложных вещей я не нашел хорошего решения.
Есть ли событие для изменения DOM?Или, в частности, когда новые элементы добавляются в DOM?
Отредактировано: пробное решение с использованием livequery выглядит так:
$(function ()
{
$.fn.configureIt = function()
{
... configure it ...
}
});
$('.myThing').livequery(function () {
$(this).configureIt ()
});
Повторно отредактировано: livequery получилось небыть решением.Он часто ищет в DOM добавленные или удаленные элементы.На достаточно быстром компьютере с умеренной страницей это нормально.На медленном компьютере, с очень большой страницей, несколькими livequeries и IE6, она имеет задержку в полсекунды каждые несколько секунд и более длительную задержку при загрузке страницы.
Мы пришли к выводу, что создание общего «общего поведения» удовлетворяетнаша лень.Поскольку в нашей команде есть несколько умеренных специалистов по JavaScript, а также некоторые почти не имеющие JavaScript и не имеющие гуру JavaScript, мы хотели определить соглашения для разметки HTML, а не касаться этого поведения на каждой новой странице.Это оказалось невозможным, учитывая наши знания JavaScript в то время.
Решение, которое мы придумали, состояло в том, что всякий раз, когда мы меняем DOM с помощью AJAX или динамического создания контента, мы бы происходили:
$('.stuff').load(loadUrl, postData, function() {
$(this).trigger('contentLoaded');
// among other stuff
});
И затем, для любого типа виджетов, мы полагаемся на это соглашение.
$('*').live('contentLoaded', function() {
$('.myThing', this).configureIt();
});
Это не идеально.Отдельные производители страниц должны знать об условии запуска настраиваемого события, когда они делают что-то на своей странице (по общему признанию, инкапсулированы в некоторые общие служебные функции), и создатели виджетов должны полагаться на создателей страниц, использующих это соглашение, но в конце концов это не такЭто большая проблема, поскольку мы работаем в закрытой команде и не публикуем наши приложения извне.