【问题标题】:Make jquery toggle work with dynamic content使 jquery 切换与动态内容一起工作
【发布时间】:2012-07-28 05:51:49
【问题描述】:

我的网站上有以下代码:http://jsfiddle.net/dJLK3/1/ 如您所见,它工作得很好。

问题是:那些 div 和链接触发器来自数据库。今天我有1个,明天可能是10个......

我不知道如何转换它并使其工作,而无需正确的大量代码,如链接 1、链接 2、链接 3、链接 4、链接 5 等等......

有人吗? :)

【问题讨论】:

  • 您能否扩展或显示一些代码,说明您实际上是如何从数据库中获取 div(以及以什么格式)?

标签: javascript jquery


【解决方案1】:

使用data attr 和jQuery.datareference

更新
根据this评论。

html

<div class="menu">
    <a href="#" class="link" data-slide-content="div1">Link1</a>
    <a href="#" class="link" data-slide-content="div2">Link2</a>
</div>
<div id="div1" class="slide"></div>
<div id="div2" class="slide"></div>​

js

$('.menu').on('click', '.link', function(){
    var id = $(this).data('slideContent');
    $('.slide').not('#' + id).slideUp(function() {
        $('#' + id).slideToggle();
    });
});

​css

.slide {
    display: none;
    height: 100px;
    width: 100px;
    position: fixed;
    top: 30px;
}

demo

参考资料:

【讨论】:

  • 几乎......你能在切换下一个之前让它滑动 div 吗?这样它会关闭黄色并以红色打开或关闭红色然后以黄色打开......明白了吗? :)
【解决方案2】:

更新

这是一个可能的答案 - FIDDLE - Update - With new requirements

此处发布代码以供澄清

<div id='link_collection'>
    <a href="#" class="link">Link1</a>
    <a href="#" class="link">Link2</a>
</div>
<div id='div_collection'>
    <div class='div current'></div>
    <div class='div'></div>
</div>
$(document).ready(function() {
    $('#link_collection').on('click', '.link', function() {
        var divCollection = $('#div_collection .div'),
            index = $(this).index(), hasClickedMeAgain,
            current = divCollection.filter('.current');

        hasClickedMeAgain = current.index() === index;
        if (hasClickedMeAgain){
            current.slideToggle();
            return false;
        }
        current.slideUp(function() {
            $(this).removeClass('current');
            divCollection.eq(index).addClass('current').slideToggle();
        });
    })
});

这样,你不需要保留任何东西的标签。只需按照它们到达的顺序继续插入 div 和链接,然后代码就会自行处理。一切顺利。

【讨论】:

  • 它不工作...看看这里:jsfiddle.net/dJLK3/10 它永远不会关闭,它在两个 div 之间切换
  • 尝试更改颜色,我已经添加了一些控制台语句以供您使用,它会工作的
  • 它工作得很好,但我的代码将有超过 1 个 link_collection 和 div_collection...我的意思是,我将根据我的数据库中有多少数据重复你的 html 代码。无论如何,感谢您为帮助我所做的一切努力!
【解决方案3】:

这对你有用吗?对所有这些都使用相同的类属性。并在 document.ready() 上有以下代码来分配点击事件:

HTML:

<a class="ui-link-option">Link 1</a>
<a class="ui-link-option">Link 2</a>

<div class="ui-link-option-text">Text Here 1</div>
<div class="ui-link-option-text">Text Here 2</div>

Javascript:

$("a.ui-link-option").each(
  function (index) {
    var $this = $(this);
    $this.data("index", index);
    $this.bind("click", function(e) {
      var $this = $(this);
      var linkIndex = $this.data("index");
      $("div.ui-link-option-text").each(
        function (index) {
          if (index == linkIndex) {
            $(this).slideToggle();
          } else {
            $(this).hide();
          }
        }
      );
    });
  }
);

【讨论】:

  • 您好,感谢您的帮助。我不能设置同一个类,因为它总是 2 个 div 和 2 个触发器。看看:bit.ly/MaEV2g 尝试点击 PROGRAMACAO 和 TEXTO CURATORIAL
  • 您仍然可以对所有锚标签使用相同的类名,对所有 div 标签使用相同的类名。检查更新的代码。 (假设每个 a 标签都有对应的 div 标签。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-12
  • 2019-01-05
  • 2013-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多