我在我的<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的错误控制台中没有错误,但它也没有将no-js
更改为js
。我会使用<noscript>
标签,但我喜欢保持它的标记面干净。
答案 0 :(得分:7)
replace
返回新字符串,它不会修改原始字符串。
请尝试html.className = 'js'
,因为您已经确定它是您if
声明中唯一的类名。
编辑:此外,<html>
标记已作为document.documentElement
提供。
document.documentElement.className = 'js';
这就是你所需要的,真的。没有if
语句,没有变量,没有。
答案 1 :(得分: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/
答案 2 :(得分: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
}
答案 3 :(得分:1)
带一点正则表达式
(function(html) {
html.className = html.className.replace(/\bno-js\b/, 'js')
})(document.documentElement);
&#13;
<!DOCTYPE html>
<html class="no-js">
<head>
</body>
</html>
&#13;