为点击的链接指定不同的颜色,并在单击其他链接时恢复其颜色

时间:2012-08-19 23:55:14

标签: javascript jquery css hyperlink

我有一个顶级导航链接,用于驱动左侧导航栏中的链接。顶部导航包含一堆主题。单击时,每个主题链接都会在左侧导航中填充主题上的相关链接。因此,当单击顶部导航上的主题时,我希望它将其颜色更改为红色而其余为蓝色,但只要单击另一个标题,我希望之前单击的链接将其颜色恢复为蓝色并且新点击一个获得红色。我们怎样才能在jquery中做到这一点?添加类和删除类并使用css是行不通的..请帮助..

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
        "http://www.w3.org/TR/html4/strict.dtd">
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>MY C# Notes</title>     
    <style type="text/css">
    body,
    html {margin:0; padding:0;color:#000;background:#a7a09a;}
    #wrap {width:1050px;margin:0 auto;background:#99c;}
    #header {padding:5px 10px;background:#ddd;}
    h1 {margin:0;}
    #nav {padding:5px 10px;background:#c99;}
    #nav ul {margin:0;padding:0;list-style:none;}
    #nav li {display:inline;margin:0;padding-right:15px;}
    #main { float:right;width:780px;padding:10px;background:#9c9;min-height:600px;}
    h2 {margin:0 0 1em;}
    #sidebar {float:left;width:230px;padding:10px;background:#99c;min-height:600px;}
    #footer {clear:both;padding:5px 10px;background:#cc9;}
    #footer p { margin:0;  }
    * html #footer {height:1px;}
    .high{color:red}
    a.loader { color: blue; }    
    </style>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
</head>
<body>
<script type="text/javascript"> 
$(document).ready(function() {   
$('a.loader').on('click', function(e) {
e.preventDefault();
    $('#sidebar').load($(this).attr('href'));
            $("a.loader").removeClass("high");
            $(this).addClass("high");});
});

</script>
<div id="wrap">
    <div id="header"><h1>My C# Notes and Exercises</h1></div>
    <div id="nav">
        <ul>
            <li><a class="loader" href="topic1.html">Topic1</a></li>
            <li><a class="loader" href="topic2.html">Topic2</a></li>
            <li><a class="loader" href="topic3.html">Topic3</a></li>
            <li><a class="loader" href="topic4.html">Topic4</a></li>
            <li><a href="/">LocalBrowser</a></li>
        </ul>
    </div>
    <div id="main">
    </div>
    <div id="sidebar"></div>
    <div id="footer">
        <p>C# Online Tutorials</p>
    </div>
</div>
</body>
</html>

3 个答案:

答案 0 :(得分:1)

加载器类中的蓝色会覆盖红色,所以请使用:

.high{color:red !important}

http://jsfiddle.net/AZqUx/

答案 1 :(得分:1)

您的css课程.loader优先于.high;你可以通过以下方式解决这个问题:

- 在!important的声明中添加.high.high {color: red !important;}

- 在你的css中调用声明的顺序:a.loader { color: blue;} a.high { color: red; }

- 或在您添加.loader时删除.high

$(document).ready(function() { 
    $('a.loader').on('click', function(e) {
        e.preventDefault();
        $('#sidebar').load($(this).attr('href'));
        $("a.high").not(this).removeClass("high").addClass('loader');
        $(this).removeClass('loader').addClass("high");
    });
});

答案 2 :(得分:1)

目前,您有两个相关的CSS规则:

a.loader { color: blue; }    
.high { color: red; }

CSS最重要的原则之一是更具体的规则将覆盖不太具体的规则。在上述2条规则中,第一条规则适用于所有<a>个元素loader,第二条规则适用于所有具有类high的元素。由于第一个更具体(包括标记和类描述),因此优先级并覆盖其他规则的color: red;。解决这个问题的最简单方法是让你的第二条规则更加具体:

a.loader { color: blue; }    
a.high { color: red; }

由于a.high的规则稍后声明,因此优先。但是,通过实际使第二个规则比第一个更具体,你可以更好地证明这一点。假设您只需要在<div id="nav">元素的子元素中使用它,您可以这样做:

a.loader { color: blue; }    
#nav a.high { color: red; }

这可以自由地移动两个声明,而不会发生任何意外的行为改变。如果您对此有用的原因有任何疑问,请发现the CSS specificity rules有用。 :d