Вам нужно получить только прямых потомков $li
вместо $li.find(':checkbox')
, которые бы возвращали всех потомков. Тогда вы можете отфильтровать те, у кого нет ul
братьев и сестер.
, например
$li.find('> ul > li > :checkbox').filter(function(){
return $(this).siblings('ul').length === 0;
}).prop('checked', this.checked);
Вероятно, неплохо бы закрыть ваши теги li
. Довольно сложно понять вашу HTML
структуру как есть.