DOM(Document Object Model) —— Document对象

例1:类似于getElementByID()有一个getElementsByName(),因为通常id是唯一的,而name可以重复比如复选框

注意是ElementsByName比ElementById多个s

<html>
  <head>
    <script>
        function show(){
            var cb = document.getElementsByName("myc");
            for(var i=0; i<cb.length; i++){
                if(cb[i].checked)
                    alert(cb[i].value);
            }
        }
    </script>
  </head>
  <body>
    <input type="checkbox" name="myc" value="足球">足球
    <input type="checkbox" name="myc" value="篮球">篮球
    <input type="checkbox" name="myc" value="游戏">游戏<br>
    <input type="button" onclick="show()" value="显示选项">
  </body>
</html>

例2:获取所有同类元素getElementsByTagName(),此例点击遍历会弹窗5下把所有input元素的value都输出一遍

<html>
  <head>
    <script>
        function show(){
            var cb = document.getElementsByName("myc");
            for(var i=0; i<cb.length; i++){
                if(cb[i].checked)
                    alert(cb[i].value);
            }
        }
        function travel(){
            var tn = document.getElementsByTagName("input");
            for(var j=0; j<tn.length; j++){
                alert(tn[j].value);
            }
        }
    </script>
  </head>
  <body>
    <input type="checkbox" name="myc" value="足球">足球
    <input type="checkbox" name="myc" value="篮球">篮球
    <input type="checkbox" name="myc" value="游戏">游戏<br>
    <input type="button" onclick="show()" value="显示选项">
    <input type="button" onclick="travel()" value="遍历">
  </body>
</html>

 

例子2:动态创建新元素,document.createElement("元素名") + 对象.appendChild(对象)

<html>
  <head>
    <script>
        function addEt(){
            var Et=document.createElement("a");  //创建一个新超链接实例
            Et.href = "http://mudccjh.com";  
            Et.target = "_blank";
            var t = document.createTextNode("重出江湖");  //创建一个新文本
            Et.appendChild(t);  //把文本t加到a元素中间
            var element=document.getElementsByName("d1");
            element[0].appendChild(Et);  //把超链接加到名为d1的div中
        }
    </script>
  </head>
  <body>
    <input type="button" value="添加超链接" onclick="addEt()">
    <div name="d1">
    </div>
  </body>
</html>

 

节点概念,参照文档树形结构

节点父、子和同胞

节点树中的节点彼此拥有层级关系。

父(parent)、子(child)和同胞(sibling)等术语用于描述这些关系。父节点拥有子节点。同级的子节点被称为同胞(兄弟或姐妹)。

  • 在节点树中,顶端节点被称为根(root)
  • 每个节点都有父节点、除了根(它没有父节点)
  • 一个节点可拥有任意数量的子
  • 同胞是拥有相同父节点的节点 

 

节点的属性与方法

还有个父节点属性,parentNode

注:在获取节点对象时,各节点之间的注释同样也算节点,而且如果首尾标签经过换行(不是直接<div></div>形式)

  即:<div>

    </div>

  首尾标签之间的回车也算是一个节点。

例3-1:动态删除元素,对象.removeChild(对象),这里把创建文本写在了addEt()内部,在创建n个超链接然后删除,下次再创建会出现n+1个超链接

<html>
  <head>
    <script>
        var Et = document.createElement("a");  //创建一个新超链接实例
        Et.href = "http://mudccjh.com";  
        Et.target = "_blank";
        Et.id = "a1";
        var element=document.getElementsByName("d1");
        function addEt(){
            var t = document.createTextNode("重出江湖");  //创建一个新文本
            Et.appendChild(t);  //把文本t加到a元素中间
            element[0].appendChild(Et);  //把超链接加到名为d1的div中
        }
        function delEt(){
            element[0].removeChild(document.getElementById("a1"));
        }
    </script>
  </head>
  <body>
    <input type="button" value="添加超链接" onclick="addEt()">
    <input type="button" value="删除超链接" onclick="delEt()">
    <div name="d1" style="width: 500px; height: 400px; background-color: pink">
    </div>
  </body>
</html>

例3-2:把创建文本写到addEt()函数外,那么只能创建一个超链接对象,多次点击添加也只有一个

<html>
  <head>
    <script>
        var Et = document.createElement("a");  //创建一个新超链接实例
        Et.href = "http://mudccjh.com";  
        Et.target = "_blank";
        Et.id = "a1";
        var t = document.createTextNode("重出江湖");  //创建一个新文本
        var element=document.getElementsByName("d1");
        function addEt(){
            Et.appendChild(t);  //把文本t加到a元素中间
            element[0].appendChild(Et);  //把超链接加到名为d1的div中
        }
        function delEt(){
            element[0].removeChild(document.getElementById("a1"));
        }
    </script>
  </head>
  <body>
    <input type="button" value="添加超链接" onclick="addEt()">
    <input type="button" value="删除超链接" onclick="delEt()">
    <div name="d1" style="width: 500px; height: 400px; background-color: pink">
    </div>
  </body>
</html>

例子3-3:以上都是通过对象的父节点删除对象,如果事先不知道要删除对象的父节点,可以先获取父节点再进行删除

<html>
  <head>
    <script>
        var Et = document.createElement("a");  //创建一个新超链接实例
        Et.href = "http://mudccjh.com";  
        Et.target = "_blank";
        Et.id = "a1";
        var t = document.createTextNode("重出江湖");  //创建一个新文本
        var element=document.getElementsByName("d1");
        function addEt(){
            Et.appendChild(t);  //把文本t加到a元素中间
            element[0].appendChild(Et);  //把超链接加到名为d1的div中
        }
        function delEt(){
            //这里就只使用了超链接的id就完成了删除工作
            //直接用Et.parentNode也可以
            document.getElementById("a1").parentNode.removeChild(document.getElementById("a1"));
        }
    </script>
  </head>
  <body>
    <input type="button" value="添加超链接" onclick="addEt()">
    <input type="button" value="删除超链接" onclick="delEt()">
    <div name="d1" style="width: 500px; height: 400px; background-color: pink">
    </div>
  </body>
</html>

注:要使用body对象(document.body),必须要等body创建之后才能,不然会报null

例4:两句同样获取body对象的代码,在不同位置输出不同

输出为:null

    [object HTMLBodyElement]

    Hello World!

<html>
  <head>
    <script>
        document.writeln(document.body + "<br>");
    </script>
  </head>
  <body>
    <script>
        document.writeln(document.body + "<br>");
    </script>
    Hello World!
  </body>
</html>

例5:全局改变样式(Chrome效果出不来,IE可用)

<html>
  <head>
    <script>
        document.fgColor = "white";
        document.bgColor = "black";
    </script>
  </head>
  <body>
    Hello World!
  </body>
</html>

 

innerText会把某元素首尾标签之间的内容当作文本处理,innerHTML则当作元素处理

例6:添加文本与添加超链接元素,第一个按钮把第一个span内的内容替换成文本,第二个按钮把第二个span内的内容替换成超链接元素

<html>
  <head>
    <script>
        function addText(){
            document.getElementById("s1").innerText = "<a href = 'http://mudccjh.com' target = '_blank'>重出江湖</a>";
        }
        function addHtml(){
            document.getElementById("s2").innerHTML = "<a href = 'http://mudccjh.com' target = '_blank'>重出江湖</a>";
        }
    </script>
  </head>
  <body>
    <input type="button" value="添加文本" onclick="addText()">
    <input type="button" value="添加元素" onclick="addHtml()"><br>
    <span id = "s1">
        Hello World!
    </span><br>
    <span id = "s2">
        Hello Hadoop!
    </span>   
  </body>
</html>

例7:浮动小广告,主要使用onscroll属性

<html>
  <head>
    <script>
        function is_onscroll(){
            document.getElementById("a1").style.top = document.body.scrollTop + 130;
            document.getElementById("a1").style.left = document.body.scrollLeft;
            document.getElementById("a2").style.top = document.body.scrollTop + 150;
            document.getElementById("a2").style.left = document.body.scrollLeft;
        }
        
    </script>
  </head>
  <body onscroll="return is_onscroll()">
    <textarea rows="500" cols="500">    
        top
    
        bottom
    </textarea>
    <span id="a1" style="top: 30px; left: 0px; position: absolute; word-break: keep-all">我是小广告<br></span>
    <a id = "a2" href="http://mudccjh.com" target="_blank" style="width: 100px; top: 50px; left: 0px; position: absolute; word-break: keep-all">
        <img src = "Work.jpg" style="width: 100px">
    </a>
  </body>
</html>