认识DOM、class的封装、获取属性、获取节点

认识DOM

文档对象模型(document object model),由W3C提出的标准,是一个使用脚本动态的访问和更新文档的内容、结构以及样式;

DOM提供了响应的API(接口) ,可以对文档进行增删改查,以实现js对网页元素JS对网页元素的静态(进行)控制,实现动态网页的功能

HTML节点树

DOM的原理是将文档装入内容,并以节点的形式解析为一颗节点树

HTML 文档就是一种树状的结构化文档

节点类型

元素节点:指标签 如:p div h1~h6 a b

属性节点:指标签上的属性 如: class id

文本节点:指标签之间的文本内容 如:

文本节点

获取节点的辅助方法

childNodes:返回该节点下所有子节点列表(包含空白符)集合【数组结构】

语法:父节点.childNodes

.hasChildNodes(); – 判断是否有子节点,布尔类型

语法:父元素.hasChildNodes();

firstChild – 返回第一个子节点

语法:父元素.firstChild

lastChild – 返回最后一个子节点

语法:父元素.lastChild

.previousSibling --返回上一个兄弟节点

语法:父元素.previousSibling

.nextSibling --返回下一个兄弟节点

语法:父元素.nextSibling

着重说一下下面两个

parentNode – 更加靠谱一些,因为父节点只有一个,就像你不可能有两个亲生父亲一样

语法:子节点.parentNode --返回父节点

children – 返回所以子节点(靠谱,不包含空白符)不会像上面childNodes一样包含空白符

语法:父元素.children

节点属性

节点名字:nodeName

元素节点的nodeName与标签名字一样

属性节点的nodeName与属性名一样

文本节点的nodeName固定值为 #text

节点值:nodeValue

元素节点的nodeValue为Undefined或者null

属性节点的nodeValue为属性值

文本节点的nodeValue为文本内容

节点类型:nodeType

元素节点的nodeType为1

属性节点的nodeType为2

文本节点的nodeType为3

获取DOM节点的方法

document.getElementById(nameId) – 通过ID名称获取【获取一个标签】

作用:通过id名称查找元素,返回的是元素DOM,就算页面上有多个相同的id名,也只会返回第一个元素,不会返回多个【ID原则上命名不能重,只能有一个】

例: document.getElementById(‘h1Name’)

let h1 = document.getElementById('h1Name')
console.log(h1);

结果:

1.png

document.getElementsByClassName(‘className’) – 通过class名称获取【获取一个标签集合,数组结构】

作用:通过class名称查找元素节点,返回的是一个数组形式的元素DOM,从上到下查找名为同一个class名称的元素,组成一个数组返回【class名称是可以重复的,毕竟很多地方用到的样式是能一样的】

例: document.getElementsByClassName(‘hName’)

let hArr = document.getElementsByClassName('hName');
console.log(hArr);

结果:

2.png

document.getElementsByTagName(tagname) – 通过标签名获取【获取一个标签的集合,数组结构】

作用:通过标签名称获取标签节点,返回一个数组形式的DOM,比如查找<a>标签的,会把整个文档中<a>标签以数组的形式返回

例:document.getElementsByTagName(‘a’)

let tagArr = document.getElementsByTagName('a');
console.log(tagArr)

结果:

3.png

document .getElementsByName(name) – 通过name获取【获取一个集合】

作用:通过name属性去获取标签集合,返回一个数组形式的DOM,比如查找标签,全都命名为bName,就会把所有name为bName的标签获取出来

例:document.getElementsByName(‘bName’)

let nameArr = document.getElementsByName('bName');
console.log(nameArr);

结果:

4.png

其他方法
1、获取HTML标签(所有浏览器都支持) – document.documentElement
2、获取body标签 – document.body
3、通过form的name获取表单
console.log(document.loginForm.username);
语法:document.表单名字
document.表单名字.表单元素名
强大的 query【无法获取动态添加的 dom 节点】

1、document.querySelector(css选择器); --返回找到的第一个元素

2、document.querySelector(’#nav’);

3、document.querySelector(‘li’);

4、document.querySelectorAll(css选择器) --返回找到的所有元素

获取属性

1 元素.attributes – 获取元素属性集合

console.log(attributes);

console.log(attributes[0]);

2 元素.属性名 – 【因为class是关键字,所以要写上className;用于获取元素】

console.log(baidu.className);

3 元素.getAttribute(属性名) — 【用于获取某一个属性】

console.log(baidu.getAttribute(‘href’));

[如果是class就不需要再用className了,因为’'封装了不会起冲突]

console.log(baidu.getAttribute(‘class’));

设置属性:

1 元素.属性名 = ‘属性值’;

baidu.style.color = ‘red’;

2 元素.setAttribute(属性名,属性值);

baidu.setAttribute(‘title’,‘您点击之后不会发生改变’);

移除属性

元素.removeAttribute(属性名);

判断是否有某一个属性

元素.hasAttribute(属性名) --返回值是一个布尔值

HTML5 自定义属性操作

1 element.dataset.自定义属性名(如:data-index)

1 element.getAttribute(‘data-index’);

JS动态创建标签

1 document.createElement(您需要创建的标签名字);

document.createTextNode(‘动态创建文本内容’);

2 li.appendChild(text); //将文本放入标签

3 demo.appendChild(li); //将子标签添加进父节点中

【父节点.appendChild(子节点);】 --将子节点添加到父节点的最后

删除子节点

1 父节点.removeChild(子节点); --代表移除子节点

操作CSS样式

1 元素.style.css属性名 = css属性值;【大多数都要加’'因为是值】

demo.style.height = '50px';
demo.style.border = '2px solid red';

注意:【如果css单词是通过链接的单词,则需要写成驼峰式命名】

如:demo.style.borderBottom = ‘2px solid red’;【因为float是js中的保留字,所以要写为cssFloat】

如: demo.style.cssFloat = ‘right’;

cssText【可以帮助我么批量的设置CSS样式】
demo.style.cssText += 'width: 400px;height: 50px;';
添加 classname (推荐使用)

提前在css中写好class,接下来动态添加class,比如:

demo.className = 'demo box';
demo.className = 'demo box';

节点的创建、插入、替换和克隆

1 创建标签节点

document.createElement(‘标签名’);

2 创建文本节点

document.createTextNode(“文本内容”)

3 节点的增加

父元素.appendChild(子节点); --将子节点添加到父元素的最后

4 在某元素之前插入新元素

父元素.insertBefore(新节点,旧节点);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值