为什么$('a.current')。removeClass('current');不管用?

时间:2010-10-08 11:36:51

标签: javascript parent-child jquery jquery-tools

为什么$('a.current').removeClass('current');不能用于此jquery选项卡? http://jsfiddle.net/laukstein/ytnw9/8/

 //full JS in http://jsfiddle.net/laukstein/ytnw9/8/
 $(function(){
 var list=$('#list'),
     elementsPerRow=-1,
     loop=true,
     // find first image y-offset to find the number of images per row
     topOffset=list.find('a:eq(0)').offset().top,
     numTabs=list.find('li').length-1,
     current,newCurrent;

 function changeTab(diff){
  // a.current set by jQuery Tools tab plugin
  $('li.current').removeClass('current');
  current=list.find('a.current').parent('li').addClass('current').index();
  newCurrent=(loop)?(current+diff+numTabs+1)%(numTabs+1):current+diff;
 if(loop){
   if(newCurrent>numTabs){newCurrent=0;}
   if(newCurrent<0){newCurrent=numTabs;}
 }else{
   if(newCurrent>numTabs){newCurrent=numTabs;}
   if(newCurrent<0){newCurrent=0;}
 }
  // don't trigger change if tab hasn't changed (for non-looping mode)
 if (current!=newCurrent){
   list.find('li').eq(current).removeClass('current');
   list.find('li').eq(newCurrent).addClass('current').find('a').trigger('click'); // trigger click on tab
 }
 }
 list
  // set up tabs
  .tabs("#content",{effect:'ajax',history:true, xonBeforeClick:function(){changeTab(0)}})
  // find number of images on first row
  .find('a').each(function(i){
      if(elementsPerRow<0&&$(this).offset().top>topOffset){
         elementsPerRow=i;
      }
  });
 //$('a').filter('.current').parent('li').addClass('current'); // Why does not work?
 //$('a.current').parent('li').addClass('current'); // Why does not work?

 $('ul#list li').click(function(){$('li.current').removeClass('current');$(this).addClass('current')});
 $('a.current').removeClass('current'); // Why does not work?
});

HTML:

<ul id="list">
    <li><a href="one.html" title="one">1</a></li>
    <li><a href="two.html" title="two">2</a></li>
    <li><a href="three.html" title="three">3</a></li>
</ul>
<div id="content"></div>​

3 个答案:

答案 0 :(得分:1)

据我所知(我还没有运行代码的工作页面),但似乎“当前”类仅适用于“li”元素。

我认为您的$(“a.current”)将始终包含0个元素。

答案 1 :(得分:1)

您的.removeClass()来电正在 清除课程,但是您的历史插件中的这一行:

links.eq(0).trigger("history", [h]);

正在触发你的加载第一个链接,如<iframe>中的默认值...再次选择该链接,将类添加回来,最终是选项卡插件选择第一个选项卡并在此处行:

tab.addClass(conf.current);

将类添加回锚点(此时锚点为tab)。

Here's your fiddle updated with an alert to see what's happening a bit easier

答案 2 :(得分:1)

它不起作用,因为您的页面中没有任何<a>类.current

你可以自己检查一下:

alert($('a.current').length);

会给你0 ...