【问题标题】:Javascript hide/show divJavascript隐藏/显示div
【发布时间】:2017-02-27 19:52:40
【问题描述】:

我有一个带有 4 个不同 div 的 javascript 隐藏/显示 div。它正在部分工作,但没有按照我想要的方式运行。当我单击其中一个 div 时,它会打开隐藏的 div,这是完美的,但是当我单击另一个链接以打开另一个 div 时,我希望我先单击的另一个 div 关闭,然后打开新的 div。这是我的javascript。

$('[id^="hideshow"]').on('click', function(event) {
    var dataValue = $(this).attr('data-value');
    dataValue = $('#'+dataValue);
    $(dataValue).toggle('hide');
});

<a class="pure-button pure-button-primary" type='button' id='hideshow1' value='hide/show' data-value="content1"><div class="witb">
    <hr class="dark2">
  <p></p>Whats in the Bag &nbsp;<i class="fa fa-angle-down" style="font-size:24px"></i></p>
  </div>
</div></a>

    <div id='content2' style="display:none">
<div class="wedge-thumbs">
  <img class="thumbs" src="build/wedge-thumb.png?$staticlink$" alt="Milled Grind Header">
  <a href="#" class="customize"><span style="customize"> Customize It</span></a>
  <hr class="dark">
  <span class="title">Milled Grind 54&deg; LB</span>

</div>
<div class="wedge-thumbs">
  <img class="thumbs" src="build/wedge-thumb.png?$staticlink$" alt="Milled Grind Header">
  <a href="#" class="customize"><span style="customize"> Customize It</span></a>
  <hr class="dark">
  <span class="title">Milled Grind 54&deg; LB</span>

</div>

<div class="wedge-thumbs">
  <img class="thumbs" src="build/wedge-thumb.png?$staticlink$" alt="Milled Grind Header">
  <a href="#" class="customize"><span style="customize"> Customize It</span></a>
  <hr class="dark">
  <span class="title">Milled Grind 54&deg; LB</span>

</div>

</div>

【问题讨论】:

  • 提供您的 html。
  • 好像不合适,因为什么都看不见。
  • style="display:none" ... aa你的按钮在哪里?
  • @RokoC.Buljan 哎呀。我编辑了我的代码
  • 你的 HTML 标记搞砸了......

标签: javascript jquery hide show hidden


【解决方案1】:
// Hopefully you have some selector reference to target them all
var $all = $(".drops");  // Clearly I used .drops for example

$('[data-value]').on('click', function(event) {

    var $target = $('#'+ this.dataset.value);

    $all.not( $target ).hide(); // Hide all but target one
    $target.toggle();           // Toggle target one
});

这是一个改进的例子:

var $all = $(".togglable");

$('[data-toggle]').on('click', function(event) {

  var $target = $(this.dataset.toggle);

  $all.not( $target ).hide(); // Hide all but target one
  $target.toggle();           // Toggle target one
});
[data-toggle]{cursor:pointer; display:inline-block; color:#0bf; padding:0 8px;}
.hidden{display: none;}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<a data-toggle="#el1">TOGGLE1</a>
<a data-toggle="#el2">TOGGLE2</a>
<a data-toggle="#el3">TOGGLE3</a>

<div id="el1" class="togglable hidden">ELEMENT1</div>
<div id="el2" class="togglable hidden">ELEMENT2</div>
<div id="el3" class="togglable hidden">ELEMENT3</div>

【讨论】:

  • 似乎这是我想要实现的目标。所以现在当我打开隐藏的 div 然后单击另一个按钮打开另一个隐藏的 div 它会关闭第一个 div 但不打开第二个 div。我希望它在另一个 div 打开时打开第二个 div。
  • @sizemattic 添加了一个示例。这就是你想要的吗?
  • 是的,快到了!我如何使它在页面加载时所有的 div 都被隐藏? @Roko C. Buljan
  • @sizemattic 好吧......可能就像我一样。添加一个类 .hidden 会有所帮助。
【解决方案2】:

请试试这个

$('[id^="hideshow"]').on('click', function(event) {
var dataValue = $(this).attr('data-value');
dataValue = $('#'+dataValue);
$(dataValue).toggleClass('hide');
});

【讨论】:

    【解决方案3】:

    如果你可以给你的 div 一个通用类而不是 id 会更好,这样你就可以使用这个通用类隐藏其他 div,例如:

    $('.common_class').addClass('hide');
    

    如果你不能,你可以遍历所有的 div 并在显示当前点击的之前隐藏它们:

    $('[id^="hideshow"]').on('click', function(event) {
        $('[id^="hideshow"]').each(function(){
            $('#'+$(this).data('value')).addClass('hide');
        });
    
        dataValue_id = $('#'+$(this).data('value'));
        $(dataValue_id).toggleClass('hide');
    });
    

    希望这会有所帮助。

    使用通用类的片段:

    $('.common_class').on('click', function(event) {
        $('.common_class_2').not($('.common_class_2', this)).addClass('hide');
        $('.common_class_2', this).toggleClass('hide');
    });
    .hide{
       display: none;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <div class='common_class'>DIV 1
      <p class='common_class_2'>Content 1</p>
    </div>
    <div class='common_class'>DIV 2
      <p class='common_class_2 hide'>Content 2</p>
    </div>
    <div class='common_class'>DIV 3
      <p class='common_class_2 hide'>Content 3</p>
    </div>
    <div class='common_class'>DIV 4
      <p class='common_class_2 hide'>Content 4</p>
    </div>

    【讨论】:

    • 我将如何做到这一点,以便当您单击 div 时它会再次关闭它?我不想一个人一直开着。
    • @sizemattic 这不是您要找的吗?
    猜你喜欢
    • 2017-04-04
    • 2021-02-05
    • 1970-01-01
    • 2020-05-25
    • 2014-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多