【问题标题】:Javascript, fastest way to remove a class from `<body>`Javascript,从 `<body>` 中删除类的最快方法
【发布时间】:2010-12-09 10:39:58
【问题描述】:

我有一个 body 元素,我在其上添加了一些类。我想在浏览器读取 no-javascript 类之后从中删除它。

   <body class="foo boo no-javascript bla">
   <script type="javascript">
      // remove no-javascript class here
   </script>

【问题讨论】:

    标签: javascript html css


    【解决方案1】:

    好吧,既然多余的空格无关紧要,我会说:

    document.body.className = document.body.className.replace("no-javascript","");
    

    You can test it out here.

    【讨论】:

    • 例如,当你有另一个名为“piano-javascript”的类时会失败。
    • @Tim - 我同意,但是看看类名,这是一个非常特定的用例。
    • 同意。只是指出任何希望将此应用于一般情况的人。
    • @Tim - 是的,公平点,对于到目前为止准备好的任何人,上述更一般的用法是:document.body.className = " "+document.body.className+" ".replace(" no-javascript ","");
    • ... 除非“no-javascript”位于className 字符串的开头。 @Stephan Muller 的回答涵盖了一般情况。
    【解决方案2】:
    document.querySelector('body').classList.remove('no-javascript');
    

    【讨论】:

    • 既然这是我的首选方法,我会解释一下。 document.querySelector 使用 CSS 选择器语法选择页面上的指定元素,在本例中为 body。接下来classList 返回与元素关联的类。最后,.remove 将从classList 中删除任何指定的类。
    【解决方案3】:

    没有用于此的原生 javascript 函数,但我总是使用以下代码(借自/启发 this snipplr

    function removeClass(ele,cls) {
       var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)');
       ele.className = ele.className.replace(reg,' ');
    }
    
    removeClass(document.getElementById("body"), "no-javascript")
    

    正则表达式比其他答案中提到的replace 函数做得更好,因为它检查是否存在该确切的类名,仅此而已。一个名为“piano-javascript”的类将在此版本中保持不变。


    对于modern browsers(包括 IE10 及更高版本),您还可以使用:

    document.querySelector('body').classList.remove('no-javascript');
    

    【讨论】:

    • 但有一件事:我会失去hasClass() 签入removeClass()。这是多余的。
    【解决方案4】:
    document.body.className = '';
    

    【讨论】:

    • 这将删除所有类,而不仅仅是no-javascript
    • @El Ronnoco:我知道。但它确实按照要求删除了课程。我知道我说得过于直白了,但这最快的:)
    • 点了。像真正的程序员一样思考! :)
    • 我投了反对票,但重新考虑了,因为它确实回答了这个问题。
    • 我其实最喜欢这个,我用它来清除所有类名,然后再添加另一个窗口宽度变化。
    【解决方案5】:

    您可以通过使用来避免所有这些工作

    <noscript>Your browser does not support JavaScript!</noscript>
    

    因为你在noscript标签里面放的任何东西如果关闭Javascript就会显示,如果打开JS什么都不会显示。

    【讨论】:

    • 但我想显示所有页面,即使 js 被禁用,我只需要该类用 CSS 隐藏某些元素
    猜你喜欢
    • 2015-07-30
    • 2020-07-09
    • 1970-01-01
    • 2015-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 2012-04-25
    相关资源
    最近更新 更多