Javascript - эмуляция document.ready () для объекта HTML - PullRequest
0 голосов
/ 27 сентября 2011

У меня есть основной сайт A, на который я загружаю контент с помощью AJAX с подузла B. Есть файл jQuery, который изменяет элементы на сайте A (добавляет к ним события, классы, повторно отображает их при необходимости и т. Д.)который запускается на document.ready ()

Теперь мне нужно загрузить контент с сайта B на сайт A. Я делаю это с помощью функции:

$.get("/some/url/",{},function(e){
    $(".some_div").html(e);
});

Проблема в том,При включении jQuery на сайт B происходит следующее: jQuery загружает контент, помещает его на сайт A и затем запускает все скрипты, которые были извлечены на нем.Что вызывает повторную визуализацию сайта и много беспорядка.

Что мне нужно сделать, это эмулировать document.ready () для объекта HTML e сразу после того, как он был удален с сайта B, но до того, как он был добавлен на сайт A (так что я буду повторно отображать HTML-код со всеми событиями, классами и слушателями, готовыми).

Ответы [ 2 ]

0 голосов
/ 29 сентября 2011

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

В jQuery 1.4 появился метод .live () .Проблема в том, что он работает только при непосредственном взаимодействии пользователя с пользовательским интерфейсом (т. Е. С методами click (), hover () и т. Д.).Он не будет работать с такими методами, как .each (), и не будет работать с методами, которые представлены сторонними плагинами (такими как .accordion (), .tabs (), .datatable () и т. Д.)

Право, когда я решил самостоятельно расширить метод .live (), я обнаружил замечательную библиотеку livequery . Документация к ней действительно хороша, поэтому у вас не должно быть никаких проблем с выяснением, как она работает.моя проблема и, следовательно, дело закрыто.

(разместив его здесь, чтобы, если кто-то наткнется на подобную проблему, он найдет ответ)

0 голосов
/ 27 сентября 2011

Разве вы не можете просто поместить свой код в функцию и запустить свои вещи перед вызовом:

$(".some_div").html(e);

Чуть выше этой строки все html из b готов, но не загружен или не запущен.Или вы имеете в виду, что вы хотите поместить в HTML, а не сценарии?Просто используйте функцию jquery для удаления тегов скрипта (do e.find('script').appendTo(new_div);).

Или добавьте некоторый код в b.Сделайте функцию с именем init() в b, которая вызывает все.Все остальное в функциях и ничего не работает.Когда вы будете готовы позвонить init().

...