简体   繁体   English

父元素的兄弟元素(单击元素除外)在jQuery中消失

[英]Siblings of parent except element clicked disappear in jQuery

I am trying to fullscreen a div#controls when a button inside it is clicked and make all other div#controls with same parent, div#buttons , disappear. 我试图在单击其中的一个按钮时全屏显示div#controls ,并使具有相同父代div#buttons的所有其他div#controls消失。

My HTML: 我的HTML:

           <div id="testpile" class="inner cover">
                <div id="buttons" class="buttons">
                    <div id="controls" class="col-md-4 rat">
                        <h1>Rationelt</h1>
                        <p class="text-justify">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam laoreet, risus vel tincidunt sagittis, lorem risus faucibus mi, eget tincidunt ipsum sapien vel dolor. Mauris pulvinar leo feugiat, ultricies est ut, porta arcu.</p>
                        <a id="1" class="btn btn-group btn-default" role="button">Rationelt</a>
                    </div>
                    <div id="controls" class="col-md-4 emo">
                        <h1>Emotionelt</h1>
                        <p class="text-justify">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam laoreet, risus vel tincidunt sagittis, lorem risus faucibus mi, eget tincidunt ipsum sapien vel dolor. Mauris pulvinar leo feugiat, ultricies est ut, porta arcu.</p>
                        <a id="2" class="btn btn-group btn-default" role="button">Emotionelt</a>
                    </div>
                    <div id="controls" class="col-md-4 per">
                        <h1>Personligt</h1>
                        <p class="text-justify">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam laoreet, risus vel tincidunt sagittis, lorem risus faucibus mi, eget tincidunt ipsum sapien vel dolor. Mauris pulvinar leo feugiat, ultricies est ut, porta arcu.</p>
                        <a id="3" class="btn btn-group btn-default" role="button">Personligt</a>
                    </div>
                </div>
            </div>

My jQuery: 我的jQuery:

<script type="text/javascript">
    $('.btn-group').on('click', function() {
        $(this).parent().toggleClass('col-md-4 col-md-12');
        $(this).parent().siblings().toggleClass('col-md-4 col-md-0');
    });
</script>

I am quite sure that the problem I am having is that I have not succeeded in targeting the right div, but I have tried everything to solve it myself and sadly, haven't been able to. 我很确定我遇到的问题是我没有成功定位正确的div,但是我自己尝试了所有方法来解决它,可悲的是,我没有能力解决。

As an aside of the control id being duplicated, simply toggle the display of the parents siblings to show/hide them on each button click: 除了要复制控件ID之外,只需切换父母同级的显示以在每次单击按钮时显示/隐藏它们:

 $('.btn-group').on('click', function() {
   $(this).parent().siblings().toggle();
 });

You are targeting the right div, despite the invalid duplicate IDs. 尽管ID无效,但您的定位目标是正确的div。 The use of toggleClass is the problem, especially after the first click, since it will toggle each class from its current state, which will give inconsistent results depending on which order the user clicks on each item -- you also appear to be toggling grid column declarations, which I'm not sure is what you intend? 问题是使用toggleClass是一个问题,尤其是在第一次单击后,因为它将从当前状态切换每个类,这将导致不一致的结果,具体取决于用户在每个项目上单击的顺序–您似乎也在切换网格列声明,我不确定您打算做什么?

Below I've changed your code to use addClass and removeClass explicitly (and have made 'hidden' still slightly visible so you can see the effect of subsequent clicks) 下面,我将您的代码更改为显式使用addClassremoveClass (并使“隐藏”仍然略显可见,以便您可以查看后续点击的效果)

 $('.btn-group').on('click', function() { $(this).parent().removeClass('hidden'); $(this).parent().siblings().addClass('hidden'); }); 
 .hidden {opacity:0.1} 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="testpile" class="inner cover"> <div id="buttons" class="buttons"> <div id="controls" class="col-md-4 rat"> <h1>Rationelt</h1> <p class="text-justify">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam laoreet, risus vel tincidunt sagittis, lorem risus faucibus mi, eget tincidunt ipsum sapien vel dolor. Mauris pulvinar leo feugiat, ultricies est ut, porta arcu.</p> <a id="1" class="btn btn-group btn-default" role="button">Rationelt</a> </div> <div id="controls" class="col-md-4 emo"> <h1>Emotionelt</h1> <p class="text-justify">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam laoreet, risus vel tincidunt sagittis, lorem risus faucibus mi, eget tincidunt ipsum sapien vel dolor. Mauris pulvinar leo feugiat, ultricies est ut, porta arcu.</p> <a id="2" class="btn btn-group btn-default" role="button">Emotionelt</a> </div> <div id="controls" class="col-md-4 per"> <h1>Personligt</h1> <p class="text-justify">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam laoreet, risus vel tincidunt sagittis, lorem risus faucibus mi, eget tincidunt ipsum sapien vel dolor. Mauris pulvinar leo feugiat, ultricies est ut, porta arcu.</p> <a id="3" class="btn btn-group btn-default" role="button">Personligt</a> </div> </div> </div> 

I don't think you are doing anything to the siblings of the parent except just giving them a column class. 除了给他们一个列类,我不认为您对父辈的兄弟姐妹做任何事情。 From what I understand what you need to add is .hide() method. 据我了解,您需要添加的是.hide()方法。 This will hide the divs that you want hidden. 这将隐藏您要隐藏的div。

Here is a link from the jquery api that will help you and give examples link 这是来自jQuery API的链接,它将帮助您并提供示例链接

remove that id controls . 删除该id controls IDs should not repeat, use class there like; ID不应该重复,使用类就好;

<div class="controls col-md-4 rat">

and use JS like; 并使用JS like;

$('.btn-group').on('click', function() {
    $(".controls").hide();
    $(this).parents(".controls").show();
});

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM