jQuery: я могу автоматически применить плагин к динамически добавленному элементу? - PullRequest
3 голосов
/ 06 декабря 2010

Я в процессе преобразования моего веб-приложения в полностью AJAX-архитектуру.

У меня есть главная страница, которая изначально загружена, и контейнер div, который загружается с динамическим контентом.

Я создал несколько плагинов jQuery, которые я применяю к определенным элементам для расширения их функциональности.Обычно я вызываю функции следующим образом при каждой загрузке страницы:

$(document).ready(function () {

    // Enable fancy AJAX search
    $(".entity-search-table").EntitySearch();

});

Это найдет соответствующий div (и) и вызовет плагин для включения необходимой функциональности.

ВСреда AJAX Я не могу просто применить плагин во время загрузки страницы, так как элементы будут добавляться и удаляться динамически.

Я хотел бы сделать что-то вроде этого:

$(document).ready(function () {

    // Enable fancy AJAX search
    $(".entity-search-table").live("load", function () {
        $(this).EntitySearch();
    });

});

Вопрос: Можно ли каким-либо образом вызвать событие, когда в DOM добавляется <div> или другой элемент, соответствующий селектору?

Кажется невероятно расточительным активировать плагинкаждый раз, когда AJAX-запрос завершается.Подключаемый модуль необходимо применять к элементу только один раз, когда он впервые добавляется в DOM.

Спасибо за любую помощь!

Ответы [ 4 ]

4 голосов
/ 06 декабря 2010

Да - взгляните на liveQuery .Пример:

$('.entity-search-table').livequery(function(){ 
    $(this).EntitySearch(); 
});
1 голос
/ 06 декабря 2010

Кажется невероятно расточительным активировать плагин каждый раз, когда выполняется запрос AJAX.Подключаемый модуль необходимо применять к элементу только один раз, когда он впервые добавляется в DOM.

Здесь вы можете получить лучшее из обоих миров, например:

$("#something").load("url", function() {
  $(".entity-search-table", this).EntitySearch();
});

Таким образом, он применяет плагин только к .entity-search-table элементам, которые вы просто загрузили, поскольку мы указали контекст для $(selector, context) для его ограничения.

0 голосов
/ 06 декабря 2010

MutationEvent DOM 2 - это то, что вам действительно нужно, но, к сожалению, оно не поддерживается IE. Вам нужно будет либо использовать live() / delegate() привязку в плагине, либо (как я делал, когда мне пришлось обойти это) использовать обратные вызовы от вашего Загрузчики AJAX с указанием объема изменений.

0 голосов
/ 06 декабря 2010

Используйте прямую привязку в коде вашего плагина

</p> <pre><code>jQuery.fn.EntitySearch = function() { this.live(..., function(){ your plugin code }); return this; }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...