Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Разбиение подменю на ul (https://javascript.ru/forum/misc/50633-razbienie-podmenyu-na-ul.html)

qwe88 05.10.2014 13:34

Разбиение подменю на ul
 
Добрый день!
Подскажите, пожалуйста, такую штуку:
Как разделить каждый столбик меню на ul.
Пример:

Главный пункт: Пункт 1
От него идет подменю:
<ul (первый столбик)>
<li><a href="/">Подпункт 1</li>
<li><a href="/">Подпункт 2</li>
<li><a href="/">Подпункт 3</li>
</ul>
<ul (второй столбик)>
<li><a href="/">Подпункт 4</li>
<li><a href="/">Подпункт 5</li>
<li><a href="/">Подпункт 6</li>
</ul>
И т.д.

Как мне сделать так, что бы каждые три пункта закрывались в ul автоматически?

danik.js 05.10.2014 14:52

Цитата:

Сообщение от qwe88
автоматически

А вручную - слишком трудно?

petya 05.10.2014 15:23

str='\
<li><a href="/">Item 1</li> \
<li><a href="/">Item 2</li> \
<li><a href="/">Item 3</li> \
<li><a href="/">Item 4</li> \
<li><a href="/">Item 5</li> \
<li><a href="/">Item 6</li> \
'

re=/<(li)>(.*?)\1>/gi

arr=str.match(re)
counter=0
for(i=0; i<=arr.length; i++){
if((counter++)===3){
arr.splice(i, 0, "</ul><ul>")
counter=0
}
}
str="<ul>"+arr.join("")
str=str.replace(/.{4}$/, "")
alert(str)

danik.js 05.10.2014 16:49

Если html генерится в php, то через array_chunk очень просто сделать

<?
// допустим в $items у нас все пункты приходят
$chunks = array_chunk($items, 3);

$foreach ($chunks as $chunk) { ?>
    <ul>
    <? foreach ($chunk as $item) { ?>
        <li><?= $item->text ?></li>
    <? } ?>
    </ul>
<? }

petya 05.10.2014 17:25

danik.js,
Ага, а если html генерится на паскале, то через pascal_huy еще легче сделать. Ну это ладно, ты скажи, нахрена загружать сервак? Ты учти еще, что все это сказывается на ожидании ответа другими клиентами. Чем больше ты вычисляешь, тем дольше они курят бамбук. А в случае однопоточного языка, ты вообще заблокируешь все запросы.

danik.js 05.10.2014 17:32

petya жизнь тебя сильно обидела, если ты не слышал про кэширование. Впрочем и без него, сколько ms займет вызов array_chunk и итерация по результату?

petya 05.10.2014 17:43

danik.js,
Цитата:

Сообщение от danik.js
Впрочем и без него, сколько ms займет вызов array_chunk и итерация по результату?

Это зависит от того, сколько клиентов будут ждать. И на скольких страницах подобная обработка. Умножь результат на сумму ожидающих. Если у тебя многопоточный сервер, его работа замедлится пропорционально числу запросов, а если нет,возможно последний клиент будет ждать неделю.

danik.js 05.10.2014 18:00

То есть ты уверен, что этот самый вызов array_chunk - будет самым тормозным в скрипте, генерирующем html, верно? И что на высоконагруженных сайтах кэш никогда не используют, чтобы снизить нагрузку, верно?

danik.js 05.10.2014 18:04

Ок, все вопросы снимаю. Посмотрел твой профиль и понял что передо мной гуру программирования )))

petya 05.10.2014 18:06

danik.js,
Хватит бестолковится. Кеш не серебрянная пуля, что-то можно закешировать, что-то нет. Кеширование само по себе отжирает ресурсы. Насчет остального, я вижу, ты ни хрена не понял. Хинт: количество запросов в единицу времени.

Да и, безотносительно всей этой воды, аксиома: то что можно вынести на клиент, НИКОГДА не следует вычислять на сервере.


Часовой пояс GMT +3, время: 11:22.