JS中基础:原生DOM的操作

226 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第24天,点击查看活动详情

获取元素

一、通过ID获取元素

var id = document.getElementById("app"); //只获取一个元素

二、通过标签名获取元素

var tag = document.getElementsByTagName("tag-box"); 
//获取返回一个类数组,每个元素表示一个标签

三、通过class类名获取元素

通过类名获取,IE8及IE8以下不支持。

var c = document.getElementsByClassName("class-name");
// 获取的也是类数组,每个元素表示一个标签

四、查看节点树

获取到节点后,可以通过当前节点获取其他与之有关系的节点,下面代码中node表示选择到的一个节点。

  • 1、查看父节点, l标签的父节点为 document
node.parentNode
  • 2、查看子节点们
node.chileNode

选到node下面的所有元素节点,包含了空白文本节点、注释节点等。

<div>
    <--! 注释 -->
    <span></span>
</div> 

var div = document.getElementsByTagName("div")[0]; 
//div.chileNode 包含 <--!注释--> 和空白节点
  • 3、查看第一个子节点
node.firstChild //第一个节点为文本节点
  • 4、查看最后一个子节点
node.lastChild //最后一个也为文本节点
  • 5、下一个兄弟节点
node.nextSibling 
//示例 
<div></div> 
<span></span>

document.getElementsByTagName("div")[0].nextSibling //选中span标签

五、基于元素节点的节点树

  • 1、得到父节点(IE9以下不兼容)
node.parentElement

<html></html>是最高父节点

  • 2、元素子节点
node.children
  • 3、第一个元素子节点(IE9以下不兼容)
node.firstElementChild

4、最后一个元素子节点(IE9以下不兼容)

node.lastElementChild

5、上下兄弟元素节点(IE9以下不兼容)

node.nextElementSibling //下一个兄弟元素节点 
node.previousElementSibling //上一个兄弟元素节点

6、得到子节点个数

node.childElementCount //等价于 node.children.length

六、节点的四个属性

1、nodeName

每个节点,包括文本节点都有nodeName属性

node.nodeName //标签的nodeName为大写的标签名

2、nodeValue 文本节点和注释节点才有

node.nodeValue; 
node.nodeValue = "a"; //可读可写

3、nodeType 查看节点类型

node.nodeType //返回一个数值

数值代表的意思分别如下:

1: 元素节点 
2: 属性节点 
3: 文本节点 
8: 注释节点 
9: document

4、函数hasChildNodes()

判断node节点下有没有子节点(包括所有文本),只有完全空白才会为false

<div></div> //false 
<div> </div> //true

二、创建节点

1、元素节点

var d = document.createElement('div');//创建节点,但并没有插入到文档中

2、创建文本节点

var textNode = document.createTextNode("文本");

3、创建注释节点

var com = document.createCommemt("注释");

4、插入节点到文档中

document.body.appendChild(节点名); //在body最尾添加节点 

document.body.insertBefore(a,b); //在body末尾,先插入a标签,再插入b标签

三、删除节点

1、删除子节点

document.body.removeChild("子节点"); // 该函数返回删除的节点

2、删除自身

document.getElementById("id").remove(); //删除自身

四、更换节点

document.body.replaceChild(newNode,oldNode); // 用newNode替换oldNode

五、querySelector操作节点

querySelector是H5中新增的操作节点的方法,通过 querySelector ,传入的参数是 CSS选择器,CSS样式怎么选写,参数就怎么填。

IE7以及以下版本不能兼容。

获取Dom元素

querySelector只能获取单个元素,返回满足条件的第一个标签
//选择标签、类名、ID示例 
document.querySelector("p") 
document.querySelector(".red") 
document.querySelector("#nav") 

通过querySelectorAll可以获取所有满足条件的元素。返回一个数组

document.querySelectorAll(".red")[0] //获取节点数组中第一个元素 

操作class

  • 1、添加类

    通过选择元素后使用 .classList.add("类名") 为选择的元素添加class,这种方法每次只能添加一个class,如果想添加多个class,需要写多个

 // 添加class
document.querySelector("li").classList.add("red")

//添加多个class
document.querySelector("li").classList.add("red") document.querySelector("li").classList.add("big")
  • 2、移除样式

    通过选择元素后使用 .classList.remove("类名") 为选择的元素移除指定class

document.querySelector("li").classList.remove("red")  //同理,一次也只能移除一个类
  • 3、切换元素样式

    通过选择元素后使用 .classList.toggle("类名") 为选择的元素切换指定class

document.querySelector("li").classList.toggle("red")  // 有该样式时移除该样式,没有该样式时添加该样式
  • 4、判断元素是否含有某类名
document.querySelector("li").classList.contains("red")

自定义属性

命名规则

以 data- 开头定义属性,data- 后面至少包含一个字符 使用 - 连接单词,不要出现大写字母和特殊符号 不要使用纯数字 实例: data-my-name data-sex

自定义属性取值 获取节点之后,通过dataset获取自定义属性的值,数组里面的值对应 data- 后面的名字,但是要把短线命名法改为驼峰命名法

document.querySelector('p').dataset["myName"] 

document.querySelector('p').dataset["sex"]