码迷,mamicode.com
首页 > 其他好文 > 详细

关于dom的总结

时间:2016-07-17 11:28:42      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:

愿你明白,世上所有的相遇都有它的意义,也是所有的相遇让人与人链接起来,最近看了一些关于dom的文章,对此小有感触,稍稍总结一下,为了相遇后不再失去。

说起dom,印入我脑海中首先便是document.getelementbyid/sbytagname,正是这句将html中的结点和js联系起来,并有机会对html做一些处理。

好,那就从document说起,js通过document类型表示文档,它既是htmldocument的一个实例,表示整个html页面,同时也是window对象的一个属性,作为双面角色,那么它就有两种不同的方向了,作为window的全局对象,它可以通过documentelement属性访问子结点,也可以通过childnodes列表去访问,其中通过childnodes访问得到的是又是一个伪数组---nodelist,它实际上是基于dom结构动态查询的结果,如果你实在看它不顺眼,想把它变为数组,那么可以通过array.prototype.slice.call(nodelist,0)(不过在<IE8的版本中会把nodelist实现成一个com对象,所以只有通过枚举去转换),在对表格的操作中,我们常常会用到对于childnodes的操作(增appendchild,删removechild,改replacechild,插insertbefore,复制clonenode,normalize),既然说到表格的操作,我们也会用到creattextnode,对于文本结点,需要知道的是normalize操作,用于合并文本结点,也需要知道splittext操作,用于分割nodevalue的值,这个是在文本中提取数据非常重要的方法,既然说到了文本结点,不妨我们把焦点放到最重要的结点类型--element类型,对于element,我们可以通过get/set...attribute去获取,也可以通过属性的值返回,但是这也不尽相同,比如对于如果用attribute时要利用class而不是classname,也可以用attribute去获得自定义属性(用data-*),对于比较特殊的两个属性,style和函数也有需要注意的

关于这章浏览器兼容性陷阱:

1.IE没有公开node类型的构造函数,所以最好还是与数字相比,somenode.nodetype==1//判定为element;

2.IE8将nodelist实现成一个com对象,故将其转换为数组需要手动枚举

3.IE9之前不会为空白节点创建节点,所以得出来的结点数较少//

  <ul>

     <li></li>

     <li></li>

     <li></li>

 </ul>ie9以下得出的是3,而其他的是7

4.对document.doctype支持性不同,IE9解析全部结点,IE8,safri>3.1,o,chrome解析第一个注释,firefox和safri<3.1都不解析

5.ie7及其以前对documentgetelementbyid中ID不分大小写,而且会将表单元素对name值也进入筛选范围

6.IE为自定义特性创建属性,比如,node.myattribute=“oh”;

7.在attributes中,IE7会返回所有特性,但可以通过specified去限制

关于dom的总结

标签:

原文地址:http://www.cnblogs.com/redstarbury/p/5677560.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!