切换显示:无JavaScript样式

Jos*_*ond 35 html javascript css

我想更改样式(下面的第二行),以便display: none;在用户单击"显示所有标记"链接时删除该部分.如果用户再次单击"显示所有标记"链接,我需要将display: none;文本添加回"样式..."语句.

<a href="#" title="Show Tags">Show All Tags</a>
<ul class="subforums" style="display: none; overflow-x: visible; overflow-y: visible; ">
Run Code Online (Sandbox Code Playgroud)

我在这里和谷歌搜索了一个例子,我可以应用于我的情况.我发现了很多使用2个DIV块来显示/隐藏的例子.我真的需要这样做,通过修改html样式元素.有没有人有一个例子(或提供一个例子的链接)与display: none文本进行这种类型的切换.

Ada*_*kis 85

给你ul一个id,

<ul id='yourUlId' class="subforums" style="display: none; overflow-x: visible; overflow-y: visible; ">
Run Code Online (Sandbox Code Playgroud)

然后做

var yourUl = document.getElementById("yourUlId");
yourUl.style.display = yourUl.style.display === 'none' ? '' : 'none';
Run Code Online (Sandbox Code Playgroud)

如果您使用的是jQuery,则会变为:

var $yourUl = $("#yourUlId"); 
$yourUl.css("display", $yourUl.css("display") === 'none' ? '' : 'none');
Run Code Online (Sandbox Code Playgroud)

最后,您明确表示您想要操纵此css属性,而不是简单地显示或隐藏底层元素.尽管如此,我会用jQuery提到它

$("#yourUlId").toggle();
Run Code Online (Sandbox Code Playgroud)

将在显示或隐藏此元素之间切换.


mar*_*ejo 11

为UL提供ID并使用getElementById函数:

<html>
<body>
    <script>
    function toggledisplay(elementID)
    {
        (function(style) {
            style.display = style.display === 'none' ? '' : 'none';
        })(document.getElementById(elementID).style);
    }
    </script>

<a href="#" title="Show Tags" onClick="toggledisplay('changethis');">Show All Tags</a>
<ul class="subforums" id="changethis" style="overflow-x: visible; overflow-y: visible; ">
    <li>Item 1</li>
    <li>Item 2</li>
    <li>Item 3</li>
</ul>

</body>
</html>
Run Code Online (Sandbox Code Playgroud)

  • 这是推荐和明智的方法,应该选择最佳答案.您不需要50K jQuery库来执行此操作. (3认同)
  • @Rob我很乐意交换意见和评论,只关心帮助他人,学习自我,交流知识.如果你想反驳我的论点,我很乐意听你的.但是,如果你想亲自接受这个,你可能需要去其他社区...... (2认同)

Thi*_*iff 5

其他人已经完美地回答了你的问题,但我只是想我会抛弃另一种方式.在可能的情况下分离HTML标记,CSS样式和javascript代码总是一个好主意.考虑到这一点,隐藏某些东西最干净的方法是使用一个类.它允许在它所属的CSS中定义"hide"的定义.使用此方法,您可以稍后ul通过使用CSS向上滚动或淡出来决定要隐藏transition,而无需更改HTML或代码.这个时间更长,但我觉得这是一个更好的整体解决方案.

演示:http://jsfiddle.net/ThinkingStiff/RkQCF/

HTML:

<a id="showTags" href="#" title="Show Tags">Show All Tags</a>
<ul id="subforms" class="subforums hide"><li>one</li><li>two</li><li>three</li></ul>
Run Code Online (Sandbox Code Playgroud)

CSS:

#subforms {
    overflow-x: visible; 
    overflow-y: visible;
}

.hide {
    display: none; 
}
Run Code Online (Sandbox Code Playgroud)

脚本:

document.getElementById( 'showTags' ).addEventListener( 'click', function () {
    document.getElementById( 'subforms' ).toggleClass( 'hide' );
}, false );

Element.prototype.toggleClass = function ( className ) {
    if( this.className.split( ' ' ).indexOf( className ) == -1 ) {
        this.className = ( this.className + ' ' + className ).trim();
    } else {
        this.className = this.className.replace( new RegExp( '(\\s|^)' + className + '(\\s|$)' ), ' ' ).trim();
    };
};
Run Code Online (Sandbox Code Playgroud)

  • 如果不创建原型,那么使用 document.getElementById('#potato').classList.toggle('hide')` 怎么样? (2认同)