Я пытаюсь заставить мою тему добавлять имена классов CSS к элементам «ul» в главном меню в Drupal 7.
HTML-код макета:
<ul class="topnav">
<li><a href="#">Home</a></li>
<li>
<a href="#">Tutorials</a>
<ul class="subnav">
<li><a href="#">Sub Nav Link</a></li>
<li><a href="#">Sub Nav Link</a></li>
</ul>
</li>
<li>
<a href="#">Resources</a>
<ul class="subnav">
<li><a href="#">Sub Nav Link</a></li>
<li><a href="#">Sub Nav Link</a></li>
</ul>
</ul>
Как видите, ul «первого уровня» имеет имя класса «topnav», следующий вложенный ul имеет имя класса «subnav». Я подключаю раскрывающееся меню jQuery и хочу применить его без использования модулей. Да, я пробовал модуль «Атрибуты меню», но здесь он не работает.
Я искал весь день и, похоже, не нашел полного решения. Я знаю о суперфишах и других темах, которые поставляются с sf, но мне нужно собственное решение.
Редактировать: Хорошо, я продвинулся дальше. У меня есть меню с подпрограммами, в которых jquery изначально скрывает подпрограммы, однако я не могу заставить jquery отображать подпрограммы для данного события: наведите указатель мыши на «ul.menu li span»
Вот мой CSS:
ul.menu {
list-style: none;
padding: 0 20px;
margin: 0;
float: left;
width: 920px;
background: #222;
font-size: 1.2em;
background: url(topnav_bg.gif) repeat-x;
}
ul.menu li {
float: left;
margin: 0;
padding: 0 15px 0 0;
position: relative; /*--Declare X and Y axis base for sub navigation--*/
}
ul.menu li a{
padding: 10px 5px;
color: #000;
display: block;
text-decoration: none;
float: left;
}
ul.menu li a:hover{
background: url(topnav_hover.gif) no-repeat center top;
}
ul.menu li span { /*--Drop down trigger styles--*/
width: 17px;
height: 35px;
float: left;
background: url(../images/bullet.png) no-repeat center top;
}
ul.menu li span{background-position: center bottom; cursor: pointer;} /*--Hover effect for trigger--*/
ul.menu li ul {
list-style: none;
position: absolute; /*--Important - Keeps subnav from affecting main navigation flow--*/
left: 0; top: 35px;
background: #333;
margin: 0; padding: 0;
float: left;
width: 170px;
border: 1px solid #111;
}
ul.menu li ul.menu li{
margin: 0; padding: 0;
border-top: 1px solid #252525; /*--Create bevel effect--*/
border-bottom: 1px solid #444; /*--Create bevel effect--*/
clear: both;
width: 170px;
}
html ul.menu li ul.menu li a {
float: left;
width: 145px;
background: #333 url(dropdown_linkbg.gif) no-repeat 10px center;
padding-left: 20px;
}
html ul.menu li ul.menu li a:hover {
background: #222 url(dropdown_linkbg.gif) no-repeat 10px center;
}
jQuery:
jQuery(function($) {
$('ul.menu li ul').hide();
$("ul.menu li ul").parent().append("<span></span>"); //Only shows drop down trigger when js is enabled (Adds empty span tag after ul.subnav*)
$("ul.menu li span").hover(function() { //When trigger is clicked...
// alert("No error!");
//Following events are applied to the subnav itself (moving subnav up and down)
$(this).parent().find("ul.menu li ul").slideDown('fast').show(); //Drop down the subnav on click
$(this).parent().hover(function() {
}, function(){
$(this).parent().find("ul.menu li ul").slideUp('slow'); //When the mouse hovers out of the subnav, move it back up
});
//Following events are applied to the trigger (Hover events for the trigger)
}).hover(function() {
$(this).addClass("subhover"); //On hover over, add class "subhover"
}, function(){ //On Hover Out
$(this).removeClass("subhover"); //On hover out, remove class "subhover"
});
});
Если я отредактирую эту строку: $(this).parent().find("ul.menu li ul").slideDown('fast').show();
на эту: ("ul.menu li ul").slideDown('fast').show();
, будут показаны ВСЕ подменю для всех родительских элементов - очевидно, я хочу показать только подменю родительского меню, над которым я нахожусь. Когда я пытаюсь добавить обратно в $(this).parent()...
, он вообще не показывает никаких сабвуферов.
Спасибо.
ul#topnav > li > ul
соответствуетul
второго уровня внутри исходногоul
. - person Blender   schedule 18.11.2011$('ul#topnav > li > ul');
, поэтому он может выбрать соответствующие элементы. - person fncomp   schedule 18.11.2011<div id="navigation"><div id="navigation"><ul class="links"><li class="menu-227 first active"><a href.... class = "active">Home</a>
Теперь в разделе «Главная» должен быть элемент подменю, и ul этого подэлемента должен иметь подпункт класса. Итак, используя технику @Blender, я могу по существу переименовать класс ссылок в topnav? - person   schedule 18.11.2011id
? Это будет тяжело для парсера. - person Blender   schedule 18.11.2011