find('ul.level2') as $ul) { // get parent li $li = $ul->parent(); // get columns $columns = (int) $li->attr('data-menu-columns'); if ($columns > 1) { $i = 0; $column = -1; $children = $ul->children('li'); if ($children->length > $columns) { $remainder = $children->length % $columns; $colrows = ($children->length - $remainder) / $columns; } else { $remainder = 0; $colrows = 1; } foreach ($children as $child) { if ($i-- == 0) { $i = $remainder-- > 0 ? $colrows : $colrows - 1; $column++; } if ($li->children('ul')->length == $column) { $li->append(''); } if ($column > 0) { $li->children('ul')->item($column)->append($child); } } $columns = $column + 1; } else { $columns = 1; } // get width $width = (int) $li->attr('data-menu-columnwidth'); $style = $width > 0 ? sprintf(' style="width:%spx;"', $columns * $width) : null; // append dropdown divs $li->append(sprintf('', $columns, $style)); $div = $li->first('div.dropdown div.dropdown-bg div:first'); foreach ($li->children('ul') as $i => $u) { $div->append(sprintf('
', floor(100 / $columns)))->children('div')->item($i)->append($u); } } return $element; } }