私は正常に動作する作業中のjQueryスクリプトを持っています。つまり、その目的を果たします。
問題は、このスクリプトをより効率的にするにはどうすればよいかということです。
現在、スクリプトは、ユーザーが ID を持つ特定の HTML5 セクション タグの上にマウスを置いた (ホバーした) 瞬間にアクティブになります。この時点で、スクリプトは「noDisplay」という名前の既存のクラスを、サブメニュー リストを含む下位の nav タグから削除するため、コンテンツがユーザーに表示されるようになります。このサブメニュー リストは、3 ~ 4 レベルの深さになる場合があります。サブメニューはクラス (subMenu1、subMenu2、subMenu3、subMenu4 など) に保持されます。スクリプトは、指定されたセクション ID とそのサブレベル クラスのそれぞれを個別に提供するように記述されています。
基本的に、スクリプトは、マウス ホバー時にクラス「noDisplay」を削除して DOM と対話し、マウスを離すと同じクラスを復元します。(分かりやすい説明を心掛けています。ない場合はお尋ねください。)
ここに JSfiddle があります:ここにリンクの説明を入力してください
誰かがこれをより効率的に行う方法を提案してくれることを願っています。おそらく、より多くのセクション (#ID) とサブメニュー レベル (レベルごとのクラス) があります。
CSS プロパティ 'display: none;' の使用 および「表示:ブロック;」が最も簡単な解決策ですが、これは望ましくありません。なぜなら、検索ボットは、ユーザーまたはスクリーン リーダーに非表示のフラグが付けられたコンテンツをスキップすることを決定するからです。ここで使用されているクラス 'NoDisplay' は、コンテンツをユーザーに見えないようにし、スクリーン リーダー (したがって、ほとんどの検索ボット) に対する読みやすさを維持します。
したがって、基本的にスクリプト関数はそのまま残り、ホバー時にクラス「noDisplay」を削除および追加します。目標は、新しいセクションごとにコードを記述して現在のスクリプトを拡張するのではなく、各セクションにインスタンス変数を使用できる、より効率的なスクリプトを取得することです。
//section1$("#section1 .NavUL1 .subMenu1").hover(function(){
$(".NavUL2").removeClass("noDisplay"); //display
},function(){
$(".NavUL2").addClass("noDisplay"); //no display
});
$("#section1").hover(function(){
$("#section1 .NavUL1").removeClass("noDisplay"); //display
},function(){
$("#section1 .NavUL1").addClass("noDisplay"); //no display
});
$("#section1 .NavUL1 .subMenu1").hover(function(){
$(".NavUL2").removeClass("noDisplay"); //display
},function(){
$(".NavUL2").addClass("noDisplay"); //no display
});
//#section2
$("#section2").hover(function(){
$("#section2 .NavUL1").removeClass("noDisplay"); //display
},function(){
$("#section2 .NavUL1").addClass("noDisplay"); //no display
});
$("#section2 .subMenu1").hover(function(){
$(".subMenu1 .NavUL2").removeClass("noDisplay"); //display
},function(){
$(".subMenu1 .NavUL2").addClass("noDisplay"); //no display
});
$("#section2 .subMenu2").hover(function(){
$(".subMenu2 .NavUL2").removeClass("noDisplay"); //display
},function(){
$(".subMenu2 .NavUL2").addClass("noDisplay"); //no display
});
$("#section2 .subMenu3").hover(function(){
$(".subMenu3 .NavUL2").removeClass("noDisplay"); //display
},function(){
$(".subMenu3 .NavUL2").addClass("noDisplay"); //no display
});
$("#section2 .subMenu4").hover(function(){
$(".subMenu4 .NavUL2").removeClass("noDisplay"); //display
},function(){
$(".subMenu4 .NavUL2").addClass("noDisplay"); //no display
});