2011-01-31 3 views
1

У меня есть этот скрипт, который выделяет навигационное меню при нажатии, но после щелчка выбранного класса исчезает. Есть ли способ обхода, чтобы сделать выбранный класс действующим после щелчка?Меню подсветки jQuery

<script type="text/javascript"> 
$(document).ready(function() { 
    $('#nav ul li a').click(function() { 
     $('#nav ul li').removeClass('selected'); 
     $(this).parent('li').addClass('selected'); 
     alert('hello'); 
    }); 
}); 

</script> 
    <div id="nav"> 
     <ul>  
      <li><a href="/">Home</a></li> 
      <li><a href="/blog/">Blog</a></li> 
      <li><a href="/about/">About</a></li> 
     </ul> 
    </div> 
+0

Ваш код выглядит так, как будто он должен работать. Можете ли вы предоставить дополнительную информацию? – Matt

+0

из приведенного выше сценария я намеренно поставил предупреждение ('hello'), чтобы проверить, что щелкнуло li, которое фактически добавлено с выбранным классом, и проблема была в том, что после того, как я щелкнул ok в окне предупреждения (функция exit) и выделен li (стиль) исчезает. Подстановка предупреждения ('hello') с помощью 'return false' делает работу подсветки, но переход на следующую страницу больше не работает, поскольку @gearsdigital указывает –

ответ

0

Если я вас правильно понял ... Пример: http://jsfiddle.net/jgmgW/

$(document).ready(function() { 
    $('#nav ul li').click(function() { 
     $('#nav ul').children('li').removeClass(); 
     $(this).addClass('selected'); 
    }); 
}); 

#nav .selected a{background:red;display:block} 

<div id="nav"> 
    <ul>  
     <li><a href="#">Home</a></li> 
     <li><a href="#">Blog</a></li> 
     <li><a href="#">About</a></li> 
    </ul> 
</div> 
2

Вы можете использовать метод .siblings получить li элементы, которые имеют selected класс.

$(document).ready(function() { 
    $("#nav ul li a").click(function() { 
     $(this).parent("li") 
      .addClass("selected") 
      .siblings(".selected") 
       .removeClass("selected"); 
     return false; 
    }); 
}); 

Вы можете увидеть это в действии на jsFiddle.

+1

Как примечание для автора ... с 'return false' ссылкой (перейти к новой страница) больше не будет работать. Но, похоже, это не нужно в вашем примере? – gearsdigital

+0

@gearsdigital, чтобы прокомментировать это: я добавил 'return false', потому что я думаю, что это могло быть причиной того, почему класс был удален (страница перезагружена при нажатии). – mekwall

+0

@Marcus Я знаю ... :) Мое замечание было для владельца потока. Это не так ясно, как должно быть. Я также не уверен, что он хочет точно сделать ... Нормальный лучший способ выделить текущий пункт меню - это решение на основе cms. Без дополнительных скриптов клиентского сайта или, возможно, jquery-плагинов он никогда не сможет активировать текущий элемент на всех страницах. – gearsdigital