将 .addClass() 与其他函数绑定?

发布于 2024-09-15 16:23:50 字数 1519 浏览 0 评论 0原文

假设手风琴下拉菜单具有以下标准形式:

<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) 但没有运气,很可能符合我的定位。我可以在哪里添加这个元素以获得所需的效果?

Assuming an accordion dropdown with the standard form of:

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

I'm using jQuery to expand when the parent element link is clicked:

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

To add a class to the Main Element when clicked (aka the class is enabled anytime the dropdown is expanded) I'm trying to use .toggleClass(className) without luck, most likely to my positioning. Where can I add this element to get the desired effect?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

木落 2024-09-22 16:23:50

尝试将此行: 替换

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 向上移动以查找最近的链接,在您的情况下是主链接。

Try replacing this line:

var parent = this.parentNode.parentNode.id;

with:

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

And instead of:

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

Try:

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

The closest moves up to find the closest link which in your case is main link.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文