Javascript:使用切换按钮隐藏和显示 div 标签

Posted

技术标签:

【中文标题】Javascript:使用切换按钮隐藏和显示 div 标签【英文标题】:Javascript: Hiding and Showing div tag with a toggle button 【发布时间】:2014-01-26 16:10:12 【问题描述】:

我会直接说:

我需要做的是通过按下一个按钮隐藏一个特定的 div,它应该是一个切换,所以基本上:按一次隐藏,再按一次显示,再按一次隐藏等等......

我希望在 CSS 中完成隐藏/显示规则并在纯 javascript 中完成交互(请不要使用 jquery)。好吧,这就是我需要做的,但我不太确定如何执行 javascript 代码。

html:

<p class="button">Show/hide<p>

<div> I want to hide this by pressing the button above</div>

css:

#showhide 
     display: none;


.button 
    display: block;
    height: 30px;
    width: 100px;
    background: green;
    text-align: center;
    padding-top: 10px;
    padding-left: 0px;
    font: 15px arial bold;
    border: 1px solid black;
    text-decoration: none;
    list-style:none;
    margin: 10px 0px 10px 0px;

http://jsfiddle.net/fyUJc/14/

另外,如果你觉得这个问题不属于这里或者很愚蠢,请尽量不要粗鲁,我只是想在这里学习。

【问题讨论】:

您可以在 div 中添加和删除一个类以显示/隐藏它。优秀的综述:***.com/questions/195951/… 用jquery你可以使用这个简单的函数.toggle() api.jquery.com/toggle 【参考方案1】:

您可以使用onclick 方法。将您的 HTML 设置为:

<p class="button" onclick="toggle_visibility('hideMe')">Show/hide</p>
<div id="hideMe">I want to hide this by pressing the button above</div>

并拥有以下 JavaScript:

function toggle_visibility(id) 

    var e = document.getElementById(id);
    if (e.style.display == 'block' || e.style.display=='')
    
        e.style.display = 'none';
    
    else 
    
        e.style.display = 'block';
    

DEMO

【讨论】:

【参考方案2】:

这里是您的代码的更新 JSFiddle,它适用于本机浏览器方法并实现一个简单的切换组件 - http://jsfiddle.net/fyUJc/31/

var button = document.querySelector('.button');
button.addEventListener('click', function(event) 
    var target = document.querySelector(button.getAttribute('data-target'));
    if (target.style.display == "none") 
        target.style.display = "block";
        button.innerHTML = button.getAttribute('data-shown-text');
     else 
        target.style.display = "none";
        button.innerHTML = button.getAttribute('data-hidden-text');
    
);

通过创建一个切换按钮,您将进入 GUI 领域,这是非常复杂的事情。

当前的浏览器技术没有提供一套丰富的工具来帮助您处理您需要在 GUI 中处理的所有事情。 jQuery 也无济于事,因为 GUI 更多的是处理组件和状态,而不是操作 DOM。

即使上面的代码在 Chrome 中工作,您仍然需要注意 DOM 和事件中的浏览器差异,并且您需要对组件进行更好的抽象。我的代码中有很多问题没有解决,如果您每次都从头开始编写它们,将很难正确解决。比如:

如何初始化页面上新添加的切换器? 如何同步 div 和按钮的状态? 如何扩展和插入按钮行为?

我强烈建议您研究为常见问题提供解决方案的 UI 相关库或框架。请参阅 ReactJS、Dojo 或 Sencha(例如 ExtJS)等等。寻找定义小部件/组件生命周期的框架以及扩展和定义自定义框架的方法。

浏览器技术只是没有为制作 UI 组件提供适当的抽象。

【讨论】:

【参考方案3】:

在您的 HTML 标记中使用“onclick”属性的替代解决方案:

<!DOCTYPE html>
    <html>
        <head>
           <script>
               function toggle()
                   var div = document.getElementById("divSection");
                   if (div.style.display =='block')
                       div.style.display = 'none';
                       return;
                   
                   div.style.display ='block';
             
           </script>
        </head>

        <body>
            <p>Click the button to trigger a function.</p>
            <p class="button" onclick="toggle()">Show/hide</p>
            <div id='divSection'> I want to hide this by pressing the button above</div>
        </body>
    </html>

希望对你有帮助。

【讨论】:

【参考方案4】:

您可以将事件侦听器添加到P 标签并调用Toggle() 函数来交换显示值,如下所示。

此处为示例 - JSFiddle

function Toggle() 
    var div = document.getElementsByTagName('div')[0];

    if (div.style.display == 'none') 
        div.style.display = 'block';
     else 
        div.style.display = 'none';
    


(function () 

    var button = document.querySelectorAll(".button");

    for (var i = 0; i < button.length; i++) 
        if (button[i].addEventListener) 
            button[i].addEventListener("click", function () 
                Toggle();
            );
         else 
            button[i].attachEvent("click", function () 
                Toggle();
            );
        
    
)();

尽管您最好将IDs 添加到您的元素中以使其更易于引用。

【讨论】:

以上是关于Javascript:使用切换按钮隐藏和显示 div 标签的主要内容,如果未能解决你的问题,请参考以下文章

javascript点击按钮实现隐藏显示切换效果

用按钮切换显示/隐藏div?

仅使用 Javascript 显示/隐藏单击按钮的密码

使用单选按钮的嵌套问题切换

点击按钮对两个div的隐藏与显示进行切换

[Javascript] 动态隐藏和显示 Layui 数据表格的列