1.DOM编程

1.1动态脚本

  1. <script src="foo.js"></script>

如果想要向网页中动态添加上述语句,可以这样写:

  1. let script = document.createElement("script");
  2. script.src = "foo.js";
  3. document.body.appendChild(script);
  4. //封装成函数
  5. function loadScript(url) {
  6. let script = document.createElement("script");
  7. script.src = url;
  8. document.body.appendChild(script);
  9. }

如果想要动态插入JavaScript代码,例子如下:

  1. //要插入的代码
  2. <script>
  3. function sayHi() {
  4. alert("hi");
  5. }
  6. </script>
  7. //dom实现
  8. let script = document.createElement("script");
  9. script.appendChild(document.createTextNode("function sayHi(){alert('hi');}"));
  10. document.body.appendChild(script);

除此之外,script还包含了一个text属性。
因为IE不兼容上面的代码,所以可以这样写:

  1. function loadScriptString(code){
  2. var script = document.createElement("script");
  3. script.type = "text/javascript";
  4. try {
  5. script.appendChild(document.createTextNode(code));
  6. } catch (ex){
  7. script.text = code;
  8. }
  9. document.body.appendChild(script);
  10. }

1.2动态样式

创建:

  1. let link = document.createElement("link");
  2. link.rel = "stylesheet";
  3. link.type = "text/css";
  4. link.href = "styles.css";
  5. let head = document.getElementsByTagName("head")[0];
  6. head.appendChild(link);

也可以添加代码:

  1. let style = document.createElement("style");
  2. style.type = "text/css";
  3. style.appendChild(document.createTextNode("body{background-color:red}"));
  4. let head = document.getElementsByTagName("head")[0];
  5. head.appendChild(style);

在部分浏览器可以不执行,可以沿用script的方法

1.3 使用 NodeList

因为NodeList对象是“实时的”,所以要注意死循环,例子:

  1. let divs = document.getElementsByTagName("div");
  2. for (let i = 0; i < divs.length; ++i){
  3. let div = document.createElement("div");
  4. document.body.appendChild(div);
  5. }

可以改动一下定义一个len

  1. let divs = document.getElementsByTagName("div");
  2. for (let i = 0, len = divs.length; i < len; ++i) {
  3. let div = document.createElement("div");
  4. document.body.appendChild(div);
  5. }