6

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

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-jsjs. 我会使用<noscript>标签,但我喜欢保持它的标记面干净。

4

4 回答 4

8

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

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

编辑:此外,该<html>标签已经可以作为document.documentElement.

document.documentElement.className = 'js';

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

于 2013-02-16T17:15:36.103 回答
5

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

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

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

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

于 2015-05-14T15:26:29.647 回答
1

您忘记将 分配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
} 
于 2013-02-16T17:15:06.820 回答
1

用一点正则表达式

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

于 2016-12-19T13:33:07.090 回答