Существует ряд проблем с вашим скриптом:
<script type="text/javascript">
$(document).ready(function() {
$(function()
{
$('a').click(function(event) {
$(location.hash).css("background-color","red");
});
});
});
</script>
Начну сверху:
Убедитесь, что ваш сценарий заключен в теги CDATA
, чтобы избежать проблем с кодировкой XML:
<script type="text/javascript">
/* <![CDATA[ */
...code...
/* ]]> */
</script>
$(document).ready(...);
совпадает с $(function(){});
, что отметили многие другие. Большинство людей не могут понять, что он предназначен для псевдонима jQuery
- $
(или любого другого имени, которое вы предпочитаете) для предотвращения конфликтов пространства имен:
jQuery(function($){
...code...
});
Когда сработало событие document.ready
, нет экземпляра, в котором вы указали бы, что текущее значение хеш-функции должно быть выделено:
$(hash).css('background-color', 'red');
Хорошо, поэтому я использую переменную с именем hash, потому что нет никакой гарантии, что хэш установлен или будет начинаться со знака '#' (я смотрю на вас, IE).
function normalizeHash()
{
var hash = location.hash;
if (hash.length)
{
if (hash[0] != '#')
{
hash = '#' + hash;
}
}
else
{
hash = '';
}
return hash;
}
поскольку вы хотите отключить цвета при установке другого хэша, вы должны использовать классы
CSS:
.activeHash
{
background-color: red;
}
JS:
$(hash).addClass('activeHash');
Вам нужно помнить, чтобы удалять классы из элементов во время функции click:
$('.activeHash').removeClass('activeHash');
$(hash).addClass('activeHash');
@ Cybernate обнаружил проблему, которую я пропустил: хэш не изменился до после события click, простое решение - получить href
элемента привязки, хотя это предполагает, что href
не записан с путем (обходной путь должен также прослушивать событие hashchange):
hash = $(this).attr('href');
Итак, чтобы сложить все вместе:
<script type="text/javascript">
/* <![CDATA[ */
function normalizeHash()
{
var hash = location.hash;
if (hash.length)
{
if (hash[0] != '#')
{
hash = '#' + hash;
}
}
else
{
hash = '';
}
return hash;
}
jQuery(function($){
var hash = normalizeHash();
$(hash).addClass('activeHash');
$('a').click( function(e){
hash = $(this).attr('href');
$('.activeHash').removeClass('activeHash');
$(hash).addClass('activeHash');
} );
});
/* ]]> */
</script>
Отказ от ответственности: я не тестировал ни один из этих кодов, дайте мне знать, если я сделал ошибку орфографии.