2012-02-27 174 views
1

我正在寻找一个函数来将类应用于除点击之外的所有链接。jquery选择除具有特定类的链接之外的所有链接

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'); 
    }); 

这个脚本只适用于第一次的链接点击,而不是未来的点击。 我觉得我做错了什么,但现在我的大脑似乎很生气。

谢谢。

回答

1

为TD里面的所有链接与类称为.sitemap你可以尝试:

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

你可以试试...

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

...这是否你想要什么?

2

你永远不会删除任何类,所以你最终会得到所有具有非活动类的链接。

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

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

你可能想使用一个更具体的selctor比'a',像'.subsite a'如果你有网页中的任何链接越多。

0

您不想更改所有其他元素。一个元素可以有很多类,所以你只需要切换活动类。

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

首先,因为它是在jQuery的1.7不赞成你不应该使用.live()

这是你在找什么,我希望。

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