jquery - 显示/隐藏任意数量 ID 的 slider 切换

标签 jquery html css

I looked at this tutorial at w3schools for a jQuery slider toggler and wanted to make one for myself. However, my requirement is a little different. I don't want to rigidly define each CSS style and jQuery function.

例如,在 w3school 的实现中,他们使用了:

$(document).ready(function(){
    $("#flip").click(function(){
        $("#panel").slideToggle("slow");
    });
});

但我想做一些这样的事情:

function toggleX(fid,pid){

var flipvar = document.getElementbyId(fid);
var panelvar = document.getElementbyId(pid);

$(document).ready(function(){
    $(flipvar).click(function(){
        $(panelvar).slideToggle("slow");
    });
});

}

我的要求是我应该能够简单地通过这样做在 HTML 中实现这种效果:

<div id="flip" onclick="toggleX('flip','panel');">...</div>
<div id="panel">...</div>
<!-- Similarly for any number of DIVs in same pattern -->
<div id="flip1" onclick="toggleX('flip1','panel1');">...</div>
<div id="panel1">...</div>

如果它能让您更容易看到事物本身,请看下面的代码片段。请查看并提出改进建议。

function toggleX(fid,pid){
		fid.style.background="#fff";//This is for testing purpose but the color never changes :/
}
//IF I could make that^ function work, I am planning to use the function below by using the id-values I get from onclick event

$(document).ready(function(){
    $("#flip").click(function(){
        $("#panel").slideToggle("slow");
    });
});
#panel, #flip {
    padding: 5px;
    text-align: center;
    background-color: #e5eecc;
    border: solid 1px #c3c3c3;
}

#panel {
    padding: 50px;
    display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
<div id="flip" onclick="toggleX('flip','panel');">Only this one works right now(Click me)</div>
<div id="panel">This slider is working only for THIS div and this slider is getting its style from 'panel' and 'flip' CSS. Can I get those CSS attributes by ID?<br/>(for flip1,panel1,flip2,panel2...and so on?)</div>

<div id="flip2" onclick="toggleX('flip2','panel2');">I want to make this DIV slidable show/hide too!</div>
<div id="panel2">And I want to get CSS style from ID too! :/</div>

<!--
I want this to happen for any number of ids that I make and pass with toggleX function.
-->

最后让我再次分解这个问题..

我要:

  • 许多 div 的 slider 切换
  • 彼此独立但都使用相同的中心函数并从相同的 CSS 派生其样式

我不想:

  • 基于类的答案因为I did read this related answer但这并没有回答我的问题。这也不是我想要的。我更喜欢基于 ID 的答案。

    • ...我一定是把它搞砸了,因为我无法让它工作,正如您在下面的代码片段中看到的那样,它可以工作!(虽然不是我们想要的)在 SO 中,但它 refuses to work in jsfiddle这让我担心特定的依赖关系。这不适用于特定设置或平台吗?
      $('.toggler').click(function(evt) {
        var $toggler = $(this);
        var $container = $toggler.siblings('.container');
      
        $container.toggle();
        $toggler.text($container.is(':visible') ? "Hide" : "Show");
        evt.preventDefault();
      });
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
      <div class="toggleset">
        <a class="toggler" href="#">Hide</a>
        <div class="container">
          Data to show/hide
        </div>
        <br/>
        <a class="toggler" href="#">Hide</a>
        <div class="container">
          Data to show/hide
        </div>
      </div>
  • 每个 div 的多个 CSS 因为我不知道将来我会为一个 slider 使用多少个 DIV(好吧,最多 10 个,但我想要干净的 CSS 该死的)

  • 多个 ID 的多个函数,因为我将把 jQuery 函数放在我的模板中,然后在我的文章和页面中需要的地方使用 div,正如我之前提到的:

像这样(这是我理想的解决方案):

<div id="flip" onclick="toggleX('flip','panel');">...</div>
<div id="panel">...</div>
<!-- Similarly for any number of DIVs in same pattern -->
<div id="flip1" onclick="toggleX('flip1','panel1');">...</div>
<div id="panel1">...</div>

什么样的解决方案?

  • 接受有创意的答案,即使它们不符合我的上述规范。如果你能在类里面做到这一点,那就去做吧!我指出 ID 只是因为我相信通过 ID 解决会很有效。
  • 最佳实践:如您所知,我是这方面的新手。如果您知道为此类目的制作切换 slider 的更好做法,我将不胜感激!
  • 半路见我:如果您一直在尝试解决这个问题,但也遇到困难,请随时提供答案。与此同时,我会尝试自己解决它。

最佳答案

您可以使用 attribute starts with selector 来实现它和 next()功能,

 $("div[id^=flip]").click(function() {
   $(this).next("div[id^=panel]").stop().slideToggle("slow");
 });

DEMO

我已经按照你上面的方式回答了问题。但是在这种情况下使用通用类是正确的做法。由于具有 id 的元素将在全局范围内为命名访问创建不必要的引用。

 $("div.flipClass").click(function() {
   $(this).next("div.panelClass").stop().slideToggle("slow");
 });

DEMO

关于jquery - 显示/隐藏任意数量 ID 的 slider 切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36548064/

相关文章:

c# - Linq:数据表到列表。 Actor 阵容问题

html - Bootstrap 垂直居中对齐两个文本 block

html - IE 6 和 7 后台继承问题,如何解决?

javascript - jquery数学求和方法

javascript - 将数据从一个表单字段传递到另一个表单字段

javascript - 如何根据附加参数刷新剑道网格

javascript - 如何使用vue js显示指定的行?

javascript - 你会如何在输入内容时让预先写好的文本出现?

javascript - 将页面缩放到屏幕大小

html - 如何防止在将浏览器缩放更改为 "Ctrl -"或 "Ctrl +"时调整图像大小?