jQuery 按按钮类显示和隐藏 div



我想使用按钮和 JQuery 点击事件显示隐藏不同的div。如何选择正确的div 来显示或隐藏它?

$(document).ready(function(){
$("#button-1").click(function(){
$("#intro-1").css({"display" : "none"});
$("#content-1").css({"display" : "inline-block"});
});

$("#button-2").click(function(){
$("#intro-2").css({"display" : "none"});
$("#content-2").css({"display" : "inline-block"});
});

});
#content-1, #content-2{
display:none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="container">

<div id="cont-1">
<div id="intro-1">
<p> Some text...</p>
</div>
<div id="content-1">
<p>More explicative text</p>
</div>
</div>
<button id="button-1" class="mybuttonclass"> Click here</button>

<div id="cont-2">
<div id="intro-2">
<p> Some text...</p>
</div>
<div id="content-2">
<p>More explicative text</p>
</div>
</div>
<button id="button-2" class="mybuttonclass"> Click here</button>

<!-- other <div id="cont-x" -->

</div>

现在,我需要使用 id="cont-x" 创建大量其他div ...是否可以创建一个函数,您可以通过按类单击按钮来选择要显示/隐藏的正确div? 到目前为止,我为每个按钮创建一个函数,并检索潜水以按ID显示/隐藏。我想对所有div 使用一个函数,并按类名选择"this"按钮。可能吗?

你只需要这个CSS和JS来完成你的任务。 :)

jQuery('.mybuttonclass').on('click', function(){
// Get the number from button ID. 
var id = jQuery(this).attr('id').replace('button-','');
// Toggle the visibility.
jQuery("#intro-" + id).css({"display" : "none"});
jQuery("#content-" + id).css({"display" : "inline-block"});
});
[id^="content-"] {
display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="container">

<div id="cont-1">
<div id="intro-1">
<p> Some text...</p>
</div>
<div id="content-1">
<p>More explicative text</p>
</div>
</div>
<button id="button-1" class="mybuttonclass"> Click here</button>

<div id="cont-2">
<div id="intro-2">
<p> Some text...</p>
</div>
<div id="content-2" >
<p>More explicative text</p>
</div>
</div>
<button id="button-2" class="mybuttonclass"> Click here</button>

<!-- other <div id="cont-x" -->

</div>

你可以使用这样的东西。 我在您的按钮中添加了一个data-target="#cont-1",因此您可以标记要打开的div。

$(document).ready(function(){
$(".mybuttonclass").click(function() {
$("div[id*='cont-']").hide();
var target = $(this).data('target');
$(target).toggle();
});
});
#cont-1,#cont-2{display:none;}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="container">

<div id="cont-1">
<div id="intro-1">
<p> Some text...</p>
</div>
<div id="content-1">
<p>More explicative text</p>
</div>
</div>
<button id="button-1" class="mybuttonclass" data-target="#cont-1"> Click here</button>

<div id="cont-2">
<div id="intro-2">
<p> Some text...</p>
</div>
<div id="content-2">
<p>More explicative text</p>
</div>
</div>
<button id="button-2" class="mybuttonclass" data-target="#cont-2"> Click here</button>

<!-- other <div id="cont-x" -->

</div>

组件的 POC,如渲染和按钮操作:

let count = 0;
function addCard() {
const card = `<div class="intro" data-num="${count}">intro</div>
<div class="content hide" data-num="${count}">content</div>
<div class="show-btn" onClick="toggleShow(${count})">SHOW</div>`;
document.body.innerHTML += card;
count++;
}
function toggleShow(num) {
document.querySelector(`.intro[data-num="${num}"]`).classList.toggle("hide");
document.querySelector(`.content[data-num="${num}"]`).classList.toggle("hide");
}
.add,
.show-btn {
margin-bottom: 20px;
cursor: pointer;
}
.hide {
display: none;
}
<div class="add" onClick="addCard()">ADD</div>

在大多数情况下,这很容易实现,使用两者都不

  • id
  • 也不是jQuery。

看:

document.addEventListener('click', function(event) { // delegate listener on document
if (event.target.matches('button.showmore')) {
event.target.parentElement.classList.toggle('show-more');
}
})
.explicative-text {
display: none;
}
.show-more .explicative-text {
display: block;
}
<div class="container">
<div>
<div class="intro-text">
<p> Some text...</p>
</div>
<div class="explicative-text">
<p>More explicative text</p>
</div>
<button class="showmore"> Click here</button>
</div>
<div>
<div class="intro-text">
<p> Some text...</p>
</div>
<div class="explicative-text">
<p>More explicative text</p>
</div>
<button class="showmore"> Click here</button>
</div>
</div>

如果您需要其他东西的id,但是对于这个使用类。 只需对组使用类intro-group,然后hidden元素以最初隐藏并切换它,甚至更容易,添加一个类toggled并使用它来定位元素以切换类hidden

$(function() {
$(".mybuttonclass").on('click', function() {
$(this).prev('.intro-group').find(".toggled").toggleClass("hidden");
});
});
.intro,
.content {
display: inline-block;
}
.hidden {
display: none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="container">
<div class="intro-group">
<div class="intro toggled">
<p> Some text...</p>
</div>
<div class="content toggled hidden ">
<p>More explicative text</p>
</div>
<div class="toggled hidden ">
<p>I am another element to toggle</p>
</div>
</div>
<button class="mybuttonclass"> Click here</button>
<div class="intro-group">
<div class="intro toggled">
<p> Some text...</p>
</div>
<div class="content toggled hidden">
<p>More explicative text, I am longer</p>
</div>
</div>
<button class="mybuttonclass"> Click here</button>
</div>

最新更新