如何检测DOM准备好,并添加一个没有jQuery的类?
我想重写这一行,而不使用jQuery,所以可以更快地应用(和下载jQuery库之前)。 这条线是…
$(document).ready(function() { $('body').addClass('javascript'); });
如果我把它添加到html
元素,我可以离开DOM准备好的部分? 这个问题的一个问题是validation器不喜欢html
元素的class属性,即使它是用JS插入的。
那么,我将如何重写没有jQuery?
如果您想重现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(); } }); }
我不知道香草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>