javascript - 可折叠 Div 脚本。代码不适用于多个 div

标签 javascript html css

想知道如何让我的代码适用于多个可折叠 div,而无需创建相同 CSS/JS 代码的其他实例?

到目前为止,我只成功地使其适用于 1 个 div。我对 JS 还是个新手,我喜欢学习新技术。

我很高兴听到一些反馈。

<input type="button" onclick="growDiv()" value="Read more" id="more-button">
<div id='grow'>
    <div class='measuringWrapper'>
        <div class="text">Testing Collapse Testing Collapse Testing Collapse Testing Collapse Testing Collapse Testing Collapse v Testing Collapse Testing Collapse</div>
    </div>
</div>

JS

function growDiv() {
    var growDiv = document.getElementById('grow');
    if (growDiv.clientHeight) {
        growDiv.style.height = 0;
    } else {
        var wrapper = document.querySelector('.measuringWrapper');
        growDiv.style.height = wrapper.clientHeight + "px";
    }
    document.getElementById("more-button").value = document.getElementById("more-button").value == 'Read more' ? 'Read less' : 'Read more';
}

这是我的 JSfiddle

http://jsfiddle.net/kGs7Q/1/

最佳答案

  1. 使用类而不是 ID
  2. 迭代一次 div 并附加事件监听器
  3. 使用闭包来保留对事件回调内元素的引用

this JSFiddle 中的工作示例.

这里是 HTML/JS 供引用:

HTML:

<div class="collapsible">
    <input type="button" value="Read more" class="more-button">
    <div class='growable'>
        <div class='measuringWrapper'>
            <div class="text">Testing Collapse Testing Collapse Testing Collapse Testing Collapse Testing Collapse Testing Collapse v Testing Collapse Testing Collapse</div>
        </div>
    </div>
</div>

复制粘贴任意数量的内容。

JS:

(function() {
    var i, len, collapsibles = document.getElementsByClassName('collapsible');
    for (i = 0, len = collapsibles.length; i < len; i++) {
        (function(collapsible) {
            var button = collapsible.getElementsByClassName('more-button')[0];
            var growDiv = collapsible.getElementsByClassName('growable')[0];
            var wrapper = growDiv.getElementsByClassName('measuringWrapper')[0];
            button.addEventListener('click', function() {
                if (growDiv.clientHeight) {
                    growDiv.style.height = 0;
                }
                else {
                    growDiv.style.height = wrapper.clientHeight + "px";
                }
                button.value = (button.value === 'Read more' ? 'Read less' : 'Read more');
            });
        })(collapsibles[i]);
    }
})();

关于javascript - 可折叠 Div 脚本。代码不适用于多个 div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20167927/

相关文章:

javascript - 可以在 flexboxes 中使用相对定位吗?

javascript - 将 Angular Directive(指令)、 Controller 和路由包装到函数中

html - fixed top :0 right:0 item is not correctly showed on mobile when virtual keyboard is there,如何修复?

html - 如何在 div 中居中对齐列表项?

javascript - 如何添加淡入淡出效果

jquery - 居中流体 div,两侧填充遗留区域

css - 即列表中的垂直空间问题

javascript - 表上的更改事件在 IE 中失败

javascript - 修改对象名称后读取JSON数据失败

jquery - 我希望在菜单 slider 向下时将我的内容向下推