我想从head标签内进行快速 javascript 检查,如下所示:
<html>
<head>
...
<script>
document.body.classList.remove("no-js");
document.body.classList.add("js");
</script>
</head>
<body class='no-js'>
...
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
这不起作用。Cannot read property classList of null,这...很公平。如果我将<script>标签移动到<body>,一切正常,但我希望<script>标签在<head>.
我有哪些选择?
编辑:我应该对错误更清楚。我意识到问题是当我尝试添加类时主体尚未加载。但是,我最初使用了一些 Modernizr,它以某种方式能够从头部内部修改 body 类,我认为它没有使用window.onload或类似的东西。
加载正文后运行代码。有几种方法可以解决这个问题:
onload.<html>
<head>
...
<script>
function load() {
document.body.classList.remove("no-js");
document.body.classList.add("js");
}
</script>
</head>
<body onload="load();" class='no-js'>
...
</body>
</html>Run Code Online (Sandbox Code Playgroud)
DOMContentLoaded事件侦听器回调中,以便在加载 dom 元素后调用。<html>
<head>
...
<script>
document.addEventListener("DOMContentLoaded", function() {
document.body.classList.remove("no-js");
document.body.classList.add("js");
});
</script>
</head>
<body class='no-js'>
...
</body>
</html>Run Code Online (Sandbox Code Playgroud)
script标签移动到页面的末尾。<html>
<head>
...
</head>
<body class='no-js'>
...
<script>
document.body.classList.remove("no-js");
document.body.classList.add("js");
</script>
</body>
</html>Run Code Online (Sandbox Code Playgroud)