Это должно быть достаточно просто со следующим jQuery:
$('li a').click(
function(){
$('.active').removeClass('active');
$(this).addClass('active');
});
и CSS:
a.active:link,
a.active:visited {
background-color: #ffa; /* or whatever */
}
a.active:hover {
text-decoration: underline;
background-color: #f90; /* or, again, whatever */
}
Демонстрация по адресу: JS Fiddle .
<ч />
Отредактировано для добавления следующего:
Если вы пытаетесь назначить «активный» (или любой другой) класс при загрузке страницы, а ссылки относятся к другим частям вашего сайта, то вам может пригодиться следующее:
$(document).ready(
function() {
var topUrl = location.href;
$('li a').each(
function() {
if ($(this).attr('href') == topUrl) {
$(this).addClass('active');
}
});
});
По сути, он присваивает URL-адрес текущей страницы переменной topUrl и проверяет, ссылаются ли какие-либо ссылки в каждом из элементов li
на текущую страницу, и, если это так, назначает класс active к этой ссылке. В текущем воплощении он требует абсолютных (не относительных) путей в атрибутах a
elements 'href
.
<ч />
Отредактировано , чтобы несколько улучшить сценарий, чтобы убрать требование абсолютных путей в href
s.
$(document).ready(
function() {
var topUrl = location.href.split('/').pop();
$('li a[href$=' + topUrl + ']').addClass('active');
});
В этом воплощении URL разделен на символ /
, а последний раздел возвращенного массива хранится в переменной topUrl
. JQuery then ищет элемент a
в элементе li
, чтобы определить, заканчивается ли какой-либо из этих элементов одной и той же частью, поэтому:
www.example.com/index.html
назначит класс 'active' любому элементу a
, чей href
оканчивается на index.html
, что явно не без проблем.