jquery选择除具有特定类的链接之外的所有链接

时间:2012-02-27 01:18:51

标签: jquery addclass

我正在寻找一个函数来将一个类应用于除了单击之外的所有链接。

CSS

.foot_active {
    text-decoration:underline;
}
.foot_inactive {
    text-decoration:none;
}

HTML

<div class="sitemap">
    <table class="table_site">
        <tr>
            <td class="subsite"><a>op1</a></td>
            <td class="subsite"><a>op2</a></td>
            <td class="subsite"><a>op3</a></td>
        </tr>   
    </table>
</div>

脚本

$('a:contains("op1")')
    .live('click', function(){
        $(this).addClass('foot_active');
        $('a:not(.foot_active)').addClass('foot_inactive');
    });
$('a:contains("op2")')
    .live('click', function(){
        $(this).addClass('foot_active');
        $('a:not(.foot_active)').addClass('foot_inactive');
    });
$('a:contains("op3")')
    .live('click', function(){
        $(this).addClass('foot_active');
        $('a:not(.foot_active)').addClass('foot_inactive');
    });

此脚本仅适用于您第一次点击链接,但不适用于未来的点击。 我想我做错了什么,但我的大脑现在似乎很生气。

谢谢。

5 个答案:

答案 0 :(得分:2)

您永远不会删除任何类,因此您最终会获得具有非活动类的所有链接。

您实际上根本不需要非活动类,只需删除活动类。这将取代您的三个事件处理程序:

$('a') .live('click', function(){
  $(this).addClass('foot_active');
  $('a').not(this).removeClass('foot_active');
});

如果页面中有更多链接,您可能希望使用比'a'更具体的选项,例如'.subsite a'

答案 1 :(得分:1)

首先,您不应该使用.live(),因为它在jQuery 1.7中已弃用。

我希望这是你要找的东西。

$('.sitemap a').click(function(){
  $('.sitemap a').toggleClass('foot_inactive',true).toggleClass('foot_active',false);
  $(this).addClass('foot_active');    
});

答案 2 :(得分:1)

对于td中所有带有.sitemap类的链接,您可以尝试:

$('.sitemap a') .live('click', function(){
  $(this).addClass('foot_active');
  $('.sitemap a').not(this).removeClass('foot_active');
});

答案 3 :(得分:0)

你可以试试......

$('a.foot_active').removeClass('foot_active').addClass('foot_inactive'); $(this).removeClass('foot_inactive').addClass('foot_active');

......这样做你想要的吗?

答案 4 :(得分:0)

您不想更改所有其他元素。元素可以有许多类,因此您只想切换活动类。

$('.table_site a').addClass('foot_inactive').click(function(){
    $('.foot_active').removeClass('foot_active');
    $(this).addClass('foot_active');    
})