我正在开发一个Wordpress主题,使用自建的jQuery手风琴导航:
// 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中工作。
所以简而言之:如果我单击li
没有嵌套ul
的ul li a
,我希望被定向到一个页面。然而,当我这样做的时候,什么也没有发生。.slideUp()
函数工作得很好,我可以单击嵌套ul
中的链接。我的选择器错了吗?我给wp_nav_menu()
函数错误的变量?
这是footer.php
的相关部分:
<?php wp_nav_menu( array(
'container_class' => 'footer-navigation clearfix',
'menu_id' => 'footer-accordion'
)); ?>
Wordpress是这样处理的:http://jsfiddle.net/vKmfu/
jQuery(this).parent().has('ul')
部分是罪魁祸首。与大多数jQuery函数一样,这个调用总是返回一个jQuery对象。当JavaScript对象在booelan上下文中使用时,它被计算为true
,除非它是null
。你需要的是if(jQuery(this).parent().has('ul').length > 0) { ... }
顺便说一下,选择器'#footer-accordion > li > a'
不会影响第二级或更多级的链接。>
是children
选择器。您可能需要一个descendant
选择器。