您的脚本存在许多问题:
<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 的变量,因为不能保证已经设置了 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');
您需要记住在单击功能期间从元素中删除类:
$('.activeHash').removeClass('activeHash');
$(hash).addClass('activeHash');
@Cybernate 发现了一个我错过的问题:在点击事件之后之前哈希不会改变,简单的解决方案是获取锚元素的 href,尽管这假设 @ 987654336@ 没有写入路径(解决方法是同时监听 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>
免责声明:我没有测试任何代码,如果我拼写错误,请告诉我。