Написал для Вас плагин, разбирайтесь, пользуйтесь:
;(function(fab) {
//UMD definition
if(define && define.amd) {
//for AMD
define(['jquery'], fab);
} else if(module && module.exports && require) {
//for CommonJS
module.exports = fab(require('jquery'));
} else {
//no module system
fab(jQuery);
}
}(function($) {
$.fn.menuAccordionCookie = function(cookieName) {
//jQuery может найти по селектору несколько элементов, применяем ко всем
$(this).each(function() {
var $ul = $(this); //самый верхний ul
var cookie = JSON.parse($.cookie(cookieName) || '{}'); //получаем куку и парсим
//это хелпер для сохранения куки
function saveCookie(id, value) {
if(value) {
cookie[id] = 1;
} else {
delete cookie[id];
}
$.cookie(cookieName, JSON.stringify(cookie));
}
//получаем все <li> которые являются прямыми потомками нашего <ul> и перебираем их
$ul.children('li').each(function(id) {
var $li = $(this);
var $childUl = $li.children('ul'); //Дочерний <ul>
var $a = $li.children('a'); // <a>
if(!$childUl.length) {
//если в li нет ul то ничего с ним не делаем
return;
}
if(!cookie[id]) {
//Прячем все для кого не запомнено, что они показаны
$childUl.hide();
}
//click по ссылке
$a.on('click', function() {
if(cookie[id]) {
saveCookie(id, false);
$childUl.hide();
} else {
saveCookie(id, true);
$childUl.show();
}
});
});
});
};
}));
Использование:
$(function() {
$('.menu-header').menuAccordionCookie('my_accorion_menu');
});