在dom最前面插入_JavaScript中的DOM

1. 关于DOM

文档对象模型(DocumentObject Model),是基于浏览器编程的一套API接口,W3C出台的推荐标准,每个浏览器都有一些细微的差别,其中以Mozilla(火狐)的浏览器最与标准接近。

通过 DOM,可以访问所有的 HTML元素,连同它们所包含的文本和属性。可以对其中的内容进行修改和删除,同时也可以创建新的元素。

2. 动态改变文档内容

要想对页面的内容做修改,需要如下方式来操作:

​ a.解析文档(如HTML)并生成DOM树

​ b.通过DOM提供的属性和方法,获取或改变文档的内容

2.1 DOM的节点

HTML 文档中的每个成分都是一个节点(Node)

DOM 是这样规定的:

  • 整个文档是一个文档节点
  • 每个 HTML 标签是一个元素节点
  • 包含在 HTML 元素中的文本是文本节点
  • 每一个 HTML 属性是一个属性节点
  • 注释属于注释节点

2.1.1 节点间的关系

节点彼此都有等级关系

父节点、子节点、兄弟节点(同级节点)

2.2 DOM标准接口

W3C提供了三类DOM标准接口,如下:

​ a. 核心DOM,适用于各种结构化文档

​ b.HTML DOM,专用于HTML文档

c. XML DOM,专用于XML文档

3. 核心DOM操作

3.1 访问节点

59dc044cafb86603462c2740896de0ea.png

访问节点兼容处理

b1b00782c3e24099a942916e3cce98fb.png

getElement系列方法

使用getElement系列方法来访问指定的节点

  • getElementById():返回对拥有指定id的第一个对象的引用
  • getElementsByTagName():返回带有指定名称的对象集合
  • getElementsByClassName():返回指定的类选择器的集合
  • getElementsByName():返回带有指定名称的对象集合(注意不是所有标签都有name属性)

3.1.1 节点信息1

每个节点都拥有包含节点某些信息的属性

  • nodeName(节点名称)
  • nodeValue(节点值)
  • nodeType(节点类型)

3.1.2 节点信息2

nodeName

  • 元素节点的 nodeName (节点名称)是标签名称
  • 属性节点的 nodeName 是属性名称
  • 文本节点的 nodeName 永远是 #text
  • 文档节点的 nodeName 永远是 #document

nodeValue

  • 对于文本节点,nodeValue 属性包含文本
  • 对于属性节点,nodeValue 属性包含属性值

nodeType

  • 元素 1 、属性 2、 文本 3、 注释 8、 文档 9
  • 上面不同的数值代表不同的节点类型

3.2 创建和操作节点

3.2.1 主要方法

方法 说 明

createElement( tagName) 创建一个名为tagName的新元素节点,用法Document.createElement(标签名)

ANode.appendChild( BNode) 把子节点B追加到父节点A里面的末尾

insertBefore( ANode,BNode ) 把A节点插入到B节点之前

Node.loneNode(deep) deep为true则复制该节点以及该节点的所有子节点,为false则只复制该节点和其属性

3.2.2 操作节点的属性

8c5007ac29b86b7cc077ff7d43af13db.png

3.3 删除和替换节点

方法 说 明

removeChild( node) 删除指定的节点(用父级元素去调用它)

replaceChild( newNode, oldNode) 用newNode来替换oldNode(https://www.cnblogs.com/zzq919101/p/6017152.html)

3.3.1 removeChild()示例代码如下

var tb = document.getElementById("tb");//先找到要删除的节点,这里要删除一行var tr = tb.lastChild.lastChild;//这里也需要父节点操作子节点tr.parentNode.removeChild(tr);​​

3.3.2 replaceChild()示例代码

var tb = document.getElementById("tb");var tr = document.createElement("tr");var td1 = document.createElement("td");var td2 = document.createElement("td");td1.innerHTML = "我的内容1";td2.innerHTML = "我的内容2";tr.appendChild(td1);tr.appendChild(td2);//父节点操作子节点//两个参数,第一个表示新节点,第二个表示旧节点,这里用心节点替换旧节点tb.lastChild.replaceChild(tr,tb.lastChild.firstChild);​

3.4 其他

id,value等操作

innerHTML和innerText的区别

  • 如果内容中有html标签,使用innerHTML时,内容中的html标签会被解析出来,而使用innerText时,html只会被当作文本显示出来

元素.style.样式

className

3.5 示例

代码1:

60d176911a6d02e4290e44fb8d4b561f.png

结果1:

1a07fe12b6f186f294e4bc1c46b71ba1.png

代码2:

b5e743e4641db43f9b4ea912658ba700.png

结果2:

314580cb2f590598550dca73add9bce2.png

代码3:

309cc09a247117d29c3f3638b265e481.png

结果3:

e3b1164f5cf90eafec7085590048424d.png

4. HTML DOM操作

​ HTML文档中的每个节点,都是DOM对象,每个DOM对象都有属于自己的属性和方法.

​ HTML DOM在操作表格时,我们把一个表格看成是一个table对象,那么一个table对象是由若干个行对象(row)组成的,而其中每个行对象又是由若干个单元格对象(cell)组成的

​ Table对象可以操作行对象,行对象可以操作单元格对象

4.1 table表格对象

类别 名称 描述

属性 rows[] 返回包含表格中所有行的一个数组

方法 insertRow() 在表格中插入一个新行

方法 deleteRow() 从表格中删除一行

4.2 row行对象

类别 名称 描述

属性 cells[] 返回包含行中所有单元格的一个数组

属性 rowIndex 返回该行在表中的位置

方法 insertCell() 在一行中的指定位置插入一个空的

标签

方法 deleteCell() 删除行中指定的单元格

另,对于单元格对象,还有cellIndex可以获取单元格的索引号

例如,这里需要在表格的末尾追加一行:

var tb = document.getElementById("tb");//添加之前,tb中共有多少个tr,返回的是一个数组var alltrs = tb.lastChild.rows;//先在tb中添加一行,此时行虽然添加了,但行中没有任何内容//此时传递的参数了,是一个添加的位置,是tr的索引号,这里是在末尾追加var newtr = tb.insertRow(alltrs.length);//再在新添加的行中,添加单元格对象var td1 = newtr.insertCell(0);var td2 = newtr.insertCell(1);//然后还需要往td中添加内容td1.innerHTML = "html dom";td2.innerHTML = "测试";​

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/534266.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python 快速删除程序_如何快速一次性卸载所有python包(第三方库)呢

很多时候我们都会有一个麻烦事,就是打开pycharm或者VScode等的时候,都有可能因为自己电脑上面安装的第三方模块过多,导致电脑很卡,风扇转速不停地增加,这时候我们就会想去卸载一些不太用得着的第三方模块,但…

python正则表达式修饰符_Python正则表达式

正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。re 模块使 Python 语言拥有全部的正则表达式功能。compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。r…

当代最值得收藏的画家作品_当代最具潜力和收藏价值的十大画家

原标题:当代最具潜力和收藏价值的十大画家当代从事绘画的人成千上万,哪些名家作品值得收藏?当前都有哪些“潜力股”,相关专家综合市场分析,纯从艺术水准上列出值得收藏的“潜力股”,供爱好书画收藏的各界人…

备抵附加账户的期末余额_会计账户的分类(二)

待摊费用账户的格式和运用方法同盘存类账户,即:期初如果有余额在借方,本期发生额的增加数在借方,本期发生额的减少数在贷方,期末如果有余额在借方。预提费用账户是指用来核算和监督按规定预先提取计入当期,…

mysql union all 别名_mysql union和union all

如下先创建2个表,aa bb.CREATE table aa(uid int(20) not null,name VARCHAR(30) not null)engineinnodb default charsetutf8mb4 COLLATE utf8mb4_general_ci;INSERT INTO aa(uid, name) VALUES (10, 张芳);INSERT INTO aa(uid, name) VALUES (11, 王凯);INSERT IN…

MySQL不走联合索引_mysql group by 多列优化思路?为什么不走联合索引?

explain SELECT a, b, COUNT(*) FROM tbnameGROUP BY a, border by a DESClimit 1a 和 b 列已经设置联合索引, 为什么这种操作也会执行全表扫描呢?explain SELECT a, b FROM tbnameGROUP BY a, border by a DESC去掉 COUNT 和 limit 则走索引没有扫描&am…

mysql ddl 锁_MySQL Online DDL导致全局锁表案例分析

MySQL Online DDL导致全局锁表案例分析我这边遇到了什么问题?线上给某个表执行新增索引SQL, 然后整个数据CPU打到100%, 连接数暴增到极限, 最后导致所有访问数据库的应用都奔溃.SQL如下:ALTER TABLE bookADD INDEX idx_sub_title (sub_title ASC);能看到什么?10063293, root,…

ci框架 乱码 mysql_mysql容器乱码问题

在docker-compose.yml文件中定义mysql导入utf-8的万国码services:mysql:image:mysql:5.7# command: [--character-set-serverutf8mb4, --collation-serverutf8mb4_unicode_ci]volumes:-./data/docker/mysql:/var/lib/mysql-./mysql/:/docker-entrypoint-initdb.d/-./conf/mys…

mysql分表 查询 优化_MySQL性能管理及架构(查询优化、分库分表)一遍文章搞定...

相关配置参数:slow_query_log # 启动停止记录慢查日志,慢查询日志默认是没有开启的可以在配置文件中开启(on)slow_query_log_file # 指定慢查日志的存储路径及文件,日志存储和数据从存储应该分开存储long_query_time # 指定记录慢查询日志SQL…

dokcer mysql修改编码_默认支持utf8编码的mysql docker镜像

其他人都是不正确的使用mysql容器镜像可以很快速的运行mysql,免去了传统的虚拟机安装方式的繁琐配置。但是使用官方的mysql镜像,你会遇到中文乱码的问题,原因是官方镜像的字符集默认值不是utf8。这时候你去google,会找到一些文章&…

mysql临时表 清空_在数据库中临时表什么时候会被清除呢

展开全部我们仍使用 实验 05 中的环境,略去准备数据的过程。我们仍然使用两个会话,62616964757a686964616fe59b9ee7ad9431333433646439一个会话 run,用于运行主 SQL;另一个会话 ps,用于进行 performance_schema 的观察…

locust mysql_locust性能压测连接mysql,随机取出班级,绑定学生

from locust import HttpLocust, TaskSet, taskimport pymysqlimport randomclass UserBehavior(TaskSet):def on_start(self):db pymysql.connect("ip地址", "用户名", "密码", "数据库")cursor db.cursor()cursor.execute("S…

mysql无法添加或更新子行_违反完整性约束:1452无法添加或更新子行:

我试图在我的注释表中插入值,但出现错误。俗话说,我不能添加或更新子行,我也不知道这意味着什么。我的架构看起来像这样-- ------------------------------ Table structure for comments-- ----------------------------DROP TABLE IF EXIST…

python医学图像分割_基于cv2的医学图像分割

例如,图像如下所示:import cv2import numpy as npimg cv2.imread("mdb168.pgm",0)import matplotlib.pyplot as pltplt.imshow(img, cmap"gray")我想删除图像中所有的伪影和不必要的部分。在为此,我首先对图像进行二值化…

python解析response的json_从HTML responseTex解析JSON

因此,我大体上同意,更好的解决方案是确保服务器只返回JSON,不过这是通过客户端Javascript实现的一种快速方法,如Barmer所建议的那样,将html解析到DOM,获取body中的文本childNode并在其上运行JSONParse。在v…

mysql 密码修改时间_Mysql修改密码的方法

修改mysql密码的方法:最简单的,在Navicat连接后点用户,找到rootlocalhost直接修改。注意如果装了xampp,在phpmyadmin配置文件也需要改两处密码。下面是在命令行修改的方法。方法1:用mysqladmin----------------亲测这个…

svn版本库浏览器_在SVN版本库浏览器中直接编辑文件保存后不会弹..._网络编辑_帮考网...

原因是没有实际添加到版本库中,要添加到版本库必须执行“Commit”。具体分析如下:SVN错误处理svn : Couldn’t perform atomic initialization. 临时解决办法:升级sqlite。原本安装的是 subversion 1.6.16 sqlite 3.6.13,一直报”…

ubuntu下使用python将ppt转成图片_Ubuntu下使用Python实现游戏制作中的切分图片功能...

本文实例讲述了Ubuntu下使用Python实现游戏制作中的切分图片功能。分享给大家供大家参考,具体如下:why拿到一个人物行走的素材,要用TexturePacker打包。TexturePacker打包后,助于游戏加载图片效率,且比较好管理。目前得…

世上最简单的mysql_mysql这样学最简单|基本操作上

这是数据库系列的第一篇文章,主要是对mysql的基本操作有一个了解。本系列的教程会先从基础出发,逐步过渡到优化。一、前提在这里我们不会从如何去安装数据库开始讲起,而是在安装完之后从操作数据库开始,文中所有的代码均在我自己的…

django ipython shell_django shell ipython 模型层优化(关联对象) 懒加载和预加载 +长链接...

懒加载存在于外键和多对多关系不检索关联对象的数据调用关联对象会再次查询数据库问题根源查看django orm的数据加载,两次. 查询user,查询menu第一次查询 用户表 第二次查询 app表cmd:python manage.py shell #进入shell调试 或者ipythonfrom authorization.models import Use…