Попробуй свой код заменить на этот. Должно работать. Тут сохраняется одно открытое меню и не выделяется активный пункт меню.
var menu = jQuery('#menu');
menu.find('ul').each(function(index, value) {
value.id = 'opened_section_' + index;
});
function initMenu() {
var openedMenuElem = JSON.parse(localStorage.getItem('superGunSettings')).openedMenuId;
jQuery(".vmenu li.parent > a").click(function(eventObject){return false});
jQuery('.vmenu ul').hide();
jQuery('.vmenu li.active ul').show();
jQuery('.vmenu li a').click(
function() {
jQuery(this).next().slideToggle('normal');
}
);
jQuery('#' + openedMenuElem).show();
}
jQuery(document).ready(function() {initMenu();});
function allClose(){
var list = document.getElementById("menu").getElementsByTagName("ul");
for(var i=0;i<list.length;i++){
list[i].style.display = "none";
}
}
function openMenu(node){
var subMenu = node.parentNode.getElementsByTagName("ul")[0];
localStorage.setItem('superGunSettings', JSON.stringify({openedMenuId: subMenu.id}));
subMenu.style.display == "none" ? subMenu.style.display = "block" : subMenu.style.display = "none";
}