博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浏览器兼容性小记-DOM篇(二)
阅读量:7126 次
发布时间:2019-06-28

本文共 3857 字,大约阅读时间需要 12 分钟。

1、DOM中的所有节点都继承自Node类型,IE9之前将DOM节点作为COM对象来实现;每个DOM节点都有一个nodeType属性来表明节点类型,总共有12个类型:

Node.ELEMENT_NODENode.ATTRIBUTE_NODENode.TEXT_NODENode.CDATA_SECTION_NODENode.ENTITY_REFERENCE_NODENode.ENTITY_NODENode.PROCESSING_INSTRUCTION_NODENode.COMMENT_NODENode.DOCUMENT_NODENode.DOCUMENT_TYPE_NODENode.DOCUMENT_FRAGMENT_NODENode.NOTATION_NODE
其中,1、2、3、9、10、11最常用,要确定某种元素类型可以使用以下方法:

elementNode.nodeType === Node.ELEMENT_NODE // 非IE,IE9以下无法访问Node类型elementNode.nodeType === 1 // 所有浏览器
2、以下方法返回的都是原生的NodeList对象

elementNode.childNodesdocument.getElementsByName()document.getElementsByClassName()document.getElementsByTagName() //返回HtmlCollection对象,与NodeList类似,多了一个namedItem('name')方法document.getElementsByTagNameNS()
NodeList是一种类数组对象,有length属性,但并不是Array的实例,访问NodeList中的节点对象可使用item方法或[]语法。每次访问NodeList对象实际上都是重新进行一次查询,因此通常可以将NodeList转化为数组对象。

function nl2array(nodeList){       var array = null;       try{         array = Array.prototype.slice.call(nodeList, 0);// FF       }catch(){         array = [];         for (var i = 0, len = nodeList.length; i < len; i++){            array.push(nodeList[i]);                }       }       return array;     }
3、操作DOM节点有以下的方法:

// appendChild 讲解点添加到末尾,若该节点已在DOM结构中,则将其重新放置     var node = elementNode.appendChild(newNode);     node === newNode; // true     var node2 = elementNode.appendChild(otherNode.firstChild);     node2 === elementNode.lastChild; // true     node2 === otherNode.firstChild; // false
1      //insertBefore,将节点插入到某一节点前面2       var node = elementNode.insertBefore(newNode, null);3       node === elementNode.lastChild; // true4       var node2 = elementNode.insertBefore(newNode, elementNode.firstChild);5       node2 === elementNode.firstChild;// true1     // replaceNode 使用新节点替换旧子节点,返回被替换节点2       var node = elementNode.replaceChild(newNode, elementNode.lastChild);1     // removeChild,想要删除某节点必须通过该节点的父级元素2       var node = elementNode.removeChild(elementNode.firstChild);3       elementNode.parentNode.removeChild(elementNode);
//cloneNode,该方法只会复制元素中的html特性,      //IE中有一bug,他会复制元素的事件处理程序,在使用该方法时最好将事件处理程序去掉      var node = elementNode.cloneNode(true);      node.childNodes.length > 0 // true      var node1 = elementNode.cloneNode(false);      node1.childNodes.length === 0 //false
4、document对象是HTMLDocument类型的实例,所有浏览器中都可以访问HTMLDocument类型的构造函数和原型。document中访问子节点有如下快捷方式:
1         document.documentElement // 指向元素2       document.body // 指向body元素3       document.doctype //指向的引用,IE8之前将该元素当做Node.COMMENT_NODE类型,IE9、FF、Chrom将该元素作为document的第一个子节点4       document.head || document.getElementsByTagName('head') //HTML5中新加的属性
5、document.getElementById('id'),IE8及较早版本中不区分id的大小写;IE7及早期版本中有bug:
1     2     
3 // 元素a拥有name与某元素b的id重复,且在a在b之前,则调用该方法会返回a元素4 document.getElementById('element'); // input元素

6、所有HTML元素都是HTMLElement类型的实例,继承自Element类,比如:HTMLBodyElement、HTMLFormElement、HTMLFrameElement等,除IE外的浏览器都可以访问这些类型的构造函数及原型。IE中将comment节点作为element类型的派生类,因此调用document.getElementsByTagName('*')会将comment节点一并返回。

 

7、html元素有Attribute(特性)跟Property(属性)的区分。

操作特性的方法主要有getAttribute()、setAttribute()、removeAttribute(),这三个方法可以操作以HTMLElement类型属性形式定义的特性(id、class、title、lang、dir),和自定义属性。如:<div id="element" myAttr="myself"></div> element.getAttribute("myAttr")。

属性是指该元素作为javascript对象,除以上特性外一切可以通过点语法访问的属性,如innerHTML、nodeType等。

特性可以出现在html元素声明中,属性不可以(出了也没用);特性可以通过css属性选择符语法来查询元素,属性不可以

 

8、element.attributes属性是一个NamedNodeMap对象,与NodeList类似。该属性返回所有在element中声明的特性,IE中会返回所有可能的特性,但在声明的特性中有一个specified属性,该属性为true则为以声明特性。

 

9、IE9之前不会解析文本之间的空白节点,如下:

  • li1
  • li2
  • li3
mylist.childNodes === 3; //IE8 mylist.childNodes === 7; //FF
如果只想访问元素子节点可以使用如下api:

childElementCount       //返回子元素节点个数      firstElementChild       //第一个元素子节点      lastElementChild        //最后一个元素子节点      previousElementSibling  //前一个兄弟元素      nextElementSibling      //后一个兄弟元素      children                //返回所有的元素子节点

转载地址:http://qtoel.baihongyu.com/

你可能感兴趣的文章
tomcat压缩版配置
查看>>
GitHub使用教程
查看>>
vue-cli快速搭建Vue脚手架 (vue-cli 2.x 模板)
查看>>
一些偏僻有用的知识点记录(二)
查看>>
window.open 打开子窗体,关闭全部的子窗体
查看>>
Java第二次上机随笔
查看>>
Standard 1.1.x VM与Standard VM的区别
查看>>
Spring框架中的aop操作之二 通过配置文件实现增强
查看>>
龙威零式_团队项目例会记录_10
查看>>
自定义标签(JSTL)
查看>>
Java中的substring()用法
查看>>
使用Nexus搭建Maven私服
查看>>
sql 查询某个条件多条数据中最新的一条数据或最老的一条数据
查看>>
数学中各种矩阵收集(转至其他博主)
查看>>
学习进度条——第三周
查看>>
记录点复习题目和linux学习
查看>>
一个菜鸟正在用SSH写一个论坛(1)
查看>>
【转】自己动手写PHP MVC框架
查看>>
高精度阶乘
查看>>
HNOI2004宠物收养所
查看>>