2013-02-27 34 views
1

由于我的CMS使用输出导航项目的方式,导致出现问题。之前我曾问过这个问题,并且收到了一个应该可以工作的解决方案,但是由于JS不是我的强项,我不明白。一个简短的背景。我的CMS输出如下菜单项:由于CMS输出导致的JQuery Accordion问题

<ul id="amenu"> 
    <li><a href="#">Home</a></li><li><span class="currentbranch0"> 
     <a href="">Content</a></span> 
     <ul class="multilevel-linkul-0" title=""> 
      <li><a href="">Content 2</a></li> 
      <li><span class="currentbranch1"><a href="">Content 3</a></span></li> 
     </ul> 
    </li> 
</ul> 

Wheres the issue?那么,CMS在一个范围内输出活动选择器类,并根据代码可以看到的等级currentbranchN递增它。

我收到的帮助在这里另一个线程,我们已经得到了这一点:

$(document).ready(function() { 
    $('#amenu > li > a').click(function(){ 
    if ($(this).closest("span[class*='currentbranch']").attr('class') != 'active'){ 
     $('#amenu li ul').slideUp(); 
     $(this).next().slideToggle(); 
     $('#amenu li a').closest("span[class*='currentbranch']").removeClass('active'); 
     $(this).closest("span[class*='currentbranch']").addClass('active'); 
    } 
    }); 
}); 

但它只是不作为手风琴工作,请参阅的jsfiddle这里:http://jsfiddle.net/EKe2R/5/。我认为我已经接近它的工作,但由于我的JS技能基本上是最基本的,所以我似乎无法摆脱困境。我基本上需要扩展菜单(如果选择了第二级项目)并使用CMS输出的导航项目突出显示活动对象currentbranch1。

谢谢! :)

尼克

编辑:我想补充这一点,主要问题手风琴不起作用的是,即使是第二级的CMS输出为第一级也导致代码失败

<span class="currentbranch0"></span> 

编辑::

我要去尝试硬编码的东西滑下去,这里是我tryed和失败的码:

$(document).ready(function() { 
    $('#amenu > li > a,#amenu > li > span > a').click(function(){ 
     //alert($(this).closest("span[class='currentbranch0']").attr('class')); 
    if ($(this).closest("span[class='currentbranch0']").attr('class') != 'active'){ 
     $('#amenu li ul').slideUp(); 
     $(this).parents('li').children('ul').slideDown(); 
     $('#amenu li a').closest("span[class='currentbranch0']").removeClass('active'); 
     $(this).closest("span[class='currentbranch0']").addClass('active'); 
    } 
    }); 
}); 

http://jsfiddle.net/GgKyV/1/小提琴这里

而且我怎么摆弄自动打开accortion是被选中的链接,第一级LIS才会有实际的链接到网页内容,不dummys

干杯

回答

2

您选择的锚链接是li元素的第一个孩子

$('#amenu > li > a') 

但在你的HTML的锚链接是老二

<li><span class="currentbranch1"><a href="">Content 3</a></span></li> 

此外,您的方法不能检查活动类,但可以通过hasClass函数检查它。

看是否有此拨弄你的作品

http://jsfiddle.net/fdcd6/1/

1

你希望下面的结果。请检查下面的链接。

http://jsfiddle.net/EKe2R/11/

只有js代码改变。

$(document).ready(function() { 
     $('#amenu > li > a,#amenu > li > span > a').click(function(){ 
      //alert($(this).closest("span[class*='currentbranch']").attr('class')); 
     if ($(this).closest("span[class*='currentbranch']").attr('class') != 'active'){ 
      $('#amenu li ul').slideUp(); 
      $(this).parents('li').children('ul').slideDown(); 
      $('#amenu li a').closest("span[class*='currentbranch']").removeClass('active'); 
      $(this).closest("span[class*='currentbranch']").addClass('active'); 
     } 
     }); 
}); 
+0

,我认为是一些进展,现在:)。一旦currentbranch0类是活动的,我如何让手风琴展开?上述代码不适用于CMS(手风琴在按下后直接向上滑动)。我认为这是由于CMS使跨度活跃?即使这是艰难的编码currentbranch0分支的开放,如果选中它将是伟大的:) – yoyo 2013-02-27 16:12:08

+0

是否我使用.click()是我的问题在这里?我需要活跃的负载打开,事实上它不会打开点击,因为点击会将用户发送到其他页面,它应该打开 – yoyo 2013-02-27 16:30:25

+0

我认为您应该添加您的基于jsfiddle的内容cms。从上述评论中分析出你想要的东西是非常困难的。 – user991554 2013-02-28 05:13:54

1

使用此...

$('.currentbranch0').on('click', function(){ 
     $(this).next().slideToggle('slow'); 
    }); 

而且看到这个jSfiddle Example