アプリ版:「スタンプのみでお礼する」機能のリリースについて

グロナビを作っているのですが、思った通りに動作しないので相談させてください。

【HTML】
<ul id="gnav">
<li><a href="">リンク1</a></li>
<li><a href="">リンク2</a>
<ul>
<li><a href="">下層リンク1</a></li>
<li><a href="">下層リンク2</a></li>
<li><a href="">下層リンク3</a></li>
</ul>
</li>
<li><a href="">リンク3</a>
<ul>
<li><a href="">下層リンク1</a></li>
<li><a href="">下層リンク2</a></li>
<li><a href="">下層リンク3</a></li>
</ul></li>
<li><a href="">リンク4</a>
<ul>
<li><a href="">下層リンク1</a></li>
<li><a href="">下層リンク2</a></li>
<li><a href="">下層リンク3</a></li>
</ul></li>
</ul>
ul liの入れ子で最大2階層です。1階層目は常時表示させておき、クリックすると下層のULの一覧が表示するようにしたいです。

【css】
ul#gnav ul{
display:none;
}

【JS】
$(function(){
$("ul#gnav li").click(function(){
$(this).next("ul").slideToggle();
});
});

こちらに設置しました。
http://jsbin.com/ruqejabole/

現状でもまともに動いていない(ホントに作っているほうとまた違った動きで動かないですが・・・)
のですが、
・上記のjQueryの書き方のどこが悪いか
・$("ul#gnav li").click()だと、途中で下層がないリンクがあった場合、その次のULが開いてしまわないか
・$("ul#gnav li").click()だと、ul ul liも該当してしまうが問題ないか
を知りたいです。

よろしくおねがいします。

質問者からの補足コメント

  • HTMLを間違えました。
    下層がある場合は上層にリンクはつきません。

    <ul id="gnav">
    <li><a href="">リンク1</a></li>
    <li>リンク2
    <ul>
    <li><a href="">下層リンク1</a></li>
    ・・・
    <li><a href="">下層リンク3</a></li>
    </ul>
    </li>
    <li>リンク3
    <ul>
    <li><a href="">下層リンク1</a></li>
    ・・・
    <li><a href="">下層リンク3</a></li>
    </ul></li>
    <li>リンク4
    <ul>
    <li><a href="">下層リンク1</a></li>
    ・・・
    <li><a href="">下層リンク3</a></li>
    </ul></li>
    </ul>

      補足日時:2015/06/20 18:36

A 回答 (1件)

こんなかんじでしょうか?




<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="ja">
<head><title>test</title>
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Script-Type" content="text/javascript">

<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">google.load("jquery","1");</script>

<script type="text/javascript">
$(function(){
$("#gnav>li").click(function(){
$(">ul", this).slideToggle();
});
$("#gnav>li>ul").hide();
});
</script>

</head>
<body>

<ul id="gnav">
<li><a href="">リンク1</a></li>

<li>リンク2
<ul>
<li><a href="">下層リンク1</a></li>
<li><a href="">下層リンク2</a></li>
<li><a href="">下層リンク3</a></li>
</ul>
</li>

<li>リンク3
<ul>
<li><a href="">下層リンク1</a></li>
<li><a href="">下層リンク2</a></li>
<li><a href="">下層リンク3</a></li>
</ul></li>

<li>リンク4
<ul>
<li><a href="">下層リンク1</a></li>
<li><a href="">下層リンク2</a></li>
<li><a href="">下層リンク3</a></li>
</ul></li>
</ul>

</body>
</html>
    • good
    • 0
この回答へのお礼

ありがとうございます。
>なんて使えるんですね。

$(this).children("ul").slideToggle();

で同様の動作ができました。

お礼日時:2015/06/23 16:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!