Показать сообщение отдельно
  #1 (permalink)  
Старый 20.06.2010, 09:10
Аватар для TheDeadOne
Новичок на форуме
Отправить личное сообщение для TheDeadOne Посмотреть профиль Найти все сообщения от TheDeadOne
 
Регистрация: 20.06.2010
Сообщений: 5

Манипуляции с DOM в обработчике DOMSubtreeModified
Есть функция, которая выполняет манипуляции с публикациями в блоге, пририсовывая к ним дополнительные элементы управления. Функция успешно работает с теми публикациями, которые отображаются при загрузке страницы, а вот те, которые позже "дорисовываются" ajax'ом, остаются без этих элементов. Чтобы справится с этой бедой, добавил обработчик DOMSubtreeModified. И вот тут-то и столкнулся с проблемой. Обработчик прекрасно отлавливает появление новых публикации, разбирает их на составляющие, но не может ничего к ним добавить. Никаких ошибок не возникает. Либо у меня "замылился глаз" и я упускаю какую-то мелочь, либо чего-то не знаю об обработке этого типа событий.

function addCtrl(target) {
  if(!($(target).hasClass('processed'))) {
    var pid = $(target).attr('id');
    var usrName = $(target).children('.dd').children('.p').children('.js-user_login').html();
    var uid;
    var classList = $(target).attr('class').split(' ');
    for(var classNdx in classList) {
      if(classList[classNdx][0] == 'u')
        uid = classList[classNdx];
    }
        
    $(target).addClass('processed');

    $('<div><a id="ctrl_' + pid + '" href="#">Action1</a> / <a id="ctrl_' + uid + '" href="#">Action2</a></div>')
    .insertAfter($(target).children('div.dd').children('div.p').children('.phpb'));
    $('a#ctrl_' + pid).click(doAction1);
    $('a#ctrl_' + uid).click(doAction2);
  }
}

//Вызов отсюда безуспешный
function parse() {
  $(this).children('div.post').each(function() {
    addCtrl(this);
  });
}

//Вызов отсюда успешный
$('div.post').each(function() {
  addCtrl(this);
});

$('#js-posts_holder').bind('DOMSubtreeModified', parse);
Ответить с цитированием