【问题标题】:On click show or hide the children links in javascript or jquery单击显示或隐藏 javascript 或 jquery 中的子链接
【发布时间】:2015-12-04 01:49:06
【问题描述】:

我需要侧边菜单导航方面的帮助。

单击主菜单“Divisions”链接时,我应该显示子元素,即链接1、链接2、链接3等。

如果我再次点击主菜单“Divisions”链接,应隐藏子项(应隐藏链接1、链接2、链接3)。

到目前为止,我已经在 javascript 中尝试过

var x = document.getElementById("p968").className = "classToKeep";

和要隐藏的 CSS

.classToKeep{
      color:#fff;
      }
       .classToKeep ul{
      display:none;
      } 

但不成功,如何在 jquery 或 Javascript 中做到这一点。

谁能帮忙解决这个问题。

请检查这个 JS FIDDLE 链接: http://jsfiddle.net/a3x004fs/

HTML

<ul class="vlist">
  <li id="p968" class="active">
    <strong>Divisions</strong>
    <ul>
      <li id="p981"><a href="link1.html" >link1</a></li>
      <li id="p982"><a href="link2.html" >link2</a></li>
      <li id="p983"><a href="link3.html" >link3</a></li>
      <li id="p1064"><a href="link4.html" >link4</a></li>
    </ul>
  </li>
  <li id="p969"><a href="#">mainlink2</a></li>
  <li id="p96955"><a href="#">mainlin3</a></li>
  <li id="p989"><a href="#">mainlink4</a></li>
</ul>

CSS

@media all
{
    /* title */
    h6.vlist {
        font-weight:bold;
        font-size:100%;
        width:90%;
        padding:3px 0px 3px 10%; /* LTR */
        margin:0;
        color:#444;
        background-color:#fff;
        border-top:2px #ddd solid;
        border-bottom:4px #888 solid;
    }

    .vlist {
        width:100%;
        overflow:hidden;
        margin:0 0 1.5em 0;
        list-style-type:none;
    }

    .vlist ul {
        list-style-type:none;
        margin:0;
        padding:0;
    }

    .vlist li {
        float:left; /* LTR */
        width:100%;
        margin:0;
        padding:0;
    }

    .vlist a,
    .vlist strong,
    .vlist span {
        display:block;
        padding:3px 0px 3px 10%;
        text-decoration:none;
        border-bottom:1px #ddd solid;
    }

    .vlist a,
    .vlist a:visited {
        color:#444;
        text-decoration: none;
    }



    /* active list element */
    .vlist li.active {
        color:#fff;
        background-color:#800;
        font-weight:bold;
    }

    /* Level 1 */
    .vlist li a,
    .vlist li strong,
    .vlist li span { width:95%; padding-left:5%; } /* LTR */

    .vlist li a:focus,
    .vlist li a:hover,
    .vlist li a:active { background-color:#a88; color:#fff; outline: 0 none; }

    /* Level 2 */
    .vlist li ul li a,
    .vlist li ul li strong,
    .vlist li ul li span { width:95%; padding-left:5%; } /* LTR */

    .vlist li ul li a, 
    .vlist li ul li a:visited { background-color:#f8f8f8; color:#333; }
    .vlist li ul li a:focus,
    .vlist li ul li a:hover,
    .vlist li ul li a:active { background-color:#a88; color:#fff; }

【问题讨论】:

    标签: javascript jquery html css


    【解决方案1】:

    添加脚本 jQuery 到你的 head 标签

    &lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"&gt;&lt;/script&gt;

    您可以使用 jQuery 来显示隐藏菜单。

    $('li').on('click',function(e){
        var that = $(this);
        if(that.parents('ul').length>1){
            e.stopPropagation()
            return true;
        }else if(that.find('ul').length>0){
            that.toggleClass('classToKeep')
        }
    });
    

    编辑 2:

    完全忘记了您实际上必须单击子&lt;li&gt; 元素。好的,代码是相同的,只要它是一个孩子,就不要让事件传播到 父母就是这样。更新小提琴

    工作演示:Updated JS Fiddle

    【讨论】:

    • 更新了答案中的小提琴。不知何故,js没有粘住
    • @joyBlanks 谢谢你的朋友。我现在会检查并回复你
    • @joyBlanks 不幸的是它在 jsfiddle 中工作,而不是在网站中 ERROR:Uncaught TypeError: $ is not a function
    • 添加脚本 jQuery 到你的 head 标签&lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"&gt;&lt;/script&gt;
    • @joyBlanks:提供最新的插件比提供旧的插件更好。在这里,您提供的 2.1.1 可能不支持所有 jquery 功能。如果没有添加尝试添加这个&lt;script type="text/javascript" src="http://code.jquery.com/jquery-latest.js"&gt;&lt;/script&gt;
    【解决方案2】:

    另一种方法是简单地添加一个类来显示您以前用display:none 隐藏的“li”,然后添加这个 jquery:

    $('.active').click(function () {
                    $('.link').toggleClass("hidden"); 
                });
    

    我已在“链接”类中添加了指向要隐藏的li's

    JSFIDDLE

    【讨论】:

    • 感谢您的回答。但是小问题,当我在link1(儿童)中时,它并没有关闭“部门”。你能帮我吗jsfiddle.net/a3x004fs/5
    • 我不明白你的评论伙伴。无论您点击链接 1、链接 2、链接 3、链接 4 或分区,所有链接都隐藏得很好
    • 对不起,伙计。如果我点击“link1”,它不应该关闭“Divisions”。 >
    • 这很简单。我只是用一个类将“部门”文本包装在div 中并更改了jquery,因此您只需在单击“活动”整个lidivinsteed 时打开和关闭:jsfiddle.net/alvaromenendez/a3x004fs/6
    【解决方案3】:
    You can simply use toggl function of jquery:- 
    
    
    
    $("#p968").toggle(function () {
            $('#tackle').hide();
        }, function () {
            $('#tackle').show();
        });
    
    <ul class="vlist">
        <li id="p968" class="active"><strong>Divisions</strong>
            <ul id="tackle">
                <li id="p981"><a href="link1.html">link1</a></li>
                <li id="p982"><a href="link2.html">link2</a></li>
                <li id="p983"><a href="link3.html">link3</a></li>
                <li id="p1064"><a href="link4.html">link4</a></li>
            </ul>
        </li>
        <li id="p969"><a href="#">mainlink2</a></li>
        <li id="p96955"><a href="#">mainlin3</a></li>
        <li id="p989"><a href="#">mainlink4</a></li>
    </ul>
    

    【讨论】:

    • 您检查过您作为答案发布的代码吗?
    • 你添加了这个 -1 :-)
    • 我是 jquery 的新手 ....您也可以直接提问...这就像为我学习... :-)
    • @Codeshow,在这里,如果我单击链接 1,“部门”也将关闭。你能检查一下小提琴吗
    【解决方案4】:

    在您的代码中为 css 和 JS 添加这两个代码块。

    .classToKeep{
         color:#fff;
      }
       .classToKeep ul{
          display:none;
      } 
    
    $("#p968").click(function(){   
       $(this).toggleClass("classToKeep")
    });
    

    【讨论】:

    • 这里如果我点击链接 1 也“部门”正在关闭。你能检查一下小提琴吗
    • 这是因为那些子li在id="p968"的父li里面。因此,您必须通过在父 li 标签内的 span 标签中放置“Divisions”文本并对其执行子隐藏/显示操作来稍微更改您的 HTML 结构。工作小提琴:jsfiddle.net/1yLpoctd
    猜你喜欢
    • 1970-01-01
    • 2015-06-14
    • 1970-01-01
    • 2021-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-30
    相关资源
    最近更新 更多