ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
[TOC] * * * * * ### 动态`js` ~~~ var script=document.createElement('script'), content='function say() { console.log("I am fine.") }', scriptText=document.createTextNode(content); script.type='text/javascript'; // 这一步可以省略 script.appendChild(scriptText) // 或者设置script的src属性 document.body.appendChild(script) 这种方式加载的代码会在全局作用域中执行, 且脚本加载后将立即执行,和在全局作用域执行 eval() 函数一样 ~~~ ### 动态样式 `css` ~~~ 内联脚本 var link=document.createElement('style'); link.rel='stylesheet'; link.href='url'; document.head.appendChild(link ); 外联脚本 var style=document.createElement('style'), cssContent=document.createTextNode('p{ color: green; }'); style.appendChild(cssContent); document.head.appendChild(style); ~~~ * * * * * ### `js`脚本的加载机制 1. 如果script标签没有defer或者async属性,那么脚本的解析执行顺序就和引入的顺序一致,一个接着一个,不会同时去解析执行多个或者顺序有变化; 2. defer属性,相当于告诉浏览器,立即下载,但是延迟执行,延迟到 `DOMContentLoaded` 前后执行有个不可控因素是,如果有多个延时脚本的话,不能保证执行顺序,所以最好是有一个延时脚本就够了 3. 异步async属性,相当于告诉浏览器,立即加载(异步),不要阻塞DOM渲染,加载完成后就立即执行;这个不能保证执行顺序,可能有个加载完成的早,那就会立即执行。 ~~~ DOM文档加载的步骤为: 1. 解析HTML结构。 2. 加载外部脚本和样式表文件。 3. 解析并执行脚本代码。 4. DOM树构建完成。//DOMContentLoaded 5. 加载图片等外部文件。 6. 页面加载完毕。//load ~~~ * * * * *