【问题标题】:jQuery toggle series of divs individually with one functionjQuery 用一个函数单独切换一系列 div
【发布时间】:2013-04-14 16:20:55
【问题描述】:

我有什么:

我有一个由链接(问题)组成的常见问题解答列表,这些链接(问题)可以切换相应段落(答案)的隐藏/显示。每个链接/段落(问题/答案)使用一个单独的函数

我需要什么:

我想使用一个函数来实现这一点,而不是为每个链接/段落(问题/答案)编写一个函数。

我当前的代码:

HTML:

<!--Q1-->

<p class="faq-question-container">
    <a href="#" id="q1">Some question</a>
</p>

<p class="faq-answer" id="a1">Some answer</p>

<!--Q2-->

<p class="faq-question-container">
    <a href="#" id="q2">Some question</a>
</p>

<p class="faq-answer" id="a2">Some answer</p>

<!--etc.-->

jQuery

$('.faq-answer').hide();

//Q1

$("#q1").click(function(event) {
  event.preventDefault();
  $('#a1').slideToggle();
});

//Q2

$("#q2").click(function(event) {
  event.preventDefault();
  $('#a2').slideToggle();
});

//etc.

我的问题:

如何将上述 jQuery 代码精简为一个函数?

我尝试过的:

jQuery("#faq-question-container a").click(function(event) {
  event.preventDefault();
  jQuery(this).next('#faq-answer').slideToggle();
});

什么都不做。

【问题讨论】:

    标签: jquery function toggle


    【解决方案1】:

    从你的代码开始,带来的主要变化是

    • 修复类选择器
    • 在寻找下一个元素之前先上升

    这给出了这个代码:

    jQuery(".faq-question-container a").click(function(event) {
      event.preventDefault();
      jQuery(this).closest('.faq-question-container').next('.faq-answer').slideToggle();
    });
    

    另一种不采用特定 HTML 组合的解决方案:

    $(".faq-question-container a[id^=q]").click(function(event) {
      event.preventDefault();
      $('#a'+this.id.slice(1)).slideToggle();
    });
    

    它是如何工作的:

    • [id^=q] 是 id 以 q 开头的所有元素的选择器。
    • this.id.slice(1) 从 id q95 获取 95

    【讨论】:

    • 我个人会尽量避免使用[id^=q] 部分并改用.faq-question-container a。不知何故,选择所有以q 作为第一个字母的 id 对我来说看起来不太安全。
    • @holodoc 既没有选择容器中的任何元素,但通过结合两者我们可能是安全的。无论如何,好话。
    • 非常感谢您的快速答复。我选择了第一个解决方案,因为它更接近于我尝试的代码,并且因为它依赖于类而不是 id,这将为我节省一些用于标记的击键。第二种解决方案(id 选择器)也有效。感谢您的选择并崩溃。一种解决方案是否优于另一种解决方案?
    • 您的第一个解决方案是正确的。它个人避免在 DOM 中向上移动,因为当您更改 HTML 时它会中断,但老实说,这里没有真正的问题。也没有明显的速度差异,所有这些解决方案都很好。
    猜你喜欢
    • 2017-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-10
    • 2014-09-10
    相关资源
    最近更新 更多