2017-01-13 10 views
1

Jqueryに関する質問があります。 ul.childrenを持たないLink1をクリックすると、current_page_itemクラスが追加されます(Wordpressによって自動的に追加されるため、このコードには表示されません)。次に、Link2のul.childrenを非表示にする必要があります。Jqueryが利用可能であれば、子リンクを表示または非表示にする

リンクpage_item_has_children current_page_itemの両方を持つリンク2をクリックすると、この場合はul.childrenが表示されます。私は私のコードが迷惑行為を試みたが、それは絶対に間違っていることを知っている。あなたのアドバイスを教えてください。どうもありがとう。

if($(.navigation).hasClass(page_item_has_children)){ 
 
    (.navigation .page_item_has_children .children).hide(); 
 
}else if($(.navigation).hasClass(page_item_has_children) && $(.navigation).hasClass(current_page_item)){ 
 
    (.navigation .page_item_has_children .children).show(); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<ul class="navigation"> 
 
<li><a href="#">Link1</a></li> 
 
<li class="page_item_has_children current_page_item"><a href="#">Link2</a> 
 
    <ul class="children"> 
 
\t <li class="page_item"><a href="#">Link3</a></li> 
 
\t <li class="page_item "><a href="#">Link4</a></li> 
 
    </ul> 
 
</li> 
 
</ul>

+0

まず最初に、あなたはセレクター名の前後に何らかの引用符が必要です。 2つ目は、if文のそれぞれの中で、$()を使ってnav要素を選択することではありません。ちょっとした事が私たちを上げています... – Snowmonkey

+0

あなたのコメントをありがとう。私はまだそれについての接着剤を持っているので、JqueryとJavaを学んでいます。あなたは運動でJqueryを学ぶ良い出典がありますか?私はそれをgoogledしている場合は、共有してください。 – Tony

+0

Sitepointにはかなりの数の本があります。「初心者から忍者まで」シリーズをチェックしてください。本当に、私はjQueryの最初のベータテスターの一人で、ケンブリッジの最初のjQueryConに参加しましたが、まだTシャツを持っています!練習を実践するために来て... – Snowmonkey

答えて

0

どのように簡単に、単純にクリック1の子供を示し、その後、すべてのネストされたUL要素を隠してはどうですか?それは最初にすべてのネストされたULSが隠されている、ロード時になるように、それを編集

$(".navigation li").each(function() { 
 
    // When we first load, hide all nested menus. 
 
    $(this).children("ul").hide(); 
 
    if (localStorage.menuNumber) { 
 
    $(".navigation li").eq(localStorage.menuNumber).children().show(); 
 
    } 
 
    }) 
 
    .on("click", function() { 
 
    // When any top-level ul is clicked, hide the 
 
    // nested menus then show the current one. 
 
    $(this).parent().children().find("ul").hide(); 
 
    $(this).children().show(); 
 
    // We also want to persist this selection, 
 
    // should the user refresh... 
 
    localStorage.menuNumber = $(this).index; 
 
    
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 

 
<ul class="navigation"> 
 
    <li><a href="#">Link1</a> 
 
    </li> 
 
    <li class="page_item_has_children current_page_item"><a href="#">Link2</a> 
 
    <ul class="children"> 
 
     <li class="page_item"><a href="#">Link3</a> 
 
     </li> 
 
     <li class="page_item "><a href="#">Link4</a> 
 
     </li> 
 
    </ul> 
 
    </li> 
 
</ul>

。お役に立てれば!クリックしたメニューをローカルストレージに保存するためにもう一度編集します。残念ながら、セキュリティ上の理由から、これはここでは機能しません。フィドルとしてそれを参照してください:https://jsfiddle.net/snowMonkey/fnuvvLwb/

+0

コードを編集して作業ベットを得るには?私がLink1にいて、リフレッシュブラウザを押すと '' u.children'''が表示されるので、Link1を再度クリックして '' u.children'''を隠す必要があります。 – Tony

+0

ありがとうございます。今は動作しますが、もし私がLink2にいてブラウザをリフレッシュすると、Link2を再びクリックするまで '' u.children'''は隠されています。 – Tony

+0

そしてそれがあります。リフレッシュすると、何かのすべての証拠がクリアされます。並べ替えのポイントは、通常、ページデータは保持されません。これを行うには、localStorageのようなものがあります。基本的には、クリックされたメニュー項目を示すクッキーを保存してから、読み込んだ後に読み込みます。 – Snowmonkey

0

このソリューションは、あなたのシナリオに向けて、もう少しです(コメントをもとに編集した):JavaScriptのセレクタのすべてで

$(".navigation li").on("click", function() { 
 
    if ($(this).hasClass("page_item_has_children") && $(this).hasClass("current_page_item")) { 
 
    $(".navigation .children").show(); 
 
    } else { 
 
    $(".navigation .children").hide(); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul class="navigation"> 
 
    <li><a href="#">Link1</a> 
 
    </li> 
 
    <li class="page_item_has_children current_page_item links"><a href="#">Link2</a> 
 
    <ul class="children"> 
 
     <li class="page_item"><a href="#">Link3</a> 
 
     </li> 
 
     <li class="page_item "><a href="#">Link4</a> 
 
     </li> 
 
    </ul> 
 
    </li> 
 
</ul>

+0

ご返信ありがとうございます。 Link1は '' 'li'''に' '' page_item_has_children'''クラスを持っていません。このクラスは '' ul.children'''があるときにWordpressによって自動的に追加されます。 – Tony

+0

申し訳ありません、私は編集しました。 – Syden

関連する問題