JavaScript中DOM操作元素及节点操作

Posted 遥岑.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript中DOM操作元素及节点操作相关的知识,希望对你有一定的参考价值。

操作元素

javascript中的DOM操作可以改变网页内容、结构和样式,我们可以利用DOM操作元素来改变元素里面的内容、属性等。
操作元素

操作元素内容

方法作用
innerhtml设置或返回开始标签和结束标签之间的内容,包括html标签、空格、换行等格式字符
innerText置或返回元素的文本内容,在返回的时候会去除HTML标签和多余的空格、换行,在设置的时候会进行特殊字符转义
textContent设置或者返回指定节点的文本内容,同时保留空格和换行
  • innerHTML在使用时会保持编写的格式以及标签样式
  • innerText去掉所有格式以及标签的纯文本内容
  • textContent属性在去掉标签后会保留文本格式

操作元素属性

在DOM中,HTML属性操作是指使用JavaScript来操作一个元素的HTML属性
一个元素包含很多的属性,例如,对于一个img图片元素来说,可以操作它的src、title属性等。

操作元素样式

操作style属性(行内样式操作)

元素对象.style.样式属性名
  • 样式属性名对应CSS样式名,但需要去掉CSS里的半字线“ - ”,并将半字线后英文的首字母大写

常见style属性操作的样式名:
样式名

操作className属性(类名样式操作)

在开发中,如果样式修改较多,可以采取修改类名的方式更改元素样式。

 元素对象.className
  • Js里面的样式采取驼峰命名法
  • js修改style样式操作,产生的是行内样式,css权重较高

自定义属性操作

获取属性值

element.属性
  • 获取内置属性值(元素本身自带的属性)
element.getAttribute('属性')
  • 主要获取自定义的属性

操作属性值

element.属性 =
  • 设置内置属性值
setAttribute('属性','值')
  • 主要设置自定义的属性

移除属性值

removeAttribute('属性')

H5自定义属性

自定义属性目的:是为了保存并使用数据,有些数据可以保存到页面中而不用保存到数据库中。
自定义属性通过getAttribute(‘属性’)获取。
有些自定义属性很容易引起歧义,不容易判断是元素的内置属性还是自定义属性,H5新增了自定义属性。

设置H5自定义属性

HTML5中自定义属性的实现:通过 ‘data-属性名’ 方式自定义属性 。

<div data-index='2'></div>   H5的写法 'data-'是自定义属性的前缀 便于区分自定义属性和内置属性
	  
<div id="dt" index='2'></div>   H5以前版本的写法

js实现

setAttribute('属性','值')
元素对象名.dataset.属性名 =
  • 后者只能设置“ data- ”开头的自定义属性

获取自定义属性

getAttribute('属性')
对象名.dataset.属性
		 
对象名.dataset['属性']
  • dataset是一个集合,里面存放了所有以“ data- ”开头的自定义属性

后者有兼容性问题

排他思想

排他思想:简单来讲就是排除掉其他的(包括自己),再给自己设置想要实现的效果。

排他思想的实现步骤:

  • 所有元素全部清除
  • 设置当前元素

节点操作

获取元素通常使用两种方式:

  • 利用DOM提供的方法获取元素
  • 利用节点层级关系获取元素

节点操作会更简单一些。

节点概述

网页中所有内容都是节点(标签、属性、文本、注释等),在DOM中,节点可以用node来表示。
HTML中所有节点都可通过JavaScript进行访问,所有HTML元素(节点)都可以被修改,也可以创建或删除。
节点
一般地,节点至少拥有三个基本属性:节点类型(nodeType)节点名称(nodeName)节点值(nodeValue)

  • 元素节点nodeType为1
  • 属性节点nodeType为2
  • 文本节点nodeType为3(文本节点包括文字、空格、换行等)

实际开发中,主要操作的是元素节点
<html>标签是整个文档的根节点,有且只有一个

节点层级

利用DOM树可以把节点划分为不同的层级关系,常见的是父子兄层级关系

获取父级节点

对象名.parentNode
  • 返回最近的一个父节点
  • 如果没有,返回null

获取子节点

childNodes属性:返回当前节点的所有子节点的集合(NodeList),返回的节点包括元素、文本和其他节点,是即时更新的集合
		  
children属性:只返回子元素节点的集合(HTMLCollection)
		  
firstChild属性:返回第一个子节点(元素节点或文本节点)

firstElementChild属性:返回第一个子元素
		  
lastChild属性:返回最后一个子节点(元素节点或文本节点)
		  
lastElementChild属性:返回最后一个子元素

firstElementChild属性 和 lastElementChild属性 有兼容性问题,IE9以上才支持

实际开发中,firstChild属性 和 lastChild属性包含其他节点,操作不方便
firstElementChild属性 和 lastElementChild属性 又有兼容性问题
因此,我们通常用 属性名.children[索引] 的方式来获取子元素节点

获取兄弟节点

nextSibling属性:返回后一个兄弟节点
		   
previousSibling属性:返回前一个兄弟节点
		   
nextElementSibling属性:返回下一个兄弟元素
		   
previousElementSibling属性:返回前一个兄弟元素

nextElementSibling属性 和 previousElementSibling属性 都有兼容性问题,IE9以上才支持

如何解决兼容性问题:自己封装一个兼容性的函数

function get(e)
{
    var test = e
    while(test = test.nextSibling)
    {
        if(test.nodeType == 1)
        {
             return test
         }
     }
     return null
}

操作节点

创建节点

动态创建元素节点:

document.createElement('tagName'):创建元素节点(创建标签)

document.createTextNode('text'):创建文本节点

添加节点

node.appendChild():将新创建的节点添加到当前节点的末尾

node.inserBefore(newNode,ref):将newNode节点插入到ref节点之前

复制节点

node.cloneNode(deep)
  • deep是逻辑值
  • true表示深拷贝,即复制当前节点及其所有子节点(默认值)
  • false表示浅拷贝,只复制当前节点不复制其子节点

删除节点

node.removeChild()
  • 删除一个子节点,返回删除的节点

以上是关于JavaScript中DOM操作元素及节点操作的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript基础及函数,BOM,DOM的节点及DOM节点操作

Javascript之DOM的三大节点及部分用法

JavaScript DOM节点概述及相关操作(获取节点 创建节点 插入节点 深拷贝 浅拷贝)

js中的DOM操作——查看及设置节点

JavaScript操作-DOM对象

javascript DOM操作