DOM

总结:

0.1 创建

1. document.write(几乎不用)
2. innerHTML
3. createElement
注:
1. document.write 是直接将内容写入页面的内容流,但是文档流执行完毕,则它会导致页面全部重绘
2. innerHTML 和createElement()不会导致页面全部重绘
3. innerHTML 创建多个元素效率更高(不要拼接字符串,采取数组形式拼接),结构稍微复杂
4. createElement() 创建多个元素效率稍低一点点,但是结构更清晰

0.2 增

1.appendChild
2.insertBefore

0.3 删

1.removeChild

0.4 改

1. 修改元素属性: src、href、title等
2. 修改普通元素内容: innerHTML 、innerText
3. 修改表单元素: value、type、disabled等
4. 修改元素样式: style、className

0.5 查

1. DOM提供的API 方法: getElementById、getElementsByTagName 古老用法 不太推荐
2. H5提供的新方法: querySelector、querySelectorAll 提倡
3. 利用节点操作获取元素: 父(parentNode)、子(children)、兄(previousElementSibling、
nextElementSibling) 提倡

0.6 属性操作

1.setAttribute:设置DOM属性
2.getAttribute:得到DOM属性
3.removeAttribute移除属性

0.7 事件操作

image.png

1.获取元素

1.1根据 ID 获取

document.getElementById('id');

1.2 根据标签名获取

document.getElementsByTagName('标签名');
还可以获取指定标签内的子元素
element.getElementsByTagName('标签名');

1.3通过 HTML5 新增的方法获取

1. document.getElementsByClassName(‘类名’);// 根据类名返回元素对象集合
2. document.querySelector('选择器'); // 根据指定选择器返回第一个元素对象
3. document.querySelectorAll('选择器'); // 根据指定选择器返回
querySelector 和 querySelectorAll里面的类和id选择器需要加符号,比如:document.querySelector('#nav');document.querySelector('.nav');
不加符号的默认为标签选择器

1.4 获取特殊元素(body,html)

1. doucumnet.body // 返回body元素对象
1. document.documentElement // 返回html元素对象

2.事件

2.1常见事件

image.png

3.操作元素

3.1改变元素内容

element.innerText//从起始位置到终止位置的内容, 但它去除 html 标签, 同时空格和换行也会去掉
element.innerHTML//起始位置到终止位置的全部内容,包括 html 标签,同时保留空格和换行

3.2常用元素的属性操作

1. innerText、innerHTML 改变元素内容
2. src、href
3. id、alt、title
直接使用element.操作,例如:element.id;  element.src

3.3 表单元素的属性操作

type、value、checked、selected、disabled
直接使用element.操作,例如:element.value;  element.disabled

3.4样式属性操作

我们可以通过 JS 修改元素的大小、颜色、位置等样式。
1. element.style 通过修改标签的行内样式操作
2. element.className 通过修改标签的类名样式操作
注意:
1.JS 修改 style 样式操作,产生的是行内样式,CSS 权重比较高
2.如果样式修改较多,可以采取操作类名方式更改元素样式。
3.通过className修改样式,需在style里提前设置好对应className的样式

3.5属性操作

3.5.1获取属性值
element.属性;  获取内置属性值(元素本身自带的属性)
element.getAttribute(‘属性’); 主要获得自定义的属性 (标准) 我们程序员自定义的属性
3.5.2 设置属性值
element.属性;  设置内置属性值 
element.setAttribute(‘属性’); 主要设置自定义的属性 (标准)使用:element.setAttribute(‘class’,'nav1')
3.5.3 移除属性
element.removeAttribute('属性');

3.6 H5自定义属性

3.6.1 设置H5自定义属性
H5规定自定义属性data-开头做为属性名并且赋值。
比如 <div data-index=“1”></div>
或者使用 JS 设置
element.setAttribute(‘data-index’, 2)
3.6.2 获取H5自定义属性
1. 兼容性获取 element.getAttribute(‘data-index’);
2. H5新增 element.dataset.index 或者 element.dataset[‘index’] ie 11才开始支持

4.节点操作

4.1获取节点

4.1.1父节点和子节点
父节点:
node.parentNode 返回最近的一个父节点,没有则返回null

子节点:
开发中使用一般使用以下方法返回子节点
第一个子元素节点,可以使用 parentNode.chilren[0]
最后一个子元素节点,可以使用 parentNode.chilren[parentNode.chilren.length - 1]


1. parentNode.childNodes(标准)(但一般不使用);返回包含指定节点的子节点的集合,该集合为即时更新的集合。
注:返回值里面包含了所有的子节点,包括元素节点,文本节点等。
2. parentNode.children(非标准)(经常使用);返回所有的子元素节点,并且只返回子元素节点,且无浏览器兼容问题。


firstChild 返回第一个子节点,找不到则返回null。同样,也是包含所有的节点。
3. parentNode.firstChild(一般不使用)
lastChild 返回最后一个子节点,找不到则返回null。同样,也是包含所有的节点。
4. parentNode.lastChild(一般不使用)

firstElementChild 返回第一个子元素节点,找不到则返回null。
5. parentNode.firstElementChild
lastElementChild 返回最后一个子元素节点,找不到则返回null。
6. parentNode.lastElementChild
注意:这两个方法有兼容性问题,IE9 以上才支持。
4.1.2 兄弟节点
1. node.nextSibling  返回当前元素的下一个兄弟节点,找不到则返回null。同样,也是包含所有的节点。
2. node.previousSibling 返回当前元素上一个兄弟节点,找不到则返回null。同样,也是包含所有的节点。

以下这两个方法有兼容性问题, IE9 以上才支持:
3. node.nextElementSibling 返回当前元素下一个兄弟元素节点,找不到则返回null。
4. node.previousElementSibling 返回当前元素上一个兄弟节点,找不到则返回null。

解决兼容问题方法:
function getNextElementSibling(element) {
var el = element;
while (el = el.nextSibling) {
if (el.nodeType === 1) {
return el;
} }
return null;
}

4.2 创建节点

document.createElement('tagName')

4.3 添加节点

1. node.appendChild(child)  将一个节点添加到指定父节点的子节点列表末尾。类似于 CSS 里面的
after 伪元素。
2. node.insertBefore(child, 指定元素) 将一个节点添加到父节点的指定子节点前面。类似于 CSS 里面的 before 
伪元素。

4.4 删除节点

node.removeChild(child) 方法从 DOM 中删除一个子节点,返回删除的节点。

4.5 复制节点(克隆节点)

node.cloneNode() 方法返回调用该方法的节点的一个副本。 也称为克隆节点/拷贝节点
注意:
1. 如果括号参数为空或者为 false ,则是浅拷贝,即只克隆复制节点本身,不克隆里面的子节点。
2. 如果括号参数为 true ,则是深度拷贝,会复制节点本身以及里面所有的子节点。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,302评论 5 470
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,232评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,337评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,977评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,920评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,194评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,638评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,319评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,455评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,379评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,426评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,106评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,696评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,786评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,996评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,467评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,043评论 2 341

推荐阅读更多精彩内容