Рано или поздно мы сталкиваемся с задачей выделить активную ссылку в меню сайта или еще где либо.
Решение на самом деле очень простое, и выполняется на чистом js:
Пишем внутри тега такую функцию (ну или можно занести это в файл и подключить сам файл):
<script type="text/javascript"> function shineLinks(id){ try{ var el=document.getElementById(id).getElementsByTagName('a'); var url=document.location.href; for(var i=0;i<el.length; i++){ if (url==el[i].href){ el[i].className += ' act'; }; }; }catch(e){} }; </script>
Допустим у нас на сайте есть меню такого вида:
<div class="menu"> <ul> <li style="list-style-type: none;"> <li><a href="/">Главная</a></li> <li><a href="/about/">О компании</a></li> <li><a href="/contacts/">Контакты</a></li> </ul> </div>
Присвоим диву id, который назовём как душе угодно, например menu-act, и после закрытия дива, делаем вызов функции:
<div class="menu" id="menu-act"> <ul> <li><a href="/">Главная</a></li> <li><a href="/about/">О компании</a></li> <li><a href="/contacts/">Контакты</a></li> </ul> </div> <script type="text/javascript">shineLinks('menu-act');</script>
Суть работы заключается в следующем: перебираются все ссылки в меню, и сравниваются с текущим url, если совпадают, то для ссылки добавляется класс act
например:
<ul> <li><a class=" act" href="/about/">О компании</a></li> </ul>
Почему стоит пробел перед act: если у ссылки нет класса, то на валидность это никак влиять не будет, а если у ссылки уже есть класс например link, то что бы не было linkact, добавляется еще один класс через пробел. Остаётся только прописать соответствующие стили в css.
Всё элементарно.