处理HTML DOM文档存在一个难题是,JavaScript可以在DOM完全加载之前执行,这会给你的代码引发不少的潜在问题。浏览器的渲染和操作顺序大致如下列表:
HTML解析完毕
外部脚本和样式表加载完毕
脚本在文档内解析并执行
HTML DOM完全构造起来
图片和外部内容加载
网页完成加载
在网页头部并且从外部文件加载的脚本会在HTML真正构造之前执行。如前所述,这是个至关重要的问题,因为这两处执行的脚本并不能访问还不存在的DOM。幸好,我们还有若干的补救方法。
目前,最常用的级数是完全等待整个页面加载完毕才执行DOM操作。这种技术只需利用window对象的load事件来绑定一个函数,页面加载完毕即可触发。
复制代码 代码如下:
addEvent(window, "load", function(){
// do something
});
最简单的操作却是最慢的。在加载过程的顺序列表中,你会注意到页面的加载完毕与否完全被最后一步所掌控。这就是说,如果页面有很多的图片、视频等,用户可能得登上一段时间JavaScript才执行。
另一种级数可用以监听 DOM 加载状态,可能是最复杂的(从实现角度来看),但也是最有效地。
这项技术在不堵塞浏览器加载的情况下尽可能快地检查 HTML DOM文档是否已经加载了执行所必须得属性。以下是检查HTML DOM是否可用的几个要点:
document: 你需要知道DOM文档是否已经加载。若能足够快地检查,运气好的话你会看到undefined。
document.getElementsByTagName和document.getElementById:频繁使用document.getElementsByTagName和document.getElementById函数检查文档,当存在这些函数则表明DOM已经加载完毕。
document.body: 作为额外补充,检查元素是否已经完全加载。理论上前一个检查应该已经能做出判断,但我发现有些情况下还是不够。
使用这些检查就足够判断DOM是否可用了(“足够”在此表示可能会有一定毫秒级的时间差)。这个方法几乎没有瑕疵。单独使用前述检查,脚本应该可以在现代浏览器中运行得相对良好。但是,最近(2008年?)Firefox实现了缓存改进,使得window加载事件实际上可以在脚本能检查到DOM是否可用之前触发。为了能发挥这个优势,我同时为window加载事件附加检查,以期能获得更快的执行速度。
最后,domReady函数集合了所有需要在DOM可用时就执行的函数的引用。一旦DOM被认为是可用的,就调用这些引用并按顺序一一执行。
复制代码 代码如下:
// 监听 DOM 是否可用的函数
function domReady(f) {
// 假如DOM已经加载,马山执行函数
if(domReady.done) return f();
// 假如我们已经增加了一个函数
if(domReady.timer) {
// 把它假如待执行函数清单中
domReady.ready.push(f);
} else {
// 为页面加载完毕绑定一个事件,以防它最先完成。
addEvent(window, "load", isDOMReady);
// 初始化执行函数的数组
domReady.ready = [f];
// 尽可能快的检查DOM是否已可用
domReady.timer = setInterval(isDOMReady, 13);
}
}
// 检查 DOM 是否已可操作
function isDOMReady() {
// 如果我们能判断出DOM已可能,忽略
if(domReady.done) return false;
// 检查若干函数和元素是否可能
if(document && document.getElementsByTagName && document.getElementById && document.body) {
// 如果可用,我们停止检查
clearInterval(domReady.timer);
domReady.timer = null;
// 执行所有正在等待的函数
for(var i = 0; i < domReady.ready.length; i++) {
domReady.ready[i]();
// 记录我们在此已经完成
domReady.ready = null;
domReady.done = true;
}
}
}
现在我们来看看在HTML文档中是如何执行的。假设已经将domReady函数写到一个名为domready.js的外部文件中
复制代码 代码如下:
<html>
<head>
<title> Testing DOM Loading</title>
<script src="domready.js"></script>
<script>
domReady(function(){
alert("The DOM is loaded!");
// do something
});
</script>
</head>
<body>
<h1>Testing DOM Loading</h1>
<!-- 这里是大量的HTML -->
</body>
</html>
相关推荐:
seo高手有什么条件,seo难上手吗 ,指南ai写作电力创新
seo需要买什么,seo需要考虑什么 ,ai做表头
AI人工智能文章生成平台,释放创作无限可能
ChatGPT桌面应用安装了,不能用?解决方案全攻略,让你轻松畅享AI助手!,绫波丽ai智能
为什么网站要做seo,网站做seo的目的是什么 ,ai初选
AI提取文章重要内容:让信息抓取更高效、更精准,松鼠ai 教学
ChatGPT故障你从未听过的真相,究竟是什么让它偶尔“失灵”?,ai 图片 矢量
亚马逊的seo是什么阿,亚马逊seo项目 ,中考用ai写作会判0分吗
SEO监控:精准把握网站排名与优化成效的利器,湖南seo排名商家名单
AI免费文章生成器:轻松创作高质量内容的终极工具
SEO获客的秘诀:如何通过搜索引擎优化提升客户获取能力,厦门seo搜索优化排名
seo黑帽是什么,列举几种seo黑帽行为 ,穿老款的ai丢人吗
SEO基础知识解析:如何提升网站排名,助力企业成长,毕节企业建设网站
SEO未来:如何在变革中抢占先机,迎接数字营销的新纪元,台州网站建设分析和总结
AI一键生成文章免费:革新写作方式,提升创作效率
产品seo什么意思,产品seo标题是什么 ,ai模仿张宇
ChatGPT美区要梯子吗?轻松畅享全球智能聊天体验,ai音位
SEO关键词的选择步骤:让你的网站在搜索引擎中脱颖而出,ai书法化
SEO目标:让您的网站轻松登顶搜索引擎,优化购物网站的搜索
seo需要什么人才,seo需要做什么工作 ,探索ai照片
seo进阶买什么书推广,seo的推广技巧 ,菩萨壁纸ai
优化入口:提升网站流量与转化率的秘密武器,琼海关键词排名品牌
SEO学费多少钱?揭秘SEO培训的投资价值与回报!,郴州网站推广多少钱一个
为什么“蜘蛛弛查询”能成为提升网站排名的秘密武器?,惠州网站推广v1戈seo24
GPT-3.5可以免费使用吗?AI未来的无限可能,ai烧猪
SEO合作:让你的网站在搜索引擎中脱颖而出,惠州抖音seo策划公司
seo适合看什么书,自学seo书籍推荐 ,ai少女 刻晴
ChatGPT-01:开创人工智能新纪元,AI如何画模糊的云层
ChatGPT为什么访问不了?全面解析及解决方案,ai首页设计
优化文字,让表达更精准:提升写作效率的关键,个人网站建设外包
从语言助手到智能生活伙伴,未来的智能助手如何改变我们的生活,网站建设分站公司
未来写作新方式原创AI文章的无限可能
SEO全套秘籍:提升网站流量与排名的终极指南,荣昌手机网站建设
ChatGPT在处理文本时可能无法完全理解上下文的复杂性,肌肉ai
seo类文章是什么,seo技术文章 ,ai3.5-ai聊天
OpenAI账号申诉怎么办?全方位解析解决方案,ai写作免费公众号下载
今时CMS:引领数字化转型的智慧之选,河南seo优化网站联系方式
互联网快照:记录数字时代的每个瞬间,全网seo怎么优化内容
ChatGPT恢复正常使用时间,提升你的工作与生活效率,联想电脑AI0510
SEO爱站:提升网站排名,赢得流量的秘密武器,优化网站设计价格多少
ChatGPT360:全方位提升你的工作与生活效率,ai72787
在线AI写文:开启高效创作新时代
seO经理是什么岗位,seo经理招聘 ,ai写作重复被查
360AI写作怎样?助力创作的新风尚,ai到访
文章创作AI:引领智能写作的新时代
seo运营经理是什么,seo和运营的区别 ,皖妍ai宁慕晴o
为什么要seo排名,为什么要做seo推广 ,AI写作开启创意新世界
SEO指:如何通过精准优化提高网站流量和转化率,无锡论坛营销推广要多久
AI一键生成文章,写作新境界
好用的人工智能AI软件推荐,让你的生活更智能!