Я вижу несколько проблем.
.sub-menu
имеет эту черту, поэтому она не соответствует этому ul здесь
<ul class="submenu">
Далее, закрытие Javascript сложно. В этом фрагменте кода здесь «this» перестает означать «li» и начинает означать элемент, с которым вы подходите, то есть «a».
jQuery("#gallery-nav li a").hover(function(){
jQuery(this).children(... // <- "this" now means "a", not "li"
Другими словами, вы должны сделать это таким образом
var top_li = this;
jQuery("#gallery-nav li a").hover(function(){
jQuery(top_li).children(...
Наконец, я бы просто так все сделал.
$(function() {
$(".sub-menu").hide();
$("#gallery-nav li").each(function() {
if ($(this).find("ul").length) {
$(this).addClass("top_menu_li");
$(this).find("a").eq(0).addClass("top_menu_a").append($("<span/>"));
}
});
$(".top_menu_li").each(function() {
var top_menu_li = $(this);
top_menu_li.hover(function() {
top_menu_li.find(".top_menu_a span").addClass("toggle-active");
top_menu_li.find(".sub-menu").show();
}, function() {
top_menu_li.find(".top_menu_a").removeClass("toggle-active");
top_menu_li.find(".sub-menu").hide();
});
});
});
<html>
<head>
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">
google.load("jquery", "1");
</script>
</head>
<body>
<ul id="gallery-nav">
<li>
<a href="#">Link 1</a>
<ul class="sub-menu">
<li><a href="#">Sub link 1</a></li>
</ul>
</li>
<li>
<a href="#">Link 2</a>
<ul class="sub-menu">
<li><a href="#">Sub link 2</a></li>
</ul>
</li>
</ul>
</body>
</html>
Отредактировано
Теперь он добавляет классы и промежутки. ghostpool, "find" предназначается для детей, поэтому показывает только правильную суб-навигацию. Скопируйте и вставьте этот HTML и попробуйте сами.