如何检测DOM准备好,并添加一个没有jQuery的类?

我想重写这一行,而不使用jQuery,所以可以更快地应用(和下载jQuery库之前)。 这条线是…

$(document).ready(function() { $('body').addClass('javascript'); }); 

如果我把它添加到html元素,我可以离开DOM准备好的部分? 这个问题的一个问题是validation器不喜欢html元素的class属性,即使它是用JS插入的。

那么,我将如何重写没有jQuery?

如果您想重现jQuery的document.ready事件,则可以使用onreadystatechangeDOMContentLoaded事件:

 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(); } }); } 

我不知道香草JS,但你可以写:

 document.getElementsByTagName('body')[0].className += ' javascript'; 

在页面底部(closuresbody标签之前)。

如果您的目标是在页面加载时立即将该类添加到body ,也许隐藏no-JS-fallback元素,您可以立即在body标签内部执行此操作,而不是等待任何事件:

 <body> <script type="text/javascript"> document.body.className+= ' javascript'; </script> 

(尽pipe一般情况下,如果这样做的目的是最好删除回退元素,并用脚本元素replace它们,以便在页面上的所有其他组件都不会中断的情况下执行一个脚本。

这是绑定到元素的最快方法:在创build元素之后立即执行(如果您只需要更改元素,请在打开标记内部;如果您需要更改元素,则在紧跟标记后面)。 然而,这种方法往往会使用丑陋的<script>块来丢弃页面,这就是为什么更多的人把代码全部放在底部或使用加载/就绪处理程序。

 window.onload = function() { var elmt = document.getElementsByTagName('body'); if(elmt){ elmt[0].className = 'javascript'; } } 

这应该做到这一点。

编辑:更新获取元素的标签名称不ID。

简单:

 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>标记之前。 简单和容易(和非常接近)的解决scheme。

如果只是处理现代浏览器,你可以把它放在开头的标签之后。

 <script> document.body.classList.add("javascript"); </script>