2012-11-03 3 views
1

Итак, в принципе у меня есть плагин, который я хочу вызвать в элементе, если он создан в dom,часы для создания элемента dom?

Например. допустим, у меня есть плагин с именем domWatch, который запускает функцию, если указанный селектор создается внутри селектора, на который он был вызван.

так:

$('#container').domWatch('.mySelector', function(element){ 
    $(element).myPlugin(); 
}); 

$('#container').append($('<div />', {class: 'mySelector'})); //the new element should now have the myPlugin plugin called on it. 

Возможно ли это сделать?

+0

LiveQuery - это способ сделать это, но если вы можете запускать событие вручную каждый раз, когда вы добавляете что-то в дом, это может иметь лучшую производительность. – SoonDead

+0

Вы можете проверить что-то, называемое [События мутации] (https://developer.mozilla.org/en-US/docs/DOM/Mutation_events) или лучше [Наблюдатели мутаций] (https://developer.mozilla.org/en- США/документы/DOM/MutationObserver? redirectlocale = EN-US & redirectslug = DOM% 2FDOM_Mutation_Observers). Однако он еще не реализован во всех основных браузерах. – dreame4

ответ

3

Посмотрите на этот умный хак: http://www.backalleycoder.com/2012/04/25/i-want-a-damnodeinserted/. Он использует анимацию CSS3 для определения того, когда элемент был вставлен в DOM.

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

Я уверен, что существует много способов упрощения вашей цели.

+1

Это очень круто. – Holf

+1

Внимание! События мутации устарели, вместо этого используйте Mutation Observer. –

1

Похож на Live Query. Хотя это связано с непрерывным опросом, который имеет успех.

Несколько demos.

0

Это похоже на работу для delegated form of the .on() event:

делегированного события имеет то преимущество, что они могут обрабатывать событие от узлов, которые добавляются к документу в более позднее время , Выбрав элемент, который, как гарантируется, будет присутствовать во время присоединения делегированного обработчика событий , вы можете использовать делегированные события для , чтобы избежать необходимости часто прикреплять и удалять обработчики событий. Этот элемент может быть элементом контейнера представления в дизайне модели Model-View-Controller, например, или document, если обработчик события хочет контролировать все события пузырьков в документе. Элемент document доступен в начале документа до , загружая любой другой HTML-код, поэтому безопасно присоединять события там без , ожидая готовности документа.

5

Вы можете использовать библиотеку arrive.js, которые я разработал для этой же цели (внутренний Mutation Observers). Использование:

$('#container').arrive('.mySelector', function(){ 
    $(this).myPlugin(); 
}); 
Смежные вопросы