【问题标题】:jQuery toggle on multiple divs with same classjQuery在具有相同类的多个div上切换
【发布时间】:2014-11-10 13:57:10
【问题描述】:

我正在尝试在我的网站上启动并运行 jQuery 切换。

到目前为止,我的代码是:

<script>
$(document).ready(function(){
  $(".flip").click(function(){
    $(".flippanel").toggle();
  });
});
</script>

然后我在 HTML 中有:

<p class="flip">Flip it!</p>
<p class="flippanel">This is a paragraph with little content.</p>
<p class="flippanel">This is another small paragraph.</p>
<p class="flip 2">Flip it!</p>
<p class="flippanel 2 ">This is a paragraph with little content.</p>
<p class="flippanel 2">This is another small paragraph.</p>

如何让它独立切换两个面板?现在,每个面板同时切换。

【问题讨论】:

  • 好吧,你在两个部分都使用了同一个类“flippanel”——这自然会使两个部分相应地切换。
  • 嗨 entiendoNull,我意识到 - 我正在寻求有关如何拥有可能无限数量的翻转面板的指导,所以这是一个迭代示例。
  • 我也不是特别清楚我的实际要求——我需要一个带有一些描述的切换按钮(即“翻转它!”位),然后我需要一个装满内容的容器。我正在使用它在网页上显示多个“购买”购物车小部件 - 它适用于培训公司,其中一门课程可以有多种分发选项。

标签: javascript jquery html css toggle


【解决方案1】:

所以看起来您希望在单击“翻转”时将翻转面板类项目隐藏起来?然后,我建议您将它们放在 div 中,这样当您单击它时,整个 div 就会折叠。

这样你可以做这样的事情:

$(".flip").click(function(){
  $(this).children().toggle();
});

如果您认为这是适合您的代码,但不喜欢 div 内的所有内容都是可点击的,您可以添加以下代码 此外,如果您认为这是适合您的解决方案,您可以添加以下代码,使其只有“翻转它!”部分是可点击的。我在下面更新了我的小提琴以包含此代码。

$(".flippanel").click(function( event ) {
  event.stopPropagation();
});

I've made a JSFiddle for you if you click this line to look.

【讨论】:

  • 这个真的很好用!非常感谢 - 其他解决方案也很有用,但这对我来说似乎是最简单的部署。最好的,吉姆
  • 啊 - 我刚刚发现了这个问题。如果您单击翻盖内的任何内容,它就会起到切换的作用。我需要将切换开关分开,以便在打开时保持不变。一开始可能不太清楚!
  • 啊,是的,这个解决方案将所有内容打包到两个 div 中。因此,如果您单击这两个 div 中的任何空间,它将折叠 div 本身。我有点假设你只想要两个可折叠的面板。
  • James,我仍然建议您将面板分成两个单独的 div。 (或者你有多少)这将使未来的代码更容易编写,更容易处理等。我不确定网站的其余部分应该如何设计,但如果你想要两个单独的“面板”,听起来像您正在分配 div。
【解决方案2】:

您需要使用.nextUntil()。它将获取每个下一个元素,直到您点击传递的选择器。

$(".flip").click(function(){
  $(this).nextUntil('.flip').toggle();
});

请注意,传递的选择器会从对象中排除。

【讨论】:

    【解决方案3】:

    选择您每次点击的p .flippanel 中的下两个。

    nextAll选择以下所有兄弟姐妹

    slice(0, 2) 缩小到前两个

    试试:

    $(".flip").click(function(){
        $(this).nextAll(".flippanel").slice(0, 2).toggle();
      });
    

    DEMO

    【讨论】:

      【解决方案4】:

      数字作为 html 类无效。

      试试这样:

      <p class="flip flip_1">Flip it!</p>
      <p class="flippanel flippanel_1">This is a paragraph with little content.</p>
      <p class="flippanel flippanel_1">This is another small paragraph.</p>
      <p class="flip flip_2">Flip it!</p>
      <p class="flippanel flippanel_2 ">This is a paragraph with little content.</p>
      <p class="flippanel flippanel_2">This is another small paragraph.</p>
      

      这样你的造型例如可以附加到 Flippanel 类,你的 JS 看起来像这样:

      <script>
      $(document).ready(function(){
        $(".flip").click(function(){
          $(".flippanel_1").toggle();
        });
      });
      </script>
      

      【讨论】:

        【解决方案5】:
        $(".flip").click(function(){
              $(this).next().toggle();
              $(this).next().next().toggle();
        });
        

        会起作用的。

        http://jsfiddle.net/xyqwmzhj/2/

        但您确实应该考虑重写您的 html,对内容使用相同的类并与孩子一起使用或类似的东西。

        [编辑] 如果您希望它开始关闭,请添加

        style="display: none;"
        

        到应该隐藏的 div。

        完整的html:

        <p class="flip" style="cursor:  pointer;">Flip it!</p>
        <div style="display: none;">
        <p class="flippanel">This is a paragraph with little content.</p>
        <p class="flippanel">This is another small paragraph.</p>
        </div>
        <p class="flip" style="cursor:  pointer;">Flip it!</p>
        <div style="display: none;">
        <p class="flippanel">This is a paragraph with little content.</p>
        <p class="flippanel">This is another small paragraph.</p>
        </div>
        

        【讨论】:

        • 这似乎工作得很好——我实际上可以将内容包装在一个 div 中,所以它只适用于下一个元素。有什么想法可以让所有的翻盖面板都开始关闭吗?
        • 编辑了答案,添加了包装器 div,使光标成为指针并更改了错误的类名。考虑给 div 自己的类并外包显示:隐藏在 css 中。 cursor:pointer 也是如此,它属于 .flip 类
        • 顺便说一句:如果它符合您的需要,请随时接受答案:-)
        【解决方案6】:

        我认为你的 jQuery 代码对于第一次翻转是可以的! 我建议您应该为第二次翻转创建另一个!并且您需要更改您的第二个翻转它的 HTML 标记类

        发件人:

        <p class="flip 2">Flip it!</p>
        <p class="flippanel 2 ">This is a paragraph with little content.</p>
        <p class="flippanel 2">This is another small paragraph.</p>
        

        收件人:

        <p class="flip2">Flip it!</p>
        <p class="flippanel2 ">This is a paragraph with little content.</p>
        <p class="flippanel2">This is another small paragraph.</p>
        

        然后是要添加的jQuery代码:

        $(document).ready(function(){ 
            $(".flip2").click(function(){
                $(". flippanel2").toggle();
            });
        });
        

        【讨论】:

        • 请不要。不要建议某人重复代码。相反,请检查以前的答案并从中学习(并考虑删除此答案)。
        • 我可以观察到您坚持“不要告诉某人重复代码”而没有说明肯定会说服我停止的含义。但不仅仅是你的一系列“不要”。或者还有什么意思。感谢您期待的合作。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-02
        • 2013-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多