文档对象模型DOM之Node类型

【DOM】

        文档对象模型是针对HTML和XML文档的一个API(应用程序编程接口),它描绘了一个层次化的节点树,允许开发人员添加、移除和修改页面的一部分。
【Node类型】

【节点层次】
      DOM可以将任何HTML和XML文档描绘成一个由多层节点构成的结构。节点又分为不同类型,每种类型表示文档中不同的信息及标记,每个节点都拥有各自的特点、数据和方法,另外与其他节点也存在某种关系。
JS中所有节点类型都继承自Node类型
节点类型(nodeType)对应的数值常量                                                            备注
Node.ELEMENT_NODE1nodeName的值是元素的标签名。对于元素节点,nodeName中保存的始终都是元素的标签名,而nodeValue的值始终为null
Node.ATTRIBUTE_NODE2每个节点都有一个childNodes属性,其中保存着一个NodeList对象。NodeList是一种类数组对象,用于保存一组有序的节点,因此可以通过位置来访问这些节点。记住:DOM结构的变化能够自动反映在NodeList对象中。
Node.TEXT_NODE3nodeList可以转换为数组,方法:Array.prototype.slice.call(someNode.childNodes,0);
Node.CDATA_SECTION_NODE4
包含在childNodes列表中的所有节点都具有相同的父节点,通过属性parentNode得到
包含在childNodes列表中的每个节点相互之间都是同胞节点
Node.ENTITY_REFERENCE_NODE5childNodes列表中每个节点的previousSibling和nextSibling属性,可以访问同一列表中的其他节点。
Node.ENTITY_NODE6appendChild(),向childNodes列表的末尾添加节点
Node.PROCESSING_INSTRUCTION_NODE7 
Node.COMMENT_NODE8 
Node.DOCUMENT_NODE9 
Node.DOCUMENT_TYPE_NODE10 
Node.DOCUMENT_FRAGMENT_NODE11 
Node.NOTATION_NODE12 

值得注意的是,在IE中是无法访问到上述节点类型的,只能访问到其数值常量,因为IE并没有公开Node类型的构造函数。为了确保跨浏览器兼容,最好将nodeType属性与数字值进行比较。
【示例】
<body>
   <div id="#app">
       <ul id="#app2">
           <li>哈哈哈</li>
           <li>呵呵呵</li>
           <li>六六六</li>
           <li>
               <ol>
                   <li>123</li>
                   <li>321</li>
                   <li>231</li>
               </ol>
           </li> 
       </ul>
   </div>
    <script type="text/javascript">
        var nodes = document.getElementById('#app').childNodes;
        alert(nodes.length);//3,虽然有length属性,但并不是Array的实例
        alert(nodes[0]);//[object Text]
        alert(nodes[0].nodeName);//#text
        alert(nodes[0].nodeValue);//空值
        alert(nodes[1].nodeName);//UL
        alert(nodes[2].nodeName);//#text
        alert(nodes.item(0));//[object Text]
        
        var nodes2 = document.getElementById('#app2').childNodes;
        alert(nodes2.length);//9
        for (var i = 0; i < nodes2.length; i++) {
            alert(nodes2[i].nodeName);//#text、LI、#text、LI、#text、LI、#text、LI、#text
        }
        alert(nodes2[0].previousSibling);//null
        alert(nodes2[0].nextSibling.nodeName);//LI
        //将nodeList转换为数组
        var arrayOfNodes = Array.prototype.slice.call(nodes2, 0);
        alert(arrayOfNodes.length);//9
        //值得注意的是,上述数组转换方法再IE8以及更早版本是无法运行的,因此我们必须手动枚举所有成员
        function convertToArray(nodes) {
            var array = null;
            try{
                array=Array.prototype.slice.call(nodes,0);//针对非IE浏览器或IE9以上版本
            } catch (ex) {
                array = new Array();
                for (var i = 0; i < nodes.length; i++) {
                    array.push(nodes[i]);
                }
            }
            return array;
        }
    </script>
</body>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值