标签:
愿你明白,世上所有的相遇都有它的意义,也是所有的相遇让人与人链接起来,最近看了一些关于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去限制
标签:
原文地址:http://www.cnblogs.com/redstarbury/p/5677560.html