-1

我有一个顶部导航链接,可以驱动左侧导航中的链接。顶部导航包含一堆主题。单击时,每个主题链接都会在左侧导航中填充有关该主题的相关链接。因此,当单击顶部导航上的主题时,我希望它的颜色更改为红色,而其余的为蓝色,但是一旦单击另一个标题,我希望先前单击的链接将其颜色恢复为蓝色,并且新点击一个获得红色。我们如何在 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>
4

3 回答 3

1

加载器类的蓝色覆盖了红色,所以使用这个:

.high{color:red !important}

http://jsfiddle.net/AZqUx/

于 2012-08-20T00:09:03.623 回答
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");
    });
});
于 2012-08-20T00:14:28.737 回答
1

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

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

CSS 最重要的原则之一是更具体的规则将覆盖不太具体的规则。在上述两条规则中,第一条适用于所有<a>带有 class 的元素loader,第二条适用于所有带有 class 的元素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; }

这样您就可以自由移动这两个声明,而不会发生任何意外的行为变化。如果您对它的工作原理有任何疑问,您会发现CSS 特定性规则很有帮助。:D

于 2012-08-20T00:15:26.750 回答