将.addClass()与其他函数绑在一起?

时间:2010-08-20 18:09:24

标签: jquery jquery-selectors

假设手风琴下拉式采用标准形式:

<ul>
  <li>
  <a href="#">Main Element</a>
    <ul>
      <li>
      <a href="#">Dropdown Element</a>
      </li>
    </ul>
  </li>
</ul>

当点击父元素链接时,我正在使用jQuery进行扩展:

var $j = jQuery.noConflict();

function initMenus() {
    $j('ul.menu ul').hide();
    $j.each($j('ul.menu'), function(){
        $j('#' + this.id + '.expandfirst ul:first').show();
    });
    $j('ul.menu li a').click(
        function() {
            var checkElement = $j(this).next();
            var parent = this.parentNode.parentNode.id;

            if($j('#' + parent).hasClass('noaccordion')) {
                $j(this).next().slideToggle('normal');
                return false;
            }
            if((checkElement.is('ul')) && (checkElement.is(':visible'))) {
                if($j('#' + parent).hasClass('collapsible')) {
                    $j('#' + parent + ' ul:visible').slideUp('normal');
                }
                return false;
            }
            if((checkElement.is('ul')) && (!checkElement.is(':visible'))) {
                $j('#' + parent + ' ul:visible').slideUp('normal');
                checkElement.slideDown('normal');
                return false;
            }
        }
    );
}
$j(document).ready(function() {initMenus();});

单击时向主元素添加一个类(也就是在下拉列表扩展时启用了类)我试图使用.toggleClass(className)而没有运气,这很可能是我的定位。我在哪里可以添加此元素以获得所需的效果?

1 个答案:

答案 0 :(得分:0)

尝试替换此行:

var parent = this.parentNode.parentNode.id;

使用:

var parent = $j(this).parent().closest('a').attr('id');

而不是:

$j(this).next().slideToggle('normal');

尝试:

$j(this).parent().closest('a').slideToggle('normal');

closest向上移动以查找最接近您链接的链接。