jquery和toggleClass

时间:2011-01-08 19:32:53

标签: jquery toggleclass

我有一个带脚本的网站。 当您单击链接时,它会切换页面并使用jquery中的toggleClass方法切换链接本身。

脚本运行正常,但是页面被加载到彼此之上,所以我稍微改了一下。 如果您是第一次点击链接,链接会更改(更大)并显示页面。链接的值存储在变量(previousClick)中。 现在,如果我点击第二个链接,则上一页会消失并显示新的链接。这很好用。但是之前的链接仍然更大。我无法找到如何将其恢复为较小的字体...

以下是代码:

var pages = function()
{
    var nav = $( 'ul#nav li a' );
    var previousClick = '';

    nav.click( function()
    {
        if (previousClick.length==0)
        {
            $( this ).parent().toggleClass( 'selected' );
            $( $( this ).attr( 'href' ) + '-page' ).toggle( 500 );
            previousClick = $( this ).attr( 'href' );
            return false;
        }
        else
        {
            $('li a [href=' + previousClick + ']').toggleClass( 'selected' );
            $( previousClick + '-page' ).toggle( 500 );
            $( this ).parent().toggleClass( 'selected' );
            $( $( this ).attr( 'href' ) + '-page' ).toggle( 500 );
            previousClick = $( this ).attr( 'href' );
            return false;   
        }
    });
};

$( window ).load( pages );

css:

ul#nav li { padding: 1px; }
ul#nav li a
{
    font: italic normal 20px/normal 'Palatino Linotype', Georgia, Comic sans MS, Times, Serif;
    text-decoration: none;
    text-shadow: 0 1px 0 #000;
    position: relative;
    z-index: 3;
    color: #fff;
    display: block;
}
ul#nav li a span
{
    font-size: 28px;
    font-family: Baskerville, Palatino, 'Palatino Linotype', Georgia, Serif;
    /*color: #3b0314;*/
    color: #FEDB00;
}
ul#nav li a:hover,
ul#nav li.selected a
{
    font-size: 200%;
}

html中的菜单:

<ul id="nav">
    <li id="star-top"></li>
    <li><a href="#société"><span>Qui</span>sommes nous?</a></li>
    <li><a href="#coachingé">Coaching<span>à</span>domicile</a></li>
    <li><a href="#entrainementé"><span>Plan</span>d'entrainement</a></li>
    <li><a href="#aquatiqueé"><span>Activités</span>aquatiques</a></li>
    <li><a href="#entreprisé"><span>Espace</span>Entreprise</a></li>
    <li id="star-bot"></li>
    <li><a href="#contact">Contactez<span>nous</span></a></li>
    <li><a href="#partenaire"><span>Nos</span>partenaires</a></li>
</ul>

非常感谢

1 个答案:

答案 0 :(得分:2)

我认为,因为您使用的是$( this ).parent().toggleClass( 'selected' );,所以您还应该使用:

$('li a[href=' + previousClick + ']').parent().toggleClass( 'selected' );

而不是

$('li a [href=' + previousClick + ']').toggleClass( 'selected' );

编辑:

或者,更好的是,使用:

$('#nav li:has(a[href=' + previousClick + '])').toggleClass('selected');

我添加了#nav,因为:has匹配所有后代,而不仅仅是直接子项。因此,如果您的#nav包含在另一个<li>中,那么它的类也会被切换。

编辑:

啊,我现在看到了。这非常微妙:a [href=...]表示“href代码中包含值为...的属性a的代码”。所以,它会匹配<a><a href="..."></a></a>,这不是我们想要的。你应该使用a[href=...],没有空格。