Еще одна вещь, которая должна помочь, - это исключить избыточные вызовы jquery, сохранив результирующий объект в переменной.Например, измените это:
$('ul#mainnav li ul li').each(function() {
// add level class
$(this).addClass('depth-'+$(this).parents('ul').length);
// make uls siblings in stead of children
$($(this).children('ul')).insertAfter($(this));
});
на следующее:
$('ul#mainnav li ul li').each(function() {
var $this = $(this);
// add level class
$this.addClass('depth-'+$this.parents('ul').length);
// make uls siblings in stead of children
$($this.children('ul')).insertAfter($this);
});
Обратите внимание на соглашение о начале имени переменной с $, когда оно ссылается на объект jquery.
* 1008Кроме того, я не уверен, но я думаю, что есть более прямой способ добавить список детей, который может упростить последнюю строку кода выше.Может быть, что-то вроде $ this.children ('ul'). Append?
Как говорят другие ответы, только один раз измените live dom.Другой способ сделать это - клонировать всю структуру, над которой вы работаете, манипулировать клоном, а затем заменить оригинал клоном.Как бы вы это ни делали, ключ заключается в том, чтобы браузер не пытался отображать каждое изменение по мере его внесения.