最近、プロジェクトにはシンプルなマルチレベルのドロップダウン メニューが必要になりました。しかし、ビジネスとスタイルの要件により、インターネット上にある多くのナビゲーション メニュー コントロールはシンプルにするのに適していないため、突然自分で作成することを思いつきました。 ~ 時間になったらやってください。ああ~ HTML 部分 コードをコピーします コードは次のとおりです: SuperFish レベル 1 li 1 レベル 2 li 1 a> レベル 2 li 2< /a> レベル 3 li 1 レベル 3 li 2 レベル 3 li 3 レベル 3 li 4< ;/a> レベル 3 li 5 レベル 3 li 6 ul> a href="javascript:void(0)" testid="jj">レベル 4 li 1 ;a href="javascript:void(0) " testid="kk">レベル 4 li 2 レベル 2 li 3 🎜>レベル 3 li 6レベル 3 li 7 レベル 3 li 8 レベル 3 li 9 レベル 3 li 10 2 li 4 レベル 3 li 11 ;/li> レベル 3 li 12 ;レベル 3 li 13 レベル 3 li 14 ;li>レベル li 2 レベル 11 Javascript 部分コードをコピー コードは次のとおりです: <br>var NavigationBar = function () { <br>//使用する場合は、testid 属性を href 属性に置き換えます。 🎜>var currentUrlHref = "jj"; <br>var root = $("ul[hid='root']"); <br>$(root).find(">li").attr("first_level) ", true); <br>$(root).find(">li>a").addClass("nav_first_style"); <br>//展開可能な要素を再帰的に検索し、展開切り替えイベントをバインドします<br> var searchChildren = function (root) { <br>if (root.find(">li").length > 0) { <br>$(root).addClass("ul_style") <br> var liChildren = root.find(">li"); <br>$(liChildren).each(function (idx, item) { <br>searchChildren($(item)); <br>}) <br> } if (root.find(">ul").length > 0) { <br>$(root).addClass("li_style"); <br>if ($(root).attr("first_level "); != true.toString()) { <br>$(root).find(">a").addClass("li_style_a"); <br>} <br>var aLink = $(root). ">a"); <br>//初期読み込み中に、現在の URL がナビゲーション バーの内容と一致するかどうかを判断します<br>if (currentUrlHref == $(aLink).attr("testid")) { <br>findInitPosition(aLink); <br>} <br>$(aLink).toggle(function () { <br>$(this).addClass("li_style_a_selected"); <br>$(this).parent( ).find(">ul").show("fast"); <br>//第 1 レベル以外のノードの下にあるすべての兄弟要素を非表示にします<br>if ($(this).parent().attr ( "first_level") != true.toString()) { <br>$(this).parent().siblings().find(">a").removeClass("li_style_a_selected"); this).parent().siblings().each(function (idx, item) { <br>removeClassAndHide(item); <br>}) <br>} else { <br>$(this).addClass( " nav_first_style_selected"); <br>$(this).removeClass("li_style_a_selected"); <br>$(this).parent().siblings().find(">a").removeClass("nav_first_style_selected" ) ; <br>$(this).parent().siblings().each(function (idx, item) { <br>removeClassAndHide(item); <br>}) <br>} <br>}, function ( ) { <br>if ($(this).parent().attr("first_level") == true.toString()) { <br>$(this).addClass("nav_first_style_selected"); (this).parent().siblings().find(">a").removeClass("nav_first_style_selected"); <br>} <br>removeClassAndHide($(this).parent()); }) <br>var ulChildren = root.find(">ul"); <br>$(ulChildren).each(function (idx, item) { <br>$(item).hide(); <br>searchChildren($(item)); <br>} else { <br>if ($(root).attr("first_level") != true.toString()) { <br> $ (root).find(">a").addClass("li_style_a"); <br>} <br>$(root).addClass("li_style"); () { <br>if ($(root).attr("first_level") != true.toString()) { <br>$(this).find(">a").addClass("li_style_a_selected " ); <br>$(this).siblings().find(">a").removeClass("li_style_a_selected"); <br>$(this).siblings().each(function (idx, item ) { <br>removeClassAndHide(item); <br>addFirstLevelClass(item); <br>}) <br>} else { <br>$(this).find(">a").addClass("nav_first_style_selected") ); <br>$(this).find(">a").removeClass("li_style_a_selected"); <br>$(this).siblings().find(">a").removeClass( " nav_first_style_selected"); <br>removeClassAndHide(this); <br>} <br>}) <br>if (currentUrlHref == $(root).find(">a").attr("testid") ) { <br>findInitPosition($(root).find(">a")); <br>} <br>} <br>} <br>//初期位置を再帰的に検索します<br>var findInitPosition = function (aLink) { <br>var currentLi = $(aLink).parent(); <br>if ($(currentLi).parent().parent().find(">a").length > 0 ) { <br>findInitPosition($(currentLi).parent().parent().find(">a")); <br>} <br>if ($(currentLi).find(">ul ").length > 0) { <br>$(currentLi).find(">ul").show("fast"); <br>} <br>if ($(currentLi).attr(" first_level") != true.toString()) { <br>$(currentLi).find(">a").addClass("li_style_a_selected"); <br>} else { <br>$(currentLi). find(">a").addClass("nav_first_style_selected"); <br>} <br>} <br>//すべての子ノードの選択されたスタイルを再帰的に削除します <br>var RemoveClassAndHide = function (li) { <br>if ($(li).attr("first_level") != true.toString()) { <br>$(li).find(">a").removeClass("li_style_a_selected"); >$(li).find(">ul").hide("fast"); <br>if ($(li).find(">ul").length > 0) { <br> $(li).find(">ul>li").each(function (idx, item) { <br>removeClassAndHide(item); <br>}); else if ( $(li).attr("first_level") == true.toString()) { <br>$(li).find(">ul").hide("fast"); ).find(">ul>li").each(function (idx, item) { <br>removeClassAndHide(item); <br>}) <br>} else { <br>$(li). (">ul").show("fast"); <br>$(li).find(">ul>li").each(function (idx, item) { <br>removeClassAndHide(item ) ; <br>}) <br>} <br>} <br>//第 1 レベルのノード スタイルを上向きに再帰的に追加します<br>var addFirstLevelClass = function (li) { <br>if ($(li).attr ( "first_level") != true.toString()) { <br>addFirstLevelClass($(li).parent().parent());else { <br>if (!$(li).find(">a").hasClass("nav_first_style_selected")) { <br>$(li).find(">a").addClass(" nav_first_style_selected"); <br>$(li).siblings().find(">a").removeClass("nav_first_style_selected"); <br>} <br>} <br>} <br>//作成Navigation<br>var createNav = function () { <br>searchChildren(root); <br>createNav(); <br>var initNav = new NavigationBar(); /script> <br><br> <br>ただし、まだ jquery のような記述メソッドにカプセル化されていません。実際には、引き続きコントロールにカプセル化できます~ <br> </div> </div>