Меню аккардион jQuery
Господа программисты помогите пож-та немного доработать.
Есть вертикальное меню меню вида:
<ul id="menu">
<li> <a href="#">Главная</a>
<ul>
<li><a href="#">Каталог 1</a></li>
<li><a href="#">Каталог 2</a>
<ul>
<li><a href="#">Подкаталог 1</a></li>
<li><a href="#">Подкаталог 2</a></li>
<li><a href="#">Подкаталог 3</a></li>
</ul>
</li>
<li><a href="#">Каталог 3</a></li>
</ul>
</li>
<li> <a href="#">Programming Languages</a>
<ul>
<li><a href="#">PHP</a></li>
<li><a href="#">Ruby</a></li>
</ul>
</li>
</ul>
При клике на Главную открываются пункты: Каталоги, а подкаталоги остаются скрыты. Какие изменения внести в код ниже чтобы Подкаталоги тоже открывались при клике на Главную.
function initMenu() {
$('#menu ul').hide();
$('#menu ul:first').show();
$('#menu li a').click(
function() {
var checkElement = $(this).next();
if((checkElement.is('ul')) && (checkElement.is(':visible'))) {
return false;
}
if((checkElement.is('ul')) && (!checkElement.is(':visible'))) {
$('#menu ul:visible').slideUp('normal');
checkElement.slideDown('normal');
return false;
}
}
);
}
$(document).ready(function() {initMenu();});
|
Это все можно сделать с помощью одного лишь СSS и не нужно здесь скрипта =) сэкономишь на времени загрузки страницы пару милисек =)
|
Цитата:
<style>
#menu > li ul {
display: none;
}
#menu > li > a:focus ~ ul,
#menu > li > a:focus ~ ul ul {
display: block;
}
</style>
<ul id="menu">
<li> <a href="#">Главная</a>
<ul>
<li><a href="#">Каталог 1</a></li>
<li><a href="#">Каталог 2</a>
<ul>
<li><a href="#">Подкаталог 1</a></li>
<li><a href="#">Подкаталог 2</a></li>
<li><a href="#">Подкаталог 3</a></li>
</ul>
</li>
<li><a href="#">Каталог 3</a></li>
</ul>
</li>
<li> <a href="#">Programming Languages</a>
<ul>
<li><a href="#">PHP</a></li>
<li><a href="#">Ruby</a></li>
</ul>
</li>
</ul>
|
devote,
извини забыл оно должно не сворачиваться=( прочитал просто меню =))) |
Видимо в таком варианте решения нет :cray:
|
DzirT,
Да есть - не хнычь - думайте - или ждите вечера я или devote или melky поправят к примеру для инициализации нун так $('#menu li:first ul').show() |
нашел вариант к списку подкаталогов присвоить селектор :
<ul id="menu2">
<li><a href="#">Подкаталог 1</a></li>
<li><a href="#">Подкаталог 2</a></li>
<li><a href="#">Подкаталог 3</a></li>
</ul>
ну а далее .toggle() :
function initMenu() {
$('#menu ul').hide();
$('#menu ul:first, #menu li:first ul').show();
$('#menu li a').click(
function() {
$('#menu2, #menu2 li, #menu2 li a').toggle()
var checkElement = $(this).next();
if((checkElement.is('ul')) && (checkElement.is(':visible'))) {
return false;
}
if((checkElement.is('ul')) && (!checkElement.is(':visible'))) {
$('#menu ul:visible, #menu li:visible ul').slideUp('normal');
checkElement.slideDown('normal');
return false;
}
}
);
}
$(document).ready(function() {initMenu();});
На сколько это правильно? А вот без второго селектора, как изначально задумано, никак - не могу понять как указать в таком случае вложенность. P.S. и так при клике на любом пункте <ul id="menu2">....</ul> закрывается. |
Цитата:
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
#menu > li > ul {
display: none;
}
</style>
<script src="http://code.jquery.com/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(function(){
$("#menu > li > a").click(function() {
$( "~ ul", this ).slideToggle();
});
});
</script>
</head>
<body>
<ul id="menu">
<li> <a href="#">Главная</a>
<ul>
<li><a href="#">Каталог 1</a></li>
<li><a href="#">Каталог 2</a>
<ul>
<li><a href="#">Подкаталог 1</a></li>
<li><a href="#">Подкаталог 2</a></li>
<li><a href="#">Подкаталог 3</a></li>
</ul>
</li>
<li><a href="#">Каталог 3</a></li>
</ul>
</li>
<li> <a href="#">Programming Languages</a>
<ul>
<li><a href="#">PHP</a></li>
<li><a href="#">Ruby</a></li>
</ul>
</li>
</ul>
</body>
</html>
|
Цитата:
Цитата:
|
Цитата:
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
#menu > li > ul {
display: none;
}
#menu > li:first-child > ul {
display: block;
}
</style>
<script src="http://code.jquery.com/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(function(){
$("#menu > li > a").click(function() {
$( "~ ul", this ).slideToggle();
var self = $( this ).next();
$( "#menu > li > ul" ).each(function() {
if ( self[0] !== this ) {
$( this ).slideUp();
}
});
});
});
</script>
</head>
<body>
<ul id="menu">
<li> <a href="#">Главная</a>
<ul>
<li><a href="#">Каталог 1</a></li>
<li><a href="#">Каталог 2</a>
<ul>
<li><a href="#">Подкаталог 1</a></li>
<li><a href="#">Подкаталог 2</a></li>
<li><a href="#">Подкаталог 3</a></li>
</ul>
</li>
<li><a href="#">Каталог 3</a></li>
</ul>
</li>
<li> <a href="#">Еще какая то</a>
<ul>
<li><a href="#">Каталог 1</a></li>
<li><a href="#">Каталог 2</a>
<ul>
<li><a href="#">Подкаталог 1</a></li>
<li><a href="#">Подкаталог 2</a></li>
<li><a href="#">Подкаталог 3</a></li>
</ul>
</li>
<li><a href="#">Каталог 3</a></li>
</ul>
</li>
<li> <a href="#">Programming Languages</a>
<ul>
<li><a href="#">PHP</a></li>
<li><a href="#">Ruby</a></li>
</ul>
</li>
</ul>
</body>
</html>
|
Цитата:
#menu > li > ul {
display: none;
}
#menu > li:first-child > ul {
display: block;
}
|
devote,
Ти такой жа настойчивый, как и мну - в ИЕ 6-7 не работает (Думаю чел упёрси в это |
Цитата:
Ну а про джуквери думаю говорить и не надо, где он работает а где нет. |
devote,
Проверил в ИЕ6 - не пашет - в ИЕ7 сработал |
Цитата:
|
devote,
Гениально! работает. спасибо! На сайте правда пока не хочет , движок MODx, видимо конфликт какой то. Но это уже история для другой сказки. |
<!DOCTYPE html>
<html>
<head>
<script src="http://code.jquery.com/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
function initMenu() {
$('#menu ul').hide();
$('#menu ul:first').show();
$('#menu ul:first ul').show();
$('#menu li a').click(
function() {
var checkElement = $(this).next();
if((checkElement.is('ul')) && (checkElement.is(':visible'))) {
return false;
}
if((checkElement.is('ul')) && (!checkElement.is(':visible'))) {
$('#menu ul:visible').slideUp('normal');
$('#menu ul:visible ul').slideUp('normal');
checkElement.slideDown('normal');
checkElement.find('ul').slideDown('normal');
return false;
}
}
);
}
$(document).ready(function() {initMenu();});
</script>
</head>
<body>
<ul id="menu">
<li> <a href="#">Главная</a>
<ul>
<li><a href="#">Каталог 1</a></li>
<li><a href="#">Каталог 2</a>
<ul>
<li><a href="#">Подкаталог 1</a></li>
<li><a href="#">Подкаталог 2</a></li>
<li><a href="#">Подкаталог 3</a></li>
</ul>
</li>
<li><a href="#">Каталог 3</a></li>
</ul>
</li>
<li> <a href="#">Еще какая то</a>
<ul>
<li><a href="#">Каталог 1</a></li>
<li><a href="#">Каталог 2</a>
<ul>
<li><a href="#">Подкаталог 1</a></li>
<li><a href="#">Подкаталог 2</a></li>
<li><a href="#">Подкаталог 3</a></li>
</ul>
</li>
<li><a href="#">Каталог 3</a></li>
</ul>
</li>
<li> <a href="#">Programming Languages</a>
<ul>
<li><a href="#">PHP</a></li>
<li><a href="#">Ruby</a></li>
</ul>
</li>
</ul>
</body>
</html>
|
DzirT,
:) ? |
| Часовой пояс GMT +3, время: 03:30. |