0

我正在开发一个使用自建 jQuery 手风琴进行导航的 Wordpress 主题:

// jQuery Footer Navigation Slide
jQuery('#footer-accordion > li > a').on('click', function(e){
    if(jQuery(this).parent().has('ul')) {
        e.preventDefault();
        if(!jQuery(this).hasClass('open')) {
            jQuery('#footer-accordion li ul').slideUp(350);
            jQuery('ul li a').removeClass('open');
            jQuery(this).next('ul').slideDown(350);
            jQuery(this).addClass('open');
        } else if(jQuery(this).hasClass('open')) {
            jQuery(this).removeClass('open');
            jQuery(this).next('ul').slideUp(350);
        }
    }
});

当我用纯 HTML 构建它时,它工作得很好,但是我现在无法将它集成到我的 Wordpress 主题中。似乎e.preventDefault()我已经进入那里也阻止了ul li a没有ul内部的菜单项()上的默认值(按照链接)。我认为我的选择器很好,因为它在我的 HTML 中工作。

简而言之:如果我单击没有嵌套ul li a的. 但是,当我这样做时,什么也没有发生。该功能工作得很好,我可以单击嵌套中的链接。我的选择器错了吗?我是否给函数提供了错误的变量?liul.slideUp()ulwp_nav_menu()

这是来自的相关部分footer.php

    <?php wp_nav_menu( array(
        'container_class'   => 'footer-navigation clearfix',
        'menu_id'           => 'footer-accordion' 
)); ?>

这就是 Wordpress 所做的:http: //jsfiddle.net/vKmfu/

4

1 回答 1

1

jQuery(this).parent().has('ul')部分是罪魁祸首。这个调用总是返回一个 jQuery 对象,就像大多数 jQuery 函数一样。当 JavaScript 对象在布尔上下文中使用时,它被评估为true除非它是null. 你需要的是 if(jQuery(this).parent().has('ul').length > 0) { ... }

顺便说一句,选择器'#footer-accordion > li > a'不会影响第二级或更高级别的链接。是>一个children选择器。你可能需要一个descendant选择器。

于 2013-05-18T11:29:20.143 回答