wordpressの質問です。wp_list_categories()を使えば、カテゴリ一覧をリンク付きで、表示することができますが、現在開閉式のリストを作っているのですが、リンクは子リストのみにしたいのですが、無理でしょうか。つまり親タグをクリックしてもリンクに飛ばないただの文字みたいにしたいです。リンクに飛ぶと何が問題かというと、今はhoverなので、良いですが、.clickに変えた時に、子リストが表示されずに親のリンク先に飛んでしまいます。
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> </head> <body> <div class="wrap"> <ul id="CatList"> <?php wp_list_categories( array('title_li' => '', 'taxonomy' => 'tag_name', 'show_count' => 0 ) ); ?> </ul> <script> $(function() { var $sub = $('.children'); $(".children").hide(); $('.cat-item-26').hover( function(){ // stop関数を追加 $sub.stop().eq(0).show(); }, function(){ // stop関数を追加 $sub.stop().eq(0).hide(); } ); }); $(function() { var $sub = $('.children'); $(".children").hide(); $('.cat-item-47').hover( function(){ // stop関数を追加 $sub.stop().eq(1).show(); }, function(){ // stop関数を追加 $sub.stop().eq(1).hide(); } ); }); </script> </div> </body> </html>
<!-- リストの構造 --> <ul> <li class="cat-item cat-item-56 current-cat-parent current-cat-ancestor"><a href="" >親1</a> <ul class='children'> <li class="cat-item cat-item-49 current-cat"><a href="" >子1</a> </li> </ul> </li> <li class="cat-item cat-item-55"><a href="" >親2</a> <ul class='children'> <li class="cat-item cat-item-52"><a href="" >子2</a> </li> </ul> </li> <li class="cat-item cat-item-48"><a href="" >子がない独立したリスト(これはリンクに飛ぶ)</a> </li> </ul>
途中経過1
$(function(){ $('a').click(function(){ return false; }) });
これを追記すればリンクに飛ばないことは確認出来ました。<ul>を持つ<li>ってどう指定すればいいのか難しくて案あったらお願いします。
途中経過2
$(function(){ $('li').has('ul').click(function(){ return false; }) });
こうしてみると、親要素も子要素もリンクに飛ばないんですよね。(階層持たないリストは飛びます。)子要素も影響を受けてしまっているんですよね。
【質問1】
.children('a') // 子カテゴリを持つ親カテゴリの a要素(リンク無効にする要素)
回答ありがとうございます。親リストのみリンク無効は実装できました。
.children('a')の部分なのですが、まだ自分の理解が及んでいなく。
子供のリンクを無効にするイメージならわかるのですが、なぜこれで親のリンクを無効にすることができるのでしょうか。
【質問2】
現在はhoverなので、期待した動作ができるのですが、最終的にはclickにしたいです。その場合だと
.on('click', function(){ return false; });
の影響を受けてしまっているのか、クリックしてもリストが展開されないという問題が起きてしまいます。何かいい方法がないでしょうか。
【追記】
$(function() { var $sub = $('.children'); $(".children").hide(); $('.cat-item-8').click( function(){ // stop関数を追加 $sub.stop().eq(0).show(); }, function(){ // stop関数を追加 $sub.stop().eq(0).hide(); } ); }); $(function() { var $sub = $('.children'); $(".children").hide(); $('.cat-item-11').click( function(){ // stop関数を追加 $sub.stop().eq(1).show(); }, function(){ // stop関数を追加 $sub.stop().eq(1).hide(); } ); });; $('#CatList > li > ul') // 子カテゴリの ul .closest('li') // 最も近い親要素を探す(この場合 #CatList の中で ul を持つ li) .children('a') // 子カテゴリを持つ親カテゴリの a要素(リンク無効にする要素) .on('click', function(e){ e.preventDefault(); });
ありがとうございます。質問1は理解できました。質問2の回答を読んで、このようなコードを試してみました。しかし、クリックしても親リストを開閉できなくなりました。<a>タグだけが無効、<li>は有効を期待していましたが、クリックする場所が同じだからなのか、全部のクリックイベントが無効になってしまった感じです。(この辺説明ややこしくてすみません。)ちょっと考えます。<a>タグのクリックイベントは無効になるが、<li>タグのクリックイベントは有効という理解だったので何故なのか不思議です。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/18 12:48