如果启用Javascript,如何显示一个<div>,如果不是,则如何显示不同的<div>?

6 javascript css show hide

我正在使用一些Javascript来显示"照片淡入淡出旋转器" <div>.但是,如果没有启用JS,我会想要显示一个动画gif.我实际上已经使用此代码:

<div id="slideshow" class="show pics float-left">
    <img src="images/banner-photos/new-01.png" width="343" height="228" alt="photo" />
    <img src="images/banner-photos/new-02.png" width="343" height="228" alt="photo" />
    <img src="images/banner-photos/new-03.png" width="343" height="228" alt="photo" />
</div>

<noscript>
    <link href="css/hide-slideshow.css" rel="stylesheet" type="text/css" />
    <p class="adjust"><img src="images/banner-photos/animation.gif" alt="slideshow" /></p>
</noscript>
Run Code Online (Sandbox Code Playgroud)

外部JS文件在它上面发挥了作用<div>.id ="slideshow"上的类设置尺寸,填充,边距,定位等."hide-slideshow"css文件在#slideshow上执行"display:none",并且围绕动画gif的"adjust"类执行一些操作推动和拉动以获得它需要的位置(如果没有隐藏的话,幻灯片放映的位置).

我在FF3,IE7,IE8,Chrome和Safari(Win)中测试了这个.好消息是它就像一个魅力.坏消息是它没有通过W3C验证器.我得到一个错误,说"文档类型不允许元素"链接"这里".

即使我的方法有效,它是否过于笨拙?有没有更好的方法来展示一个<div>如果启用JS而另一个是不同的,<div>如果它不是,以一种跨浏览器工作并通过验证的方式?

谢谢!

Dan*_*ert 24

尝试这样的事情.它优雅地降级,不需要<noscript />标签.

<div id="hasJavaScript" style="display: none">
    <!-- Contents hidden when JavaScript is disabled -->
</div>

<div id="noscript">
    <!-- Contents shown only when JavaScript is disabled -->
</div>

<script type="text/javascript">

    document.getElementById('hasJavaScript').style.display = 'block';
    document.getElementById('noscript').style.display = 'none';

</script>
Run Code Online (Sandbox Code Playgroud)

为了简化示例,我使用了ID.使用类更合适.此外,大多数像样的入门框架(如HTML5 BoilerplateModernizr)都会使用HTML标记上的CSS类来执行此操作,因此您可以使用全局方式隐藏/显示CSS文件中的内容而不是使用JS.该<html />标签带有一个开始no-jsCSS类,它被用替代js的JS类.这允许您只使用适当的类为任何依赖于JS存在的CSS规则添加前缀.这更具语义性,因为它将表达事物(应该在视觉上隐藏/显示的内容)与逻辑事物(无论页面是否运行JS)分开.


回答原始问题的另一个选择是默认情况下将链接添加到头文件中的CSS文档,并使用JavaScript将其删除.(免责声明)我没有对此进行测试,但它也适用于所有浏览器.

<script type="text/javascript">
    var cssDocs = document.getElementsByTagName('LINK');
    for (var i = 0; i < cssDocs.length; i++) {
        var css = cssDocs[i];
        if (css.href === 'css/hide-slideshow.css') {
            var parent = css.parentNode;
            parent.removeChild(css);
            break;
        }
    }
</script>
Run Code Online (Sandbox Code Playgroud)

如果您使用的是jQuery,也可以缩短此脚本.

$("link[href='css/hide-slideshow.css']").remove();
Run Code Online (Sandbox Code Playgroud)


Pau*_*her 4

只需给 no-Javascript 一个div自己的类,并将其样式定义放入样式表中即可。将其包含在一个<noscript>块中。div您可以使用脚本动态插入另一个。