如何使用javascript展开和折叠<div>?

Rya*_*sen 85 javascript jquery

我在我的网站上创建了一个列表.此列表由foreach循环创建,该循环使用来自我的数据库的信息构建.每个项目都是一个具有不同部分的容器,因此这不是像1,2,3等等的列表.我列出了包含信息的重复部分.在每个部分中,都有一个小节.一般构建如下:

<div>
    <fieldset class="majorpoints" onclick="majorpointsexpand($(this).find('legend').innerHTML)">
    <legend class="majorpointslegend">Expand</legend>
    <div style="display:none" >
        <ul>
            <li></li>
            <li></li>
        </ul>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

所以,我试图用onclick ="majorpointsexpand($(this).find('legend').innerHTML)来调用函数"

我试图操纵的div是默认情况下的style ="display:none",我想使用javascript使其在点击时可见.

"$(this).find('legend').innerHTML"试图在函数中传递"Expand"作为参数.

这是javascript:

function majorpointsexpand(expand)
    {
        if (expand == "Expand")
            {
                document.write.$(this).find('div').style = "display:inherit";
                document.write.$(this).find('legend').innerHTML = "Collapse";
            }
        else
            {
                document.write.$(this).find('div').style = "display:none";
                document.write.$(this).find('legend').innerHTML = "Expand";
            }
    }
Run Code Online (Sandbox Code Playgroud)

我几乎100%确定我的问题是语法,而且我对javascript的工作原理并不十分了解.

我确实有jQuery链接到文档:

<script src="http://code.jquery.com/jquery-1.9.1.min.js"></script>
Run Code Online (Sandbox Code Playgroud)

在该<head></head>部分.

kri*_*ath 172

好的,所以你有两个选择:

  1. 使用jQuery UI的手风琴 - 它美观,简单,快速.在这里查看更多信息
  2. 或者,如果您仍然希望自己这样做,您可以删除fieldset(无论如何它在语义上没有使用它)并自己创建一个结构.

这是你如何做到的.创建一个这样的HTML结构:

<div class="container">
    <div class="header"><span>Expand</span>

    </div>
    <div class="content">
        <ul>
            <li>This is just some random content.</li>
            <li>This is just some random content.</li>
            <li>This is just some random content.</li>
            <li>This is just some random content.</li>
        </ul>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

使用这个CSS :(这是为了.content在页面加载时隐藏内容.

.container .content {
    display: none;
    padding : 5px;
}
Run Code Online (Sandbox Code Playgroud)

然后,使用jQuery,click为标题编写一个事件.

$(".header").click(function () {

    $header = $(this);
    //getting the next element
    $content = $header.next();
    //open up the content needed - toggle the slide- if visible, slide up, if not slidedown.
    $content.slideToggle(500, function () {
        //execute this after slideToggle is done
        //change text of header based on visibility of content div
        $header.text(function () {
            //change text based on condition
            return $content.is(":visible") ? "Collapse" : "Expand";
        });
    });

});
Run Code Online (Sandbox Code Playgroud)

这是一个演示:http://jsfiddle.net/hungerpain/eK8X5/7/

  • +1如果页面上有多个DIV元素,这将解决问题.换句话说,由于您要定位所点击标题中的内容,因此可以很好地扩展. (9认同)
  • 字段集不是必需的.我会摆脱它,只是使用边框.这是非常好的,因为它选择div相对于我点击的标题进行扩展,这很重要,因为根据用户设置和其他因素,我可能有几个不同数量的列出项目. (2认同)
  • @Unipartisandev 看看这个:http://jsfiddle.net/hungerpain/476Nq/ 完整的例子:) (2认同)

raa*_*m86 19

怎么样:

jQuery的:

$('.majorpoints').click(function(){
    $(this).find('.hider').toggle();
});
Run Code Online (Sandbox Code Playgroud)

HTML

<div>
  <fieldset class="majorpoints">
    <legend class="majorpointslegend">Expand</legend>
    <div class="hider" style="display:none" >
        <ul>
            <li>cccc</li>
            <li></li>
        </ul>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

小提琴

这样,您就可以将click事件绑定到.majorpoints类,而不必每次都在HTML中编写它.


Dav*_*Lin 6

这里有很多问题

我已经设置了一个适合你的小提琴:http://jsfiddle.net/w9kSU/

$('.majorpointslegend').click(function(){
    if($(this).text()=='Expand'){
        $('#mylist').show();
        $(this).text('Colapse');
    }else{
        $('#mylist').hide();
        $(this).text('Expand');
    }
});
Run Code Online (Sandbox Code Playgroud)


Mik*_*ins 6

所以,首先,你的Javascript甚至不使用jQuery.有几种方法可以做到这一点.例如:

第一种方法,使用jQuery toggle方法:

<div class="expandContent">
        <a href="#">Click Here to Display More Content</a>
 </div>
<div class="showMe" style="display:none">
        This content was hidden, but now shows up
</div>

<script>  
    $('.expandContent').click(function(){
        $('.showMe').toggle();
    });
</script>
Run Code Online (Sandbox Code Playgroud)

jsFiddle:http: //jsfiddle.net/pM3DF/

另一种方法是使用jQuery show方法:

<div class="expandContent">
        <a href="#">Click Here to Display More Content</a>
 </div>
<div class="showMe" style="display:none">
        This content was hidden, but now shows up
</div>

<script>
    $('.expandContent').click(function(){
        $('.showMe').show();
    });
</script>
Run Code Online (Sandbox Code Playgroud)

jsFiddle:http://jsfiddle.net/Q2wfM/

第三种方法是使用slideTogglejQuery方法,它允许一些效果.比如$('#showMe').slideToggle('slow');哪会慢慢显示隐藏的div.


Mik*_*oni 5

您可能想要查看在单击链接以进行面板/ div展开或折叠时要调用的这个简单Javascript方法.

<script language="javascript"> 
function toggle(elementId) {
    var ele = document.getElementById(elementId);
    if(ele.style.display == "block") {
            ele.style.display = "none";
    }
    else {
        ele.style.display = "block";
    }
} 
</script>
Run Code Online (Sandbox Code Playgroud)

您可以传递div ID,它将在显示'none'或'block'之间切换.

snip2code上的原始资源- 如何在html中折叠div