DOM

一.概念

DOM(Document Object Model)的缩写,即文档对象模型
DOM是针对HTML和XML文档的一个API。
DOM描绘了一个层次化的节点树,即HTML文档中的所有内容都是节点(node)。
DOM树中的所有节点均可通过JS进行访问,允许开发人员添加.移除.修改和查询页面的某一部分

二.DOM

1.节点类型

1.1.文档节点

整个文档是一个'文档节点'

1.2.元素节点

每一个HTML元素是'元素节点'

1.3.文本节点

HTML元素内的文本是'文本节点'(回车也是文本节点)

1.4.属性节点

每个HTML的属性是'属性节点'

1.5.注释节点

注释是'注释节点'

2.nodeType属性

返回一个整数,这个数值代表节点的类型
1.元素节点 返回1
2.属性节点 返回2
3.文本节点 返回3
4.注释节点 返回8
5.文档节点 返回9

3.nodeName属性

返回节点的名称
1.元素节点 返回 标签名称(大写)
2.属性节点 返回 属性名称
3.文本节点 返回 永远都是 #text
4.注释节点 返回 永远都是 #comment
5.文档节点 返回 永远都是 #document

4.tagName属性

返回元素的标签名
在HTML中,tagName属性的返回值始终是大写的

5.nodeValue属性

返回节点的值
1.元素节点 返回 undefined或者null
2.文本节点 返回 文本内容
3.属性节点 返回 属性值
4.注释节点 返回 注释内容
5.文档节点 返回 null
注:对于元素节点,用innerHTML/innerText/value设置或取值

6.节点关系

节点之间的关系,通常用家庭中的辈分关系来描述

  • parentNode:父节点
  • children:所有元素子节点
  • childNodes:所有子节点,ie678与高版本浏览器返回值不一样
  • nextSibling:下一个兄弟节点
  • previousSibling: 上一个兄弟节点
  • firstChild:第一个子节点
    -lastChild:最后一个子节点
   属性1                              属性2                               描述
nextSibling                 nextElementSibling 不兼容IE678           下一个兄弟节点
previousSibling             previousElementSibling 不兼容IE678       上一个兄弟节点
firstChild                  firstElementChild 不兼容IE678            第一个子节点
lastChild                   lastElementChild 不兼容IE678             最后一个子节点

7.节点方法

方法 描述 兼容性
createElement(‘标签名’) 创建元素节点
createTextNode(’’) 创建文本节点
document.getElementById(’’) 根据id获取元素
document.getElementByName(’’) 根据name属性获取元素,name属性不唯一
document.getElementByTagName(’’) 获取指定标签名的所有元素列表
document.getElementByClassName(‘类名’) 获取指定className的元素 IE678不支持
document.querySelector('选择器') 通过选择器方式获取元素(返回一个元素) IE678不支持
document.querySelectorAll('选择器') 通过选择器方式获取元素(返回多个元素) IE678不支持
document.documentElement 获取html元素对象
document.body 获取body元素对象
appendChild(node) 末尾插入一个节点node
insertBefore(newNode,target) target之前插入节点node
removeChild(node) 移除某个子节点
replaceChild(newNode,oldNode) newNode替换oldNode
cloneNode(boolean) 复制一个节点:true:深复制,复制节点及整个子节点树false :浅复制,只复制节点本身
getAttribute(‘name’) 获取节点上的name属性的值
setAttribute(‘name’,‘value’) 设置节点上name属性的值为value
removeAttribute(‘name’) 删除节点上name属性
getAttributeNode(‘type’) 获取节点上的type属性节点

DocumentFragment

documentFragment是一个文档碎片,是一种‘轻量级节点’,是一个虚拟的节点对象
documentFragment的nodeType值为11,nodeName的值为f#document-fragment
通常作为仓库来使用,不存在DOM树上,将多个需要插入的新节点放在文档碎片上,再插入文档中可以优化DOM操作

 var Fragment=document.createDocumentFragment();  //创建一个文档碎片

8.获取元素样式

行间样式和非行间样式

8.1行间样式:

<div class="box2" style="width: 200px;height: 100px;background:blue;"></div>
console.log( box1.style.width );

8.2非行间样式:

css:
.box1{
    width: 100px;
    height: 100px;
    background: red;
}
html:
<div class="box1"></div>
console.log( box2.style.width );

8.3getComputedStyle获取样式(不兼容IE678)
getComputedStyle(对象,参数).样式
第一个参数是元素对象
第二个参数可以是任何数据,通常写为null或false

eg:
    getComputedStyle(box1,null).width;

注:currentStyle:IE678获取样式的方法
如:obj.currentStyle.样式
兼容性处理:

function getStyle(dom,attr){
    if (dom.currentStyle) {//IE
        return dom.currentStyle[attr];
    } else {
        return getComputedStyle(dom,null)[attr];
    }
}

9.offset/client系列属性

属性 描述
offsetLeft 获取对象左侧与定位父级之间的距离(默认是body)
offsetTop 获取对象上侧面与定位父级之间的距离(默认是body)
offsetWidth 获取元素自身的宽度(包含边框)
offsetHeight 获取元素自身的高度(包含边框)
clientLeft,clientTop 获取元素内容到边框的距离,效果和边框宽度相同,很少使用
clientWidth 获取元素自身的宽度(不含边框)
clientHeight 获取元素自身的高度(不含边框)
document.documentElement.clientWidth 浏览器的可视区宽度
document.documentElement.clientHeight 浏览器可视区高度
document.body.clientWidth body的宽度
document.body.clientHeight body的高度
document.documentElement.offsetWidth 整个文档宽度
douument.documentElement.offsetHeight 整个文档高度
document.body.scrollTop 获取当前滚动的高度(有兼容性问题)

获取滚动条高度一般使用如下方式:
var scrollTop = document.body.scrollTop || document.documentElement.scrollTop;

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。