我有一个使用的脚本$(document).ready,但它不使用jQuery中的任何其他内容.我想通过删除jQuery依赖项来减轻它.
如何在$(document).ready不使用jQuery的情况下实现自己的功能?我知道使用window.onload不会是相同的,因为window.onload在加载了所有图像,帧等之后的火灾.
我需要编写一段代码,将一个监听器附加到选定的事件,并且可以在任何流行的浏览器中,在任何版本的浏览器中使用.做了一些搜索后,我出来了以下功能:
function addListener(event, thefunction)
{
if(window.addEventListener)
{
//All browsers, except IE before version 9.
window.addEventListener(event, thefunction, false);
}
else if(window.attachEvent)
{
//IE before version 9.
window.attachEvent(event, thefunction);
}
}
Run Code Online (Sandbox Code Playgroud)
很简单,似乎是不言自明的.
DOMContentLoaded事件可能存在一些问题,因为IE(AFAIK)的任何版本都没有识别它,开发人员有义务使用它onreadystatechange.解决这个问题似乎也很简单,直到Internet Explorer 9.你只需要写一个额外的行else if(window.attachEvent):
event = (event == 'DOMContentLoaded') ? 'onreadystatechange' : "on" + event;
Run Code Online (Sandbox Code Playgroud)
这部分总是在任何版本的Internet Explorer中触发,这一行提供了事件名称的简单转换,因此总是使用正确的一个.
但是Internet Explorer 9(及以上版本)呢?其中微软决定attachEvent支持它addEventListener.但是没有onreadystatechange变成DOMContentLoaded.
我不能window.addEventListener部分地使用上面的行,因为即使对于其他浏览器,它也会重写DOMContentLoaded为onreadystatechange事件,并且在那里失败,因为它们使用DOMContentLoaded.
因此,没有解决这个问题的唯一办法,就是浏览器检测(类型和版本)增加window.addEventListener部分,如果它检测到脚本处理IE 9或以上,它将从改写事件名称DOMContentLoaded来onreadystatechange(和补充其他活动名称with …