Ваш код выполняется сразу же, и поэтому, конечно, он имеет доступ только к тем элементам, которые уже существуют.Код, добавляющий новые элементы списка, запускается позже, когда пользователь что-то щелкает.Вам также придется подключиться к этому процессу.
Один из способов - подключить одно и то же событие и запустить ваш код из обработчика события.Обязательно подключите событие после , которое они делают.
Их код:
$('button').live('click', function(){
$('ul').append('<li>Added item</li>');
});
Ваш код ( после их):
$('button').live('click', markButtons);
markButtons();
function markButtons() {
$('ul li:not(.marked)')
.addClass("marked")
.append('<b> x</b>');
}
Обновленная скрипта
Причина, по которой я сказал, что ваш код должен выполнить его подключение после , их код состоит в том, что jQuery гарантирует порядок вызовов кобработчики событий: когда событие происходит, обработчики вызываются в том порядке, в котором они были присоединены.Присоединяя ваш обработчик после того, как они прикрепили свой, вы гарантируете, что ваш обработчик будет вызван после того, как их обработчик выполнил свою задачу.
Если вы беспокоитесь по поводу путаницы в порядке, вы всегда можете немного задержать код:
$('button').live('click', function() {
setTimeout(markButtons, 0);
});
Таким образом, ваш код гарантированно будет работать после запуска всех обработчиков событий, подключенных к click
.