我正在使用 wp_nav_menu 加载 WordPress 菜单,如下所示:
<?php
wp_nav_menu(
array(
'theme_location' => 'menu-1',
// 'menu_id' => 'primary-menu',
// 'menu_class' => 'menu-desktop',
'items_wrap' => '<ul id="primary-menu" class="menu-desktop">%3$s <li class="toggle-search"><i class="material-icons search-toggle-icon">search</i><div class="nav-search"><form role="search" method="get" id="searchform" action="'.home_url( '/' ).'"><input type="text" value="Search KILJ" name="s" id="s" /><button type="submit" id="searchsubmit"><i class="material-icons">search</i></button></form></div></li</ul>',
)
);
?>
我尝试将 javascript 变量分配给“search-toggle-icon”和“nav-search”类,并使用这些变量来切换可见性。这样做是行不通的。如果我不使用 JS 变量而仅引用 css 类“search-toggle-icon”和“nav-search”,则 js 显示/隐藏有效,但如果我创建变量并尝试使用 js 变量进行显示/隐藏,它不起作用。
我创建了一个CodePen 示例,显示使用不是 wordpress 生成的菜单的变量可以正常工作,但是如果我将相同的 javascript 代码与 wp_nav_menu() 生成的菜单一起使用,它会失败。
如果我 console.log 变量,控制台会很好地显示这些节点,即使 jquery .hide() 执行了“display:none” - 它实际上并没有隐藏网页上的 div。就好像 jquery 在网站完全加载之前运行,并且变量的 console.log 显示 jquery 修改后的 html,即使修改后的 HTML(添加 display: none;)在实时 HTML 中不存在。
这是我的 javascript 代码,由于使用了两个类的变量(search-toggle-icon 和 nav-search),它不起作用。如果我将所有对这些变量的引用切换为类名,一切都会很好。
'use strict';
$(document).ready(function(){
var navSearchBox = document.querySelector('.nav-search');
var searchIcon = document.querySelector('.search-toggle-icon');
var isNavMobile = window.matchMedia( '(max-width: 1060px)' );
// Define a callback function for the event listener.
function handleNavMediaQueryChange( e ) {
if ( e.matches ) {
//show nav search on mobile
$( navSearchBox ).show();
$( navSearchBox ).attr( 'aria-expanded', 'true' );
$( navSearchBox ).attr( 'aria-hidden', 'false' );
} else {
//hide nav search on desktop
$( navSearchBox ).hide();
$( navSearchBox ).attr( 'aria-expanded', 'false' );
$( navSearchBox ).attr( 'aria-hidden', 'true' );
$( searchIcon ).off( 'click' ).on( 'click', function(){
var iconText = $(".nav-search").is(':visible') ? 'search' : 'close';
$(searchIcon).text(iconText);
$( navSearchBox ).slideToggle();
$( navSearchBox ).attr( 'aria-hidden', $( '.nav-search' ).attr( 'aria-hidden' ) === 'false' ? 'true' : 'false' );
});
}
}
// Run the isNavMobile change handler once.
handleNavMediaQueryChange( isNavMobile );
// Add the callback function as a listener to the query list.
isNavMobile.addEventListener( 'change', handleNavMediaQueryChange );
});
我已经尝试测试 js 变量的创建,并为我的页面上不属于 WP_NAV_MENU 的项目使用这些变量,它们工作得很好。这只是 wp_nav_menu() 中不起作用的项目的 js 变量用法。
wp_nav_menu 是否有一些东西使 JS 变量无法正常工作?在使用这些变量之前,我是否需要做更多的事情来要求页面加载并准备好?有趣的是,如果我 console.log 这些变量,它们会成功地向我显示正确的节点,但执行 JS(显示/隐藏等)不起作用。