Py学习  »  Jquery

单击按钮时jquery分别显示

Ganidu Ranasinghe • 7 年前 • 2075 次点击  

我有一组按钮,单击每个按钮,它将显示相应的div并隐藏所有其他同级项。我绝对是jquery的初学者,所以我找到了一个解决方案,但是兄弟div不会隐藏。也可以通过if/else完成吗?

$('#showMcq, #showOe, #showLt, #showAs').click(function() {
  $(this).parents('.course-design-custom').addClass('d-none');
});

$('#showMcq').click(function() {
  $('#McqView').removeClass('d-none');
});

$('#showOe').click(function() {
  $('#OeView').removeClass('d-none');
});

$('#showAs').click(function() {
  $('#AssessmentView').removeClass('d-none');
});

$('#showLt').click(function() {
  $('#LearningTaskView').removeClass('d-none');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button id="showMcq">MCQ</button>
<button id="showOe">Open Ended</button>
<button id="showLt">Learning Task</button>
<button id="showAs">Assessment</button>
<div class="container">
  <div class="row course-design-custom" id="McqView">
    MCQ
  </div>
  <div class="row course-design-custom d-none" id="OeView">
    Open Ended
  </div>
  <div class="row course-design-custom d-none" id="LearningTaskView">
    Learning Task
  </div>
  <div class="row course-design-custom d-none" id="AssessmentView">
    Assessment
  </div>
</div>
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/43132
文章 [ 8 ]  |  最新文章 7 年前
Weichen Lu
Reply   •   1 楼
Weichen Lu    7 年前

.parent() API

$(this).parents('.course-design-custom').addClass('d-none');

这个函数用错了,你可以这样试试

$('.course-design-custom').addClass('d-none');

JSFiddle

Mamun
Reply   •   2 楼
Mamun    7 年前

你的结构 HTML 建议您可以使用索引隐藏/显示元素:

$('#showMcq, #showOe, #showLt, #showAs').click(function() {
  var idx = $('button').index(this);
  $('.course-design-custom').hide(); //hide all
  $('.course-design-custom').eq(idx).show(); //show only by matching the index 
});
.d-none{display: none;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button id="showMcq">MCQ</button>
<button id="showOe">Open Ended</button>
<button id="showLt">Learning Task</button>
<button id="showAs">Assessment</button>

<div class="container">
  <div class="row course-design-custom" id="McqView">
      MCQ
  </div>

  <div class="row course-design-custom d-none" id="OeView">
      Open Ended
  </div>

  <div class="row course-design-custom d-none" id="LearningTaskView">
      Learning Task
  </div>

  <div class="row course-design-custom d-none" id="AssessmentView">
     Assessment
  </div>
</div>
ssamuel
Reply   •   3 楼
ssamuel    7 年前

可以使用数据属性将单击时要显示的div作为目标。为了区分$('showmcq,showoe,showlt,showas')中的每个按钮单击。单击(function(){}),可以使用$(this).attr('id'),它将为您提供在该函数中单击的按钮的ID。

$('#showMcq, #showOe, #showLt, #showAs').click(function() {
  $('.course-design-custom').addClass('d-none');
  var viewCourse = $(this).data('view');
  $('#'+viewCourse).removeClass('d-none');
});
.d-none{
  display:none;
  }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button id="showMcq" data-view="McqView">MCQ</button>
<button id="showOe" data-view="OeView">Open Ended</button>
<button id="showLt" data-view="LearningTaskView">Learning Task</button>
<button id="showAs" data-view="AssessmentView">Assessment</button>
<div class="container">
  <div class="row course-design-custom" id="McqView">
    MCQ
  </div>
  <div class="row course-design-custom d-none" id="OeView">
    Open Ended
  </div>
  <div class="row course-design-custom d-none" id="LearningTaskView">
    Learning Task
  </div>
  <div class="row course-design-custom d-none" id="AssessmentView">
    Assessment
  </div>
</div>
Dhaval Pankhaniya
Reply   •   4 楼
Dhaval Pankhaniya    7 年前

你也可以用 JQuery UI Tabs 它将为您处理所有事情,您不需要管理类,也不需要为此编写额外的javascript或jquery,只需遵循结构和使用方法 $("#tabs").tabs();});

$( function() {
    $( "#tabs" ).tabs();
  } );
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
  <link rel="stylesheet" href="/resources/demos/style.css">
  <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
  <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<div id="tabs">
  <ul>
    <li><a href="#tabs-1">Nunc tincidunt</a></li>
    <li><a href="#tabs-2">Proin dolor</a></li>
    <li><a href="#tabs-3">Aenean lacinia</a></li>
  </ul>
  <div id="tabs-1">
    <p>Proin elit arcu, rutrum commodo, vehicula tempus, commodo a, risus. Curabitur nec arcu. Donec sollicitudin mi sit amet mauris. Nam elementum quam ullamcorper ante. Etiam aliquet massa et lorem. Mauris dapibus lacus auctor risus. Aenean tempor ullamcorper leo. Vivamus sed magna quis ligula eleifend adipiscing. Duis orci. Aliquam sodales tortor vitae ipsum. Aliquam nulla. Duis aliquam molestie erat. Ut et mauris vel pede varius sollicitudin. Sed ut dolor nec orci tincidunt interdum. Phasellus ipsum. Nunc tristique tempus lectus.</p>
  </div>
  <div id="tabs-2">
    <p>Morbi tincidunt, dui sit amet facilisis feugiat, odio metus gravida ante, ut pharetra massa metus id nunc. Duis scelerisque molestie turpis. Sed fringilla, massa eget luctus malesuada, metus eros molestie lectus, ut tempus eros massa ut dolor. Aenean aliquet fringilla sem. Suspendisse sed ligula in ligula suscipit aliquam. Praesent in eros vestibulum mi adipiscing adipiscing. Morbi facilisis. Curabitur ornare consequat nunc. Aenean vel metus. Ut posuere viverra nulla. Aliquam erat volutpat. Pellentesque convallis. Maecenas feugiat, tellus pellentesque pretium posuere, felis lorem euismod felis, eu ornare leo nisi vel felis. Mauris consectetur tortor et purus.</p>
  </div>
  <div id="tabs-3">
    <p>Mauris eleifend est et turpis. Duis id erat. Suspendisse potenti. Aliquam vulputate, pede vel vehicula accumsan, mi neque rutrum erat, eu congue orci lorem eget lorem. Vestibulum non ante. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Fusce sodales. Quisque eu urna vel enim commodo pellentesque. Praesent eu risus hendrerit ligula tempus pretium. Curabitur lorem enim, pretium nec, feugiat nec, luctus a, lacus.</p>
    <p>Duis cursus. Maecenas ligula eros, blandit nec, pharetra at, semper at, magna. Nullam ac lacus. Nulla facilisi. Praesent viverra justo vitae neque. Praesent blandit adipiscing velit. Suspendisse potenti. Donec mattis, pede vel pharetra blandit, magna ligula faucibus eros, id euismod lacus dolor eget odio. Nam scelerisque. Donec non libero sed nulla mattis commodo. Ut sagittis. Donec nisi lectus, feugiat porttitor, tempor ac, tempor vitae, pede. Aenean vehicula velit eu tellus interdum rutrum. Maecenas commodo. Pellentesque nec elit. Fusce in lacus. Vivamus a libero vitae lectus hendrerit hendrerit.</p>
  </div>
</div>
Ajeesh KH
Reply   •   5 楼
Ajeesh KH    7 年前

像这样更新html、脚本和css

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<script>

        $(document).ready(function(){

            $("button").click(function(){
                var cls = $(this).attr("class");
                $(".course-design-custom").removeClass("active");
                $("#"+cls).addClass("active");
                return false;
            });

        });

</script>

<style>

    .course-design-custom{ display:none; }
    .course-design-custom.active{ display:block; }

</style>

<button id="showMcq" class="McqView">MCQ</button>
<button id="showOe" class="OeView">Open Ended</button>
<button id="showLt" class="LearningTaskView">Learning Task</button>
<button id="showAs" class="AssessmentView">Assessment</button>
<div class="container">
  <div class="row course-design-custom active" id="McqView">
    MCQ
  </div>
  <div class="row course-design-custom d-none" id="OeView">
    Open Ended
  </div>
  <div class="row course-design-custom d-none" id="LearningTaskView">
    Learning Task
  </div>
  <div class="row course-design-custom d-none" id="AssessmentView">
    Assessment
  </div>
</div>
Shree Hauto Sagarin
Reply   •   6 楼
Shree Hauto Sagarin    7 年前

您可以使用下面这样的函数为div添加“d-none”类 removeClass .

$('#showMcq, #showOe, #showLt, #showAs').click(function() {
  $(this).parents('.course-design-custom').addClass('d-none');
});

$('#showMcq').click(function() {
  hidedivfirst();
  $('#McqView').removeClass('d-none');
});

$('#showOe').click(function() {
  hidedivfirst();
  $('#OeView').removeClass('d-none');
});

$('#showAs').click(function() {
  hidedivfirst();
  $('#AssessmentView').removeClass('d-none');
});

$('#showLt').click(function() {
  hidedivfirst();
  $('#LearningTaskView').removeClass('d-none');
});

function hidedivfirst() {
  $('.row').addClass('d-none');

}
.d-none {
  display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button id="showMcq">MCQ</button>
<button id="showOe">Open Ended</button>
<button id="showLt">Learning Task</button>
<button id="showAs">Assessment</button>
<div class="container">
  <div class="row course-design-custom" id="McqView">
    MCQ
  </div>
  <div class="row course-design-custom d-none" id="OeView">
    Open Ended
  </div>
  <div class="row course-design-custom d-none" id="LearningTaskView">
    Learning Task
  </div>
  <div class="row course-design-custom d-none" id="AssessmentView">
    Assessment
  </div>
</div>
Nandita Sharma
Reply   •   7 楼
Nandita Sharma    7 年前

修改此函数

$('#showMcq, #showOe, #showLt, #showAs').click(function() {
  $(".course-design-custom").addClass('d-none');
});

$('#showMcq, #showOe, #showLt, #showAs').click(function() {
  $(".course-design-custom").addClass('d-none');
});

$('#showMcq').click(function() {
  $('#McqView').removeClass('d-none');
});

$('#showOe').click(function() {
  $('#OeView').removeClass('d-none');
});

$('#showAs').click(function() {
  $('#AssessmentView').removeClass('d-none');
});

$('#showLt').click(function() {
  $('#LearningTaskView').removeClass('d-none');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">

<button id="showMcq">MCQ</button>
<button id="showOe">Open Ended</button>
<button id="showLt">Learning Task</button>
<button id="showAs">Assessment</button>
<div class="container">
  <div class="row course-design-custom" id="McqView">
    MCQ
  </div>
  <div class="row course-design-custom d-none" id="OeView">
    Open Ended
  </div>
  <div class="row course-design-custom d-none" id="LearningTaskView">
    Learning Task
  </div>
  <div class="row course-design-custom d-none" id="AssessmentView">
    Assessment
  </div>
</div>

更好的方法

在按钮上保留一个数据id,并使用该id来定位要在其单击时显示的元素。

$('#showMcq, #showOe, #showLt, #showAs').click(function() {
  $(".course-design-custom").addClass('d-none');
  var dataId = $(this).attr("id");
  $(".container").find("[data-id='" + dataId + "']").removeClass('d-none');
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">

<button id="showMcq">MCQ</button>
<button id="showOe">Open Ended</button>
<button id="showLt">Learning Task</button>
<button id="showAs">Assessment</button>
<div class="container">
  <div class="row course-design-custom" id="McqView" data-id="showMcq">
    MCQ
  </div>
  <div class="row course-design-custom d-none" id="OeView" data-id="showOe">
    Open Ended
  </div>
  <div class="row course-design-custom d-none" id="LearningTaskView" data-id="showLt">
    Learning Task
  </div>
  <div class="row course-design-custom d-none" id="AssessmentView" data-id="showAs">
    Assessment
  </div>
</div>
Carsten Løvbo Andersen
Reply   •   8 楼
Carsten Løvbo Andersen    7 年前

你可以添加 attribute 给你 button 这说明它应该使用什么元素。

<button id="showAs" target="AssessmentView">Assessment</button>

然后jquery看起来像:

$('#showMcq, #showOe, #showLt, #showAs').click(function() {
  var target = "#" + $(this).attr("target");

  var selected = $(target);
  selected.siblings().addClass("d-none");
  selected.removeClass("d-none");
});

工作演示

$('#showMcq, #showOe, #showLt, #showAs').click(function() {
  var target = "#" + $(this).attr("target");

  var selected = $(target);
  selected.siblings().addClass("d-none");
  selected.removeClass("d-none");
});
.container .div {
  background-color: #efefef;
}

.d-none {
  display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<button id="showMcq" target="McqView">MCQ</button>
<button id="showOe" target="OeView">Open Ended</button>
<button id="showLt" target="LearningTaskView">Learning Task</button>
<button id="showAs" target="AssessmentView">Assessment</button>

<div class="container">
  <div class="row course-design-custom" id="McqView">
    MCQ
  </div>

  <div class="row course-design-custom d-none" id="OeView">
    Open Ended
  </div>

  <div class="row course-design-custom d-none" id="LearningTaskView">
    Learning Task
  </div>

  <div class="row course-design-custom d-none" id="AssessmentView">
    Assessment
  </div>
</div>