js-浅谈DDOM的操作

 DOM是document Object Model的缩写,简称文档对象模型。他给文档提供了一种结构化的表示方式,可以改变文档的内容和呈现方式。

①DOM的分层结构(节点树):


节点关系:
  根节点:一个HTML文档只有一个根,它就是HTML节点。
  子节点:某一个节点的下级节点。
  父节点:某一个节点的上级节点。
 兄弟节点:两个子节点同属于一个父节点。

节点的分类:
属性节点:指的是HTML标签的属性。
文本节点:指的是HTML标签的内容。
空白节点:在主流浏览器中标签和标签之间的换行会理解为一个空白节点,在IE浏览器中不会。

②访问节点的方法:
1.getElementById(id) 获取网页指定id名字的元素。返回一个对象。
2.getElementsByClassName()   通过class名称获取元素,返回值是数组。
3.getElementsByTagName()   获取网站指定标签名称的元素,返回值是数组。
4.getElementsByName()  通过name值获取元素,返回值是数组,通常用来获取有name的input的值。
注意:1.不是所有标签都有name值;
2.在低版本的浏览器中,getElementsByName和getElementsByClassName有兼容性。

ES5选择器:
document.querySelectorAll();    强大到超乎想象,支持IE8+。返回一个数组,哪怕只有一个元素
document.querySelector();        返回单个元素

③节点属性的基本操作:
写在元素内的所有东西都是元素的属性,如link的href,img的src等。
元素的属性分为内置属性和非内置属性。
内置属性举例:
innerHTML/innerText  //返回值是当前元素的内容
id                    返回值是当前元素的ID
title                 获取title的标签值,这个title是从document中获取的
className      返回值是当前元素的class
href                 返回值是当前的href的值

内置属性是标签固有的,可以直接使用 节点.属性名 来获取属性值,使用 节点.属性名 = "修改后的内容" 来修改属性值。

非内置属性(自定义属性)
获取指定对象的属性名的属性值:节点.getAttribute(name)
给指定对象设置属性名和属性值:节点.setAttribute(name,value)
修改和设置的方法一样。修改的属性名是之前设置过的属性名即可。
移除指定对象的属性:节点.removeAttribute(name)

④节点的公共属性:
父节点.firstChild:返回第一个子节点,包含空白节点(文本节点)
父节点.firstElementChild:返回第一个子节点(不包含空白节点)
父节点.lastChild:返回最后一个子节点(包含空白)
父节点.lastElementChild  返回最后一个子节点(不包含空白)
nextSibling属性返回元素节点之后的兄弟节点(包括文本节点、注释节点即回车、换行、空格、文本等等)
nextElementSibling属性只返回元素节点之后的兄弟元素节点(不包括文本节点、注释节点)(IE7/8不支持)
previousSibling 属性返回元素节点之前的兄弟节点(包括文本节点、注释节点);
previousElementSibling 属性只返回元素节点之前的兄弟元素节点(不包括文本节点、注释节点),只读属性;(IE7/8不支持)
childNodes:返回子节点列表(包括,文本节点,注释节点),返回是一个组数
children: 只返回元素节点
parentNode 返回父节点
nodeName:返回节点名字
nodeValue:返回节点值 (针对文本节点)

⑤节点的操作:
1.节点创建:
元素节点:document.createElement(tag标签名称);
文本节点:document.createTextNode(文本内容);
属性设置:node.setAttribute(名称,值);

2.节点追加:
父节点.appendChild(子节点);  向父节点添加最后一个子节点
父节点.insertBefore(newnode,oldnode);  将newnode放到oldnode的前边

3.节点删除:
父节点.removeChild(子节点);    删除父节点中的某个子节点
父节点.remove();       删除整个父节点

多说一点:用js动态给HTML添加CSS样式属性(行内样式)
对象名.style.CSS属性转换为js后的名称=属性值;

CSS属性转换为js后的名称规则
1.一个单词直接写,如color等
2.多个单词,第二个单词去掉"-"并且首字母大写。如font-size => fontSize

脚下留心:
1.通过js操作css样式时,一定要加px。
通过js添加的样式都会以很难过内样式的方式追加。

非行内样式的获取:在ie浏览器里,用到obj的currentStyle方法,来获取,obj.currentStyle["名字"];在非ie浏览器里,需要用到window自带的方法,getComputedStyle(obj).名字;

兼容写法:
function getStyle(obj,attr){
        if(obj.currentStyle){ 
              return obj.currentStyle[attr];
        }else{
              return getComputedStyle(obj,false)[attr];
        };
    };

posted @ 2019-09-15 16:34  Glu__TtoNy  阅读(497)  评论(0编辑  收藏  举报