JavaScript - 用"js"类替换"no-js"类不起作用?



我在<html>元素中放置了一个名为"no-js"的类。这表示用户没有使用javascript(无论是被禁用还是被阻止)。然后,在我创建的脚本文件中,我想撤销"no js"并注入"js",这样我就可以通过类来确定用户是否在使用javascript。我尝试通过查询html标记来使用replace()方法,但它不起作用。这是我的:

var html = document.getElementsByTagName("html")[0];
if(html.className == "no-js") {
    html.className.replace("no-js", "js"); // user has JS enabled
} 

Google Chrome或Firefox的bug控制台中没有错误,但也没有将no-js更改为js。我会使用<noscript>标记,但我喜欢保持它的标记端干净。

replace返回新字符串,它不会修改原始字符串。

试试html.className = 'js',因为您已经确定它是if语句中唯一的类名。

EDIT:此外,<html>标记已作为document.documentElement可用。

document.documentElement.className = 'js';

这就是你所需要的,真的。没有if语句,没有变量,什么都没有。

接受的答案确实是正确的,但这种方式将替换<html>的所有类,而不仅仅是.no-js

这个小脚本会做同样的事情,但只搜索no-js类并重写它

document.documentElement.className = document.documentElement.className.replace(/bno-jsb/g, '') + ' js ';

从这里取剧本,很简单!http://snipplr.com/view/63895/remove-nojs-class-from-html-tag-add-js-class/

您忘记将html.className分配给新值:

var html = document.getElementsByTagName("html")[0];
if(html.className == "no-js") {
    html.className = html.className.replace("no-js", "js"); // user has JS enabled
} 

使用一点正则表达式

(function(html) {
  html.className = html.className.replace(/bno-jsb/, 'js')
})(document.documentElement);
<!DOCTYPE html>
<html class="no-js">
<head>
	
</body>
</html>

最新更新