在有些情况下,我们需要给已经在浏览器中加载的页面随时加载Javas代码,就可以利用createElement动态新建<script>元素。
var src = document.createElement("script");
src.setAttribute("src","script1.js");
document.head.appendChild(src);
注意,如果使用此种方式动态加载JavaScript源文件,在文件加载完成之前,页面不能使用其中包含的代码,使用前最好先检测。
动态创建菜单:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script>
window.onload = makeMenu;
function makeMenu() {
var h2All = document.getElementsByTagName("h2");
var menu = document.createElement("div");
var menuUL = document.createElement("ul");
menu.appendChild(menuUL);
for (let i = 0; i < h2All.length; i++)
{
var menuLI = document.createElement("li");
menuUL.appendChild(menuLI);
var liA = document.createElement("a");
liA = menuLI.appendChild(liA);
liA.setAttribute("href","#item"+i);
var itemText = h2All[i].childNodes[0].nodeValue;
var menuText = document.createTextNode(itemText);
liA.appendChild(menuText);
var anc = document.createElement("a");
document.body.insertBefore(anc,h2All[i]);
}
document.body.insertBefore(menu,document.body.firstChild);
}
</script>
</head>
<body>
<h1>时政新闻</h1>
<h2>新闻标题1</h2>
<p>新闻内容1</p>
<h2>新闻标题2</h2>
<p>新闻内容2</p>
<h2>新闻标题3</h2>
<p>新闻内容3</p>
<h2>新闻标题4</h2>
<p>新闻内容4</p>
</body>
</html>
先获取页面中全部的h2元素,然后创建一个div,名字是menu;
在创建一个无序列表,将无序列表追加至menu中;
循环h2集合,先建立li元素,将li元素追加至无序列表中;
再创建链接a,将链接追加至li元素中,并设置属性href;
再创建文本节点,把文本节点追加至li元素中;
再建立一个空锚点链接,把他们依次插在h2元素之前,作为锚点;
最后将menu插入在body第一个元素之前。