JQuery addClass和removeClass问题

时间:2011-05-20 20:03:44

标签: jquery css hyperlink addclass removeclass

我有一些代码,当用户点击链接时,JQuery会将“selected”类添加到该锚点。然后,当用户点击不同的链接时,并非所有链接都以'selected'结尾,我尝试使用.removeClass从任何元素中删除这些类,然后再将其添加到单击的那个中。

但是,我遇到了删除类但未添加类的问题。让事情变得更奇怪..它在Chrome中完美运行,但在IE9和FF4中只有一个链接添加了一个类(第一个链接,生物)到它(无论我点击链接的顺序)......并且Safari 5.05没有似乎对任何一个都有效。

我尝试将所有代码粘贴到JSFiddle中,但我无法让它在JSlint中正常工作(无论如何我都会发布它)..

这是我的JQuery:

$(document).ready(function(){
$('#content').load('bio.html .content'); // fill #content when page loads
$('#heading a').click(function(){ 
    $('#content').load( $(this).attr('href') + ' .content' );
    $('#heading li a').removeClass('selected');
    $(this).addClass('selected');
    return false; 
});    });

这是HTML的一部分:

<body>
    <div id="heading" class="transparent">
        <ul>
            <li><a href="bio.html">Bio</a></li>
            <li><a href="resume.html">Resume</a></li>
            <li><a href="contact.html">Contact</a></li>
        </ul>
        <h1>Test1</h1>
        <h3>Test2</h3>
    </div>
    <div id="content" class="transparent">
    </div>
    <div id="portfolio" class="transparent">
        <p>Portfolio examples will go here.</p>
    </div>
    <div id="footer" class="transparent"><h2>Test3</h2></div>
</body>

这是JSFiddle,虽然我认为我必须发布错误的内容(从未使用过JSFiddle).. http://jsfiddle.net/PhHrX/3/

有什么想法吗?

感谢您提供任何帮助,您可以自由选择。

编辑: 这是完整的CSS:http://pastebin.com/g8zLGR76 这是完整的HTML:http://pastebin.com/CR1Y2595

5 个答案:

答案 0 :(得分:2)

你的CSS改变选择器。选择....

#heading ul li a.selected {background: #FF0000;}

答案 1 :(得分:0)

我猜是因为你没有使用each(),试试这个:

$(function(){
    $('#content').load('bio.html .content'); // fill #content when page loads
    $('#heading li').each(function() {
        $('a', this).click(function(e){
            e.preventDefault();
            $('#content').load( $(this).attr('href') + ' .content' );
            $('#heading li a').removeClass('selected');
            $(this).addClass('selected');
        });
    });
});

答案 2 :(得分:0)

它实际上与你的CSS有关。如果你在规则之后放了一个!重要的话,它会很有效。

http://jsfiddle.net/PhHrX/10/

答案 3 :(得分:0)

过去,我使用.siblings()选择器来完成此任务。

$('#heading a').click(function () { 
    $('#content').load($(this).attr('href') + ' .content' );
    $(this).addClass('selected').siblings().removeClass('selected');
    return false; 
});

答案 4 :(得分:-1)

$(document).ready(function(){
$('#content').load('bio.html .content'); // fill #content when page loads
$('#heading a').click(function(){ 
    $('#content').load( $(this).attr('href') + ' .content' );
    $('#heading li a').removeClass('selected');
   setTimeout(function() { $(this).addClass('selected'); }, 200);
    return false; 
});    });