Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Cookie для меню аккордион и для div (https://javascript.ru/forum/jquery/43356-cookie-dlya-menyu-akkordion-i-dlya-div.html)

Lastedl 02.12.2013 16:34

Cookie для меню аккордион и для div
 
Вложений: 1
Хотел сделать Cookie для меню и для запоминая div который открыт. На одном форуме нашел пример с применением сookie к меню, но переделать под свое меню не выходит.
Меню в html
<ul class="accordion"> <!--Блок всего меню-->
 
     <li id="one" class="files"> <!--Блок раздела-->
         <a href="#one">Мои файлы<span>10</span></a> <!--Ссылка блока раздела-->
         <ul class="sub-menu"> <!--Блок подменю раздела-->
             <li><a href="#"><em>01</em>Файл<span>1</span></a></li> <!--Ссылки подменю-->
         </ul>
     </li>
 
     <li id="two" class="mail">
         <a href="#two">Мои картинки<span>20</span></a>
         <ul class="sub-menu">
             <li><a href="#"><em>01</em>Альбом<span>2</span></a></li>
         </ul>
     </li>
 
     <li id="three" class="cloud">
         <a href="#three">Сфера<span>30</span></a>
         <ul class="sub-menu">
             <li><a href="#"><em>01</em>Файлы сферы<span>3</span></a></li>
         </ul>
     </li>
 
     <li id="four" class="sign">
         <a href="#four">Вход</a>
         <ul class="sub-menu">
             <li><a href="#"><em>01</em>Войти на сайт</a></li>
         </ul>
     </li>
 
 </ul>


Скрипт для cookie
<script type="text/javascript">
 $(document).ready(function(){
if($.cookie("num_open_ul")) { // если в куках есть число 
        if($.cookie("num_open_ul")!=0) { // и это число не равно нулю - значит какой-то список открыт
           var number_eq=$.cookie("num_open_ul")-1; // уменьшаем порядковый номер на 1 так как eq   идёт с нуля
            $("ul.accordion ul").eq(number_eq).show(); // открываем соответствующий список
        }   
    };
//Определяем по нажатию на какой элемент должны открыватся подменю
$("ul.accordion  li ").click(function(){
            if(!$(this).next().is(':visible')) { // если кликнутый блок не раскрыт ( не виден список после него )
                        $('ul.accordion ul').slideUp(380);// сварачиваем все списки
                }
               $(this).next().slideToggle(280); // в любом случае переключаем (если открыт закрываем и наоборот) список после кликнутого блока
                        setTimeout(fncookie, 100);//задержка записи кук
                });
//запись в куки номера открытого меню 
function fncookie(){
var number_open_ul=0; // если ноль - то ни один не открыт
 
var i=0; // переменная- счётчик всех списков ul в меню 
$("ul.accordion ul").each(function(){
    i++;// порядковый номер просматриваемого списка увеличиваем на 1
    if($(this).is(':visible')){ // если блок виден то его порядковый номер заносим в специальную переменную
        number_open_ul=i;
    }
$.cookie("num_open_ul",number_open_ul);// записываем в куки номер открытого списка
        
});
}// end fncookie
 
});/*end  ready*/

Теперь про div, у меня на странице есть вложенные div, которые поочередно открываются и закрываются , но при обновлении страницы открытым остается только первый div, как с помощью cookie сделать чтобы запоминалось какой блок был открыт?
Скрипт для div:
<script type="text/javascript">
    function displ(b) {
        for (var a = 1; a < 3; a++) document.getElementById("d" + a).style.display = "none";
        document.getElementById("d" + b).style.display = "block"
    };
    </script>

Код html для div:
<a href="javascript: displ('1')">1 </a> | <a href="javascript: displ('2')">2 </a> 
 
 
    <div id="d1" style="display: block;">
     <p > 1</p>
    </div>
    <div id="d2" style="display: none;" >
<p>2</p>
</div>

Пример меню

Deff 03.12.2013 02:55

Lastedl,
http://habrahabr.ru/post/169265/#first_unread

Собственно ток стиль поправить


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