【问题标题】:Trying to dynamically expand different divs with one function尝试使用一种功能动态扩展不同的 div
【发布时间】:2010-06-08 21:11:50
【问题描述】:

我正在尝试使用相同的代码动态展开/折叠多个 div....

它是通过单击跨度(切换)来控制的,然后我试图获取下一个 id(会上下滑动的 div)

            $('span').toggle(
    function() {
$('#albumholder').slideToggle(600);
    $(this).html('-');},
    function() {
$('#albumholder').slideToggle(600);
    $(this).html('+');}

    );

此代码可以扩展 1 个 div...但假设我有一个 div

#downloadholder
#linksholder
等等...
如何使用相同的代码达到相同的效果?谢谢!

编辑

值得注意的是,我需要每个 div 独立切换。如果我单击影响#albumholder 的跨度上的加号按钮,它不应展开#downloadholder 或#linksholder

【问题讨论】:

    标签: javascript jquery html toggle slidetoggle


    【解决方案1】:

    两种方式——

    将它们添加到选择器中

    $('#downloadholder, #linksholder') 
    

    或为这些项目添加一个类

    $('.toExpand')
    
    <div id="downloadholder" class="toExpand" />
    <div id="linksholder" class="toExpand" />
    

    重读你的问题,也许你想得到next div?

    $('#yourSpanElement').click(function() {
        $span = $(this);
        $yourDiv = $span.next('div');
       // do your magic :)
    });
    

    您的代码已修改:

    $('span').toggle(
        function() {
          var $span = $(this);
          $span.next('div').slideToggle(600);
          $span.html('-');
        },      
        function() {
          var $span = $(this);
          $span.next('div').slideToggle(600);
          $span.html('+');
        }
     );
    

    您还可以检查下一个 div 的外观:

    $('span').click(function() {
      var $span = $(this);
      var $nextDiv = $span.next('div');
      if( $nextDiv.is(':visible') ) {
         $nextDiv.slideUp(600);
         $span.html('+');
      }else {
         $nextDiv.slideDown(600);
         $span.html('-');
      }
    });
    

    【讨论】:

    • 这行得通,但它会影响两个 div...如果我单击任何一个,它们都会切换...我需要让每个人独立工作..感谢您到目前为止的帮助跨度>
    • 在您评论时更新了答案 - 类似的东西?你想要跨度之后的下一个 div 吗?
    • 是的,我想说好吧...我有这个跨度类,如果我点击它,我希望它展开 NEXT div,因为在所有情况下,我想要的 div展开将直接在之后
    • 那么我的回答应该很适合你:)
    【解决方案2】:

    让你变成这样的 htmlr。

    <span toggletarget="downloadholder>+</span>
    <div id="downloadholder"></div>
    

    然后制作你的javascript

    $('span[toggletarget]').click(function () {$(this).toggle(
    function() {
        $("#"+$(this).attr("toggletarget")).slideToggle(600);
        $(this).html('-');},
    function() {
    $('#albumholder').slideToggle(600);
    $(this).html('+');}
    );});
    

    【讨论】:

    • 这可能是但是,搞砸了' :) 我宁愿让 w3c 生我的气,也不愿让我的代码不那么可读。我发明了自己的属性,因为通过这种方式从服务器站点进行管理更容易。如果我所有的 javascript 都是基于发布到 html 上的数据,那么我可以快速轻松地从服务器数据中预填充。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    • 2019-05-17
    • 1970-01-01
    相关资源
    最近更新 更多