Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 10.12.2015, 11:00
Аспирант
Отправить личное сообщение для serrrgggeee Посмотреть профиль Найти все сообщения от serrrgggeee
 
Регистрация: 15.08.2014
Сообщений: 46

сохранение действий после перезагрузки
Здравствуйте у меня имеется меню с крестиками при нажатии ветка раскрывается, меню многоуровневое, но вот не могу придумать как лучше сделать чтобы при переходе на ссылку все ветки которые были открыты так же и оставались открытыми, можно конечно сделать открытую ветку которая активная, но это не решит всю задачу.
Ответить с цитированием
  #2 (permalink)  
Старый 10.12.2015, 11:55
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

serrrgggeee, сделать весь сайт динамическим, например.
Ответить с цитированием
  #3 (permalink)  
Старый 10.12.2015, 12:00
Аспирант
Отправить личное сообщение для serrrgggeee Посмотреть профиль Найти все сообщения от serrrgggeee
 
Регистрация: 15.08.2014
Сообщений: 46

нет это не выход, нужно сделать что бы это работало не с динамическим сайтом
Ответить с цитированием
  #4 (permalink)  
Старый 10.12.2015, 12:02
Интересующийся
Отправить личное сообщение для Prorab337 Посмотреть профиль Найти все сообщения от Prorab337
 
Регистрация: 19.05.2015
Сообщений: 18

куки или сессия в помощь
Ответить с цитированием
  #5 (permalink)  
Старый 10.12.2015, 12:16
Аспирант
Отправить личное сообщение для serrrgggeee Посмотреть профиль Найти все сообщения от serrrgggeee
 
Регистрация: 15.08.2014
Сообщений: 46

реализованно все через display:none при нажатии элемент становится видимым и что тогда заносить в куку
Ответить с цитированием
  #6 (permalink)  
Старый 10.12.2015, 12:20
Интересующийся
Отправить личное сообщение для Prorab337 Посмотреть профиль Найти все сообщения от Prorab337
 
Регистрация: 19.05.2015
Сообщений: 18

То и заносить, какой элемент виден тот и заносить. При выводе html проверять и снимать display:none
Ответить с цитированием
  #7 (permalink)  
Старый 10.12.2015, 12:24
Аспирант
Отправить личное сообщение для serrrgggeee Посмотреть профиль Найти все сообщения от serrrgggeee
 
Регистрация: 15.08.2014
Сообщений: 46

это я должен как я понимаю построить массив занести туда элементы и их свойства, а потом при перезугрузке сделать обратное?
Ответить с цитированием
  #8 (permalink)  
Старый 10.12.2015, 13:20
Интересующийся
Отправить личное сообщение для Prorab337 Посмотреть профиль Найти все сообщения от Prorab337
 
Регистрация: 19.05.2015
Сообщений: 18

Да, как вариант. Ну заносить можно только что видимое. А при выводе делать проверку на наличие в массиве
Ответить с цитированием
  #9 (permalink)  
Старый 15.12.2015, 09:02
Аспирант
Отправить личное сообщение для serrrgggeee Посмотреть профиль Найти все сообщения от serrrgggeee
 
Регистрация: 15.08.2014
Сообщений: 46

Вот что у меня получилось
<ul class=" ul-tree ul-drop" id="multi-derevo">
    <li>
        <p><a href="/ru/">Домой</a></p>
        <ul>
             <li>
                 <p><a href="/ru/d1/">д1</a></p>
                 <ul>
                     <li>
                         <p><a href="/ru/d1/d2/"><span>д2</span></a></p>
                     </li>
                 </ul>
             </li>
        </ul>
    </li>
    <li>
       <p><a href="/ru/page/">page</a></p>
        <ul>
            <li>
                <p><a href="/ru/page/p1/">p1</a></p>
                <ul>
                    <li>
                        <p><a href="/ru/page/p1/p2/">p2</a></p>
                        <ul>
                            <li>
                                <p><a href="/ru/page/p1/p2/p3/"><span>p3</span></a></p>
                            </li>
                        </ul>
                    </li>
                </ul>
            </li>
        </ul>
    </li>
    <li>
        <p><a href="/ru/new/">new</a></p>
        <ul>
            <li>
                <p><a href="/ru/new/n1/">n1</a></p>
                <ul>
                    <li>
                        <p><a href="/ru/new/n1/n2/">n2</a></p>
                        <ul>
                            <li>
                                <p><a href="/ru/new/n1/n2/n3/">n3</a></p>
                                <ul>
                                    <li>
                                        <p><a href="/ru/new/n1/n2/n3/n4/">n4</a></p>
                                        <ul>
                                            <li>
                                                <p><a href="/ru/new/n1/n2/n3/n4/n5/"><span>n5</span></a></p>    
                                            </li>
                                        </ul>
                                    </li>
                                </ul>
                            </li>
                        </ul>
                    </li>
                </ul>
            </li>
        </ul>
    </li>
</ul>

ul.ul-tree {
    padding-left: 2em;
    padding-bottom: 12px;
}
ul.ul-tree li {
    position: relative;
    list-style: none outside none;
    border-left: 1px solid rgba(0,0,0,.5);
    margin: 0;
    line-height: 24px;
}

ul.ul-tree li {
    position: relative;
    list-style: none outside none;
    border-left: 1px solid rgba(0,0,0,.5);
    margin: 0;
    line-height: 24px;
}
ul.ul-tree p {
    position: relative;
    top: 12px;
    margin: 0 0 0 2.5em;
    padding: 0 0;
}
ul.ul-tree ul {
    margin: 0;
    padding-left: 17px;
}
ul.ul-drop div.drop {
    width: 11px;
    height: 11px;
    position: absolute;
    z-index: 10;
    top: 19px;
    left: 12px;
    background-image: url('/media/menu/plus.png');
    background-position: -11px 0;
    background-repeat: no-repeat;
    cursor: pointer;
}

ul.ul-tree p:before {
    content: '';
    display: block;
    border-bottom: 1px solid rgba(0,0,0,.5);
    position: absolute;
    width: 2.5em;
    height: 24px;
    left: -2.5em;
    top: -12px;
}


ul.ul-tree.ul-drop li ul{
    display: none;
}


ul.ul-tree li:last-child{border-left:0 none}
ul.ul-tree li:last-child > p:before{border-left:solid 1px rgba(0,0,0,.5)}





  /* Дерево многоуровневое
   -------------------------------- */
   #multi-derevo {
      width: 220px; /* блок под дерево */
      border: solid; /* границы блока */
      border-color: silver gray gray silver;
      border-width: 2px;
      padding: 0 0 1em 0;  /* нижний отступ */
      font-size: 1.3em;
   }

      ul, li {
         list-style-image:none;
         list-style-position:outside;
         list-style-type:none;
         margin:0;
         padding:0;
      }
         ul li {
            line-height: 1.2em;
         }
            ul li ul {
               display: none; /* узлы свернуты  */
            }
            	ul li ul li {
                  margin: 0 0 0 1.2em;
                  border-left: 1px solid silver; /* цвет вертикальной линии между узлами */
            	}
               li.last {/* последний узел, соединительную линию к след. узлу убираем */
                  border: none;
               }
     .marker { /* маркер раскрытия списка в закрытом состоянии */
	     background-color: #fff;
         border-color:  transparent transparent  transparent #666;
         border-style: solid;
         border-width: .25em 0 .25em .5em;
		 display: block;
		 heigth: 0;
         margin: .35em .25em 0 0;
         float: left;
         width: 0;
         height: 0;
         line-height: 0;
      }
      .marker.open {/* маркер раскрытия списка в открытом состоянии */
         border-color: #999 transparent transparent transparent;
		 border-width: .6em .25em 0 .25em;
      }
p.current {
    color: black;
    font-weight: bold;
    background-color: #f4f4f4;
}

$(document).ready(function(){

	var root = $('#multi-derevo');
	$('li', root).each(function(index){
		this.id = 'n' + index;
	});


	var current_id = $.cookie('current_node');
	if(current_id) $('#'+current_id).find('p:first').toggleClass('current')
	$(root).find("li:has(ul)").prepend('<div class="drop"></div>');
	$("div.drop", root).click(function() {
		$('p.current', root).removeClass('current');
		var a = $('p:first', this.parentNode);
		a.toggleClass('current');
		var current_id = a.parent('li').attr('id');
        setCookie('current_node', current_id || null);

        toggleNode(this);

	});

	$(".ul-drop").find("ul").parents("li").children("div.drop").css({'background-position':"0 0"});
    openNodes();
});


//---------------------------------------------------------------------------------
// Выделил функцию разворачивания дерева в отдельную
function toggleNode(two) {// node= li

  if ($(two).nextAll("ul").css('display')=='none') {
			$(two).nextAll("ul").slideDown(400);
			$(two).css({'background-position':"-11px 0"});
            $(two).toggleClass('open');
            saveTreeState();
		} else {
			$(two).nextAll("ul").slideUp(400);
			$(two).css({'background-position':"0 0"});
            saveTreeState();
		}

 }

function toggleNode1(two) {// node= li

   var ul=$(two);// Находим поддерево
   if (("ul:first", ul).length) {
          $("ul:first", ul).slideDown(400);
          $(ul).children("div.drop").css({'background-position':"-11px 0"});

          /*$(ul).toggleClass('open');*/
        saveTreeState();
      } else {
        /*   $("ul:first").slideUp(400);
          $(ul).css({'background-position':"-11px 0"});*/
       saveTreeState();
      }


 }

// подготовка информации о сосотояниях узлов
function GetOpenedNodes(items){ // li:has('ul')
  var str = [];
  $(items).each(function() {
    var res = $(this).attr('id');
    var state = $('div:first',this).hasClass('open') ? 1 : '';
    if(res && state){
      str.push(res);
    }
  });
  return str.join(',');
}


// сохранить полный список открытых узлов
function saveTreeState(){
  var open_id = GetOpenedNodes($('#multi-derevo li:has("ul")')) || null;
  setCookie("open_nodes", open_id);
  return false;
}
// раскрытие узлов по указанному списку
function openNodes(){
   // читаем куки и открываем узлы
  var open_nodes = $.cookie("open_nodes");
    if(open_nodes) {

    var nodes = open_nodes.split(',');

    if(nodes[0]){
      for(var node in nodes){
        nodes[node] = '#' + nodes[node];
      }

      var ids = nodes.join(',');
      $(ids).each(function() {

         toggleNode1($(this));
      });
    }
  }
  return false;
}

// настройки хранить в Cookies 1 день
function setCookie(name, value){
  var DAY = 24 * 60 * 60 * 1000;
  var date = new Date();
  date.setTime(date.getTime() + (1 * DAY)); // 1 день
  $.cookie(name, value, {expires: date});
  // alert("Cookie set: "+name+"="+value);
}

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите сохранить сортировку таблицы после перезагрузки страницы geniy9 Общие вопросы Javascript 1 21.08.2015 08:32
Сохранение данных после закрытия страницы HekracoB AJAX и COMET 12 02.01.2015 12:41
Как сделать так что бы после перезагрузки не менялся выбраный таб? kursof Элементы интерфейса 5 29.12.2014 00:12
jqGrid сохранение и восстановление Select после reloadGrid SPavel_74 jQuery 0 14.02.2012 16:04
Позиционирование экрана на выбранном элементе страницы после перезагрузки qwr938 Общие вопросы Javascript 4 31.01.2011 21:01