我想重写这行代码,不使用jQuery,以便更快地应用它(并且在下载jQuery库之前)。这一行是...
$(document).ready(function() { $('body').addClass('javascript'); });
如果我将代码添加到 html
元素中,是否可以省略 DOM 准备部分?不过这样做的一个问题是验证器不喜欢在 html
元素上使用 class 属性,即使是通过 JS 插入的也是如此。
那么,我该如何在没有 jQuery 的情况下重写代码?
我想重写这行代码,不使用jQuery,以便更快地应用它(并且在下载jQuery库之前)。这一行是...
$(document).ready(function() { $('body').addClass('javascript'); });
如果我将代码添加到 html
元素中,是否可以省略 DOM 准备部分?不过这样做的一个问题是验证器不喜欢在 html
元素上使用 class 属性,即使是通过 JS 插入的也是如此。
那么,我该如何在没有 jQuery 的情况下重写代码?
document.ready
事件,可以使用适当的onreadystatechange
或DOMContentLoaded
事件:function domReady () {
document.body.className += " javascript";
// ...
}
// Mozilla, Opera, Webkit
if ( document.addEventListener ) {
document.addEventListener( "DOMContentLoaded", function(){
document.removeEventListener( "DOMContentLoaded", arguments.callee, false);
domReady();
}, false );
// If IE event model is used
} else if ( document.attachEvent ) {
// ensure firing before onload
document.attachEvent("onreadystatechange", function(){
if ( document.readyState === "complete" ) {
document.detachEvent( "onreadystatechange", arguments.callee );
domReady();
}
});
}
document.attachEvent
的能力检测,并始终使用 DOMContentLoaded 事件。https://github.com/jquery/jquery/blob/master/src/core/ready.js - pgraham我不知道什么是原生JS,但你可以这样写:
document.getElementsByTagName('body')[0].className += ' javascript';
document.getElementsByTagName('body')[0] === document.body
- alexbody
结束标签后也可以工作。甚至在 html
结束标签之后也可以。 - oriadambody
,可能是为了隐藏无JS回退元素,那么您可以在标签内立即执行此操作,而不必等待任何事件:<body>
<script type="text/javascript">
document.body.className+= ' javascript';
</script>
尽管一般来说,如果这是目的的话最好删除回退元素并逐步将其替换为脚本化元素,以便如果一个脚本出错,页面上的其他组件不会中断。
这是绑定元素的最快方式:在创建它们后立即执行(如果只需更改元素,则在打开标记内;如果需要更改其内容,则在关闭标记后)。然而,这种方法往往会在页面上散布丑陋的<script>
块,这就是为什么更多的人将代码全部放在底部或使用加载/就绪处理程序的原因。
window.onload = function() {
var elmt = document.getElementsByTagName('body');
if(elmt){
elmt[0].className = 'javascript';
}
}
应该可以了。
编辑:更新为按标签名获取元素而不是ID。
onload
会在 $(document).ready
之后触发 - 我认为它在等待所有图片加载完成,例如。 - Kobi简单:
window.onload = function() {
document.body.className = "javascript";
}
或者在HTML中:
<body onload="document.body.className = 'javascript'">...</body>
除非你想区分“onload之前”和“onload之后”,否则你可以静态地完成它:
<body class="javascript">...</body>
<script>
document.body.className = 'javascript';
</script>
只需放置这个
<script>document.body.className += ' javascript';</script>
在 </body>
标签之前。简单易行(而且非常接近)的解决方案。
body
标签之后。<script>
document.body.classList.add("javascript");
</script>