【问题标题】:Show/Hide div but show a few on page load [closed]显示/隐藏 div,但在页面加载时显示一些 [关闭]
【发布时间】:2020-08-31 23:34:29
【问题描述】:

我经常为常见问题解答等内容设置显示/隐藏元素,并使用以下代码:

HTML:

<div class="faq">
    <h2 class="faq_q toggle-section">Question</h2>
    <div class="faq_a content-section">Answer</div>
</div>
<div class="faq">
    <h2 class="faq_q toggle-section">Question</h2>
    <div class="faq_a content-section">Answer</div>
</div>

JS:

// Show / Hide Sections
$(".toggle-section").next(".content-section").hide();
$(".toggle-section").click(function() {
   $(this).toggleClass('active').next().slideToggle("fast");
});

这很好用,但在这种情况下,我需要一些关于页面加载的选定问题,但我就是不知道我需要做什么才能做到这一点。

非常感谢任何帮助。

【问题讨论】:

  • 嗨艾伦,在这里需要更多信息。到目前为止,您没有在页面加载上显示任何常见问题解答。对吧?
  • 目前,页面加载时仅显示问题 (faq_q)。在用户单击问题之前,不会显示答案 (faq_a)。我想要的是在页面加载时显示一些问题和答案,可能是通过向 faq div 或类似方式添加一个类?

标签: javascript html jquery css


【解决方案1】:

所以您正在寻找一些已经切换的问题吗?这意味着在 HTML 中它们应该已经有“活动”类,然后切换它们,在这种情况下,您有几个选项,这取决于您要如何处理它,或者您可以在 HTML 之前添加活动类页面加载您想要显示的内容,然后搜索活动类并进行切换。

// Show / Hide Sections
//This next line will always be executed, should be in the CSS as .content-section{ display: none;}
$(".toggle-section").next(".content-section").hide();


$(".toggle-section").click(function() {
    $(this).toggleClass('active').next().slideToggle("fast");
});

//Now you could either trigger the click of the elements which have an "active" class like this:

$('.toggle-section.open').each(function(){
    $(this).click();
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="faq">
    <h2 class="faq_q toggle-section">Question</h2>
    <div class="faq_a content-section">Answer</div>
</div>
<div class="faq">
    <h2 class="faq_q toggle-section open">Question</h2>
    <div class="faq_a content-section">Answer</div>
</div>
<div class="faq">
    <h2 class="faq_q toggle-section">Question</h2>
    <div class="faq_a content-section">Answer</div>
</div>
<div class="faq">
    <h2 class="faq_q toggle-section open">Question</h2>
    <div class="faq_a content-section">Answer</div>
</div>

【讨论】:

  • 非常感谢。效果很好,但唯一的问题是我添加了“活动”类的 div,然后当我切换(关闭)展开的 div 时,删除了“活动”类。所以发生的事情是“活动”类在打开时被删除。在页面加载时关闭的其他 div 上完美运行。
  • 那你只需要把活动类改成打开,代码不变,我更新了代码,试试看
  • 非常感谢您的帮助。绝对完美。我会一直用头撞墙试图完成这件事。查看您的代码,它看起来很简单!
【解决方案2】:

您可以这样做:生成一个包含所有常见问题解答编号的数组,从该数组中获取一个随机数并显示带有该编号的常见问题解答。在此示例中,显示了 6 个常见问题解答中的 2 个。

$(".faq").hide();
var Show = 2, 
    Faq = $(".faq").length, 
    array = [], 
    rnd, value, i;

for (i = 0; i < Faq; i++) { 
  array[i] = i;
}

for (i = 0; i < Show; i++) { 
  rnd = Math.floor(Math.random() * array.length); 
  value = array.splice(rnd,1)[0]; 
  $(".faq:eq(" + value + ")").show();
}

// Show / Hide Sections
$(".toggle-section").next(".content-section").hide();
   $(".toggle-section").click(function() {
   $(this).toggleClass('active').next().slideToggle("fast");
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="faq">
    <h2 class="faq_q toggle-section">Question 1</h2>
    <div class="faq_a content-section">Answer 1</div>
</div>
<div class="faq">
    <h2 class="faq_q toggle-section">Question 2</h2>
    <div class="faq_a content-section">Answer 2</div>
</div>
<div class="faq">
    <h2 class="faq_q toggle-section">Question 3</h2>
    <div class="faq_a content-section">Answer 3</div>
</div>
<div class="faq">
    <h2 class="faq_q toggle-section">Question 4</h2>
    <div class="faq_a content-section">Answer 4</div>
</div>
<div class="faq">
    <h2 class="faq_q toggle-section">Question 5</h2>
    <div class="faq_a content-section">Answer 5</div>
</div>
<div class="faq">
    <h2 class="faq_q toggle-section">Question 6</h2>
    <div class="faq_a content-section">Answer 6</div>
</div>

对于这个答案,我合并了 gonchuki 给出的 answer

更新:正如 cmets 对此答案所阐明的那样,请求是在页面加载时已经显示一些选定的答案。如果这些答案应该随机显示,可以像这样调整前面的示例:

$(".toggle-section").next(".content-section").hide();
   $(".toggle-section").click(function() {
   $(this).toggleClass('active').next().slideToggle("fast");
});
var Show = 2, 
    Faq = $(".faq").length, 
    array = [], 
    rnd, value, i;

for (i = 0; i < Faq; i++) { 
  array[i] = i;
}

for (i = 0; i < Show; i++) { 
  rnd = Math.floor(Math.random() * array.length); 
  value = array.splice(rnd,1)[0]; 
  $(".toggle-section:eq(" + value + ")").toggleClass('active').next().slideToggle("fast");
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="faq">
    <h2 class="faq_q toggle-section">Question 1</h2>
    <div class="faq_a content-section">Answer 1</div>
</div>
<div class="faq">
    <h2 class="faq_q toggle-section">Question 2</h2>
    <div class="faq_a content-section">Answer 2</div>
</div>
<div class="faq">
    <h2 class="faq_q toggle-section">Question 3</h2>
    <div class="faq_a content-section">Answer 3</div>
</div>
<div class="faq">
    <h2 class="faq_q toggle-section">Question 4</h2>
    <div class="faq_a content-section">Answer 4</div>
</div>
<div class="faq">
    <h2 class="faq_q toggle-section">Question 5</h2>
    <div class="faq_a content-section">Answer 5</div>
</div>
<div class="faq">
    <h2 class="faq_q toggle-section">Question 6</h2>
    <div class="faq_a content-section">Answer 6</div>
</div>

【讨论】:

  • 我认为他的要求是在页面加载时已经显示答案,然后能够切换它们。
  • @Leo 可能,我只是以不同的方式理解“我需要一些关于页面加载的选定问题”。我们会看到 Alan 何时返回问题并注意到给定的答案。
  • 很抱歉我没有早点回复。我没有收到电子邮件通知让我知道有人已回复。非常感谢您对此的帮助。 @Leo 是正确的。我希望关闭所有常见问题解答(仅显示问题),但在页面加载时选择一些打开。
  • @Alan 感谢您的澄清。我已经用一种方法更新了我的答案,以显示在页面加载时打开的随机选择的答案。
  • @matthias_h 抱歉,不确定我是否清楚地解释了自己。您所做的很棒,但我需要的是能够选择在页面加载时打开哪些常见问题解答,而不是打开随机常见问题解答。我想这样做的方式是,如果我在“常见问题解答”类上有一个“已选择”类,那么我可以简单地添加该类,这些类将在页面加载时打开,但仍然在单击时显示/隐藏。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-12
  • 1970-01-01
  • 2023-04-05
  • 2017-05-27
  • 1970-01-01
相关资源
最近更新 更多