HTML、CSS和JavaScript,实现换肤效果的原理

这篇涉及到HTML DOM的节点类型、节点层级关系、DOM对象的继承关系、操作DOM节点和HTML元素

还用到HTML5的本地存储技术。

换肤效果的原理:是在选择某种皮肤样式之后,通过JavaScript脚本来加载选中的样式,再通过localStorage存储。

先来回忆一下HTML DOM的相关知识。

DOM

DOM模型就是通过逻辑树来表示文档,树的每一个分支的终点都是一个节点Node,每一个节点都含有一个对象。

DOM的方法可以用来改变文档的结构、样式和内容,还可以关联事件处理器,在某一个事件触发后,所关联的事件处理器也会执行。

HTML文档中所有的内容都是节点,整个文档就是文档节点【也就是我们常说的document】;

在整个HTML文档中,根据不同功能来划分,可以分为元素节点、文本节点、属性节点、注释节点等等。常见的节点类型如下图所示:

在这里插入图片描述

操作节点

在操作节点之前,我们先获取节点,然后追加、新增、删除、替换、复制、合并节点等等交互。

在文档中,我们是通过节点来操作文档中的元素,得到的返回值是节点集合。

我们常用来获取节点的属性,如下图:
在这里插入图片描述
常用来追加和新增节点的方法,如下:

Node.appendChild(childNode);
Node.insertBefore(newNode,referenceNode)

删除和替换节点的方法:

Node.removeChild()
Node.replaceChild()

复制、合并节点:

Node.cloneNode(); // 参数为true/false,是否复制节点所有内容
Node.normalize(); // 合并相邻的文本节点并且清除空的文本节点

节点引用和包含关系的判断:

Node.isSameNode(other); // 比较两个节点
Node.hasChildNodes(); // 是否包含子节点

document和element

document是描述了任何类型文档的通用属性和方法,它的构造函数是Document();

所有Document对象下的对象都继承于ELement。ELement描述所有相同种的元素普遍具有的方法和属性。

document对象中获取元素的常用属性:

  1. document.all,返回整个 document 文档集合
  2. document.anchors,返回文档中所有锚点的元素,是一个 List
  3. document.body,返回当前文档的 body 或者 frameset 节点
  4. document.documentElement,返回当前文档的直接节点
  5. document.forms,返回当前文档的所有表单元素
  6. document.head,返回文档的 head 元素
  7. document.images,返回文档的所有图片元素
  8. document.links,返回所有超链接的列表
  9. document.scripts,返回所有的 script 元素
  10. document.styleSheetSets,返回文档中可用样式表的列表
  11. document.defaultView,返回 window 对象的应用
  12. document.title,获取当前文档的标题

document对象中获取元素的常用方法:

  1. document.getElementsByClassName(names),返回指定所有类名的元素
  2. document.getElementsByTagName(name),
  3. document.getElementByld(id)
  4. document.querySelector(selectors)
  5. document.query SelectorAll(selectors)
  6. document.getElementsByName(name)

document对象中创建元素的常用方法:

  1. document.createAttribute(name)
  2. document.createComment(data)
  3. document.createDocumentFragment)
  4. document.createElement(tagName[,options])
  5. document.create TextNode(data)

document对象中向文档中写入内容的方法:

  1. document. write(markup)
  2. document.writeln(line)

Element对象中获取元素的常用方法:

  1. Element.getElementsByClassName(names)
  2. Element.getElementsByTagName(name)
  3. Element.querySelector(selectors)
  4. Element.querySelectorAll(selectors)

Element对象的属性及其操作元素属性的方法:

  1. Element.classList
  2. Element.className
  3. Element.id
  4. Element.innerHTM
  5. Element.outerHTML
  6. Element.tagName
  7. Element.children
  8. Element.getAttribute (attr)
  9. Element.getAttributeNode(attr)
  10. Element.removeAttribute(attr)
  11. Element.removeAttributeNode(attrNode)
  12. Element.setAttribute(name,value)
  13. Element.setAttributeNode(attr)
  14. Element.toggleAttribute(name [,force])

Element对象中插入节点的常用方法:

  1. Element.insertAdjacentElement(pos,ele)
  2. Element.insertAdjacentHTML(pos,text)
  3. Element.insertAdjacentText(pos,ele)

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

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

相关文章

MYSQL 8.0 配置CDC(binlog)

CDC(Change Data Capture)即数据变更抓取,通过源端数据源开启CDC,ROMA Connect 可实现数据源的实时数据同步以及物理表的物理删除同步。这里介绍通过开启Binlog模式CDC功能。 注意:1、使用MYSQL8.0及以上版本。 2、不…

剑指JUC原理-9.Java无锁模型

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring源码、JUC源码🔥如果感觉博主的文章还不错的话,请👍三连支持&…

docker 存储目录迁移

参考:【Docker专题】WSL镜像包盘符迁移详细笔记 - 掘金 docker迁移 一 默认目录 Windows版本(Windows 10 wsl 2)docker 默认程序安装到c盘,数据存放于 C:\Users\当前用户名\AppData\Local\Docker\wsl\data\ext4.vhdx 这样会导致…

延时摄影视频制作工具 LRTimelapse mac中文版特点介绍

lrTimelapse mac是一款适用于 Windows 和 macOS 系统的延时摄影视频制作软件,可以帮助用户创建高质量的延时摄影视频。该软件提供了直观的界面和丰富的功能,支持多种时间轴摄影工具和文件格式,并具有高度的可定制性和扩展性。 lrTimelapse ma…

牛客项目(五)-使用kafka实现发送系统通知

kafka入门以及与spring整合 Message.java import java.util.Date;public class Message {private int id;private int fromId;private int toId;private String conversationId;private String content;private int status;private Date createTime;public int getId() {retur…

Python数据分析实战-筛选出DataFrame中指定列都不包含缺失值的记录(附源码和实现效果)

实现功能 筛选出DataFrame中指定列都不包含缺失值的记录 实现代码 import pandas as pd# 创建示例DataFrame data {A: [1, 2, 3, None, 5],B: [1, None, 3, 4, 5],C: [1, 2, 3, 4, 5] } df pd.DataFrame(data)# 筛选出指定列都不包含缺失值的记录 columns_to_check [A, B…

Prometheus+Node_exporter+Grafana实现监控主机

PrometheusNode_exporterGrafana实现监控主机 如果没有安装相关的配置,首先要进行安装配置,环境是基于Linux,虚拟机的相关环境配置在文末给出,现在先讲解PrometheusNode_exporterGrafana的安装和使用。 一.Prometheus安装 虽然…

家用洗地机什么牌子最好?家用洗地机排行榜

对于现在的年轻人来说,打扫家里的卫生一直是非常头疼的问题,上班一天已经很累了,回家还需要花费很长时间吸地、拖地真的很闹心。特别是对于有小孩子的家庭,地面弄上一些油污、饭菜简直就是家常便饭,每次打扫起来非常费…

NFC芯片MS520:非接触式读卡器 IC

MS520 是一款应用于 13.56MHz 非接触式通信中的高集成 度读写卡芯片。它集成了 13.56MHz 下所有类型的被动非接触 式通信方式和协议,支持 ISO14443A 的多层应用。 主要特点 ◼ 高度集成的解调和解码模拟电路 ◼ 采用少量外部器件,即可将输…

X号是否可以接入OKCC

答案当然是可以。 但是有个前提,需要借助X号平台,也就是我们常说的小号平台。 X号只是号码资源,没有载体,要将X号接入OKCC,需要通过小号平台,类似号码池一样的平台,以API的方式接入OKCC。 所以很…

Redis集群

目录 一, 集群及分片算法 1.1 什么是集群 1.2 数据分片算法 1. 哈希求余 2. 一致性哈希算 3. 哈希槽分区算法(Redis使用) 二, 集群的故障处理 2.1 故障判定 2.2 故障迁移 三, 集群扩容 四, 集群缩容 一, 集群及分片算法 1.1 什么是集群 我们在Redis哨兵中学习了,哨…

甘特图组件DHTMLX Gantt用例 - 如何拆分任务和里程碑项目路线图

创建一致且引人注意的视觉样式是任何项目管理应用程序的重要要求,这就是为什么我们会在这个系列中继续探索DHTMLX Gantt图库的自定义。在本文中我们将考虑一个新的甘特图定制场景,DHTMLX Gantt组件如何创建一个项目路线图。 DHTMLX Gantt正式版下载 用…

六氟化硫气体监测装置单位VOL%/LEL%/PPM分别是什么意思?

我们在使用六氟化硫等气体监测装置仪器时,经常看到VOL%、LEL%、PPM等单位,以及仪器中反复性、响应时间、灵敏度等这些词在气体检测仪中代表什么意思呢?今天主要给大家解释气体检测仪一些常见的单位及常用术语的意思。 一、常见单位 &#xff…

上线项目问题——无法加载响应数据

目录 无法加载响应数据解决 无法加载响应数据 上线项目时 改用服务器上的redis和MySQL 出现请求能请求到后端,后端也能正常返回数据,但是在前端页面会显示 以为是跨域问题,但是环境还在本地,排除跨域问题以为是服务器问题&#…

iOS App Store上传项目报错 缺少隐私政策网址(URL)解决方法

​ 一、问题如下图所示: ​ 二、解决办法:使用Google浏览器(翻译成中文)直接打开该网址 https://www.freeprivacypolicy.com/free-privacy-policy-generator.php 按照要求填写APP信息,最后将生成的网址复制粘贴到隐…

计算两个时间之间连续的日期(java)

背景介绍 给出两个时间,希望算出两者之间连续的日期,比如时间A:2023-10-01 00:00:00 时间B:2023-11-30 23:59:59,期望得到的连续日期为2023-10-01、2023-10-02、… 2023-11-30 Java版代码示例 import java.time.temporal.ChronoUnit; import java.tim…

Proxysql读写分离

Proxysql读写分离 主从配置 # /etc/my.cnf 主节点 [mysqld] log-binmysql-bin server-id1从节点 [mysqld] server-id2 read_only1#初始化以及创建主从复制用户 mysql> alter user rootlocalhost identified with mysql_native_password by Jianren123; Query OK, 0 rows …

C++:关联式容器set的介绍

1、set的介绍 set是按照一定次序存储元素的容器 在set中,元素的value也标识它(value就是key,类型为T),并且每个value必须是唯一的。 set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们。 在内部&#…

使用Llama index构建多代理 RAG

检索增强生成(RAG)已成为增强大型语言模型(LLM)能力的一种强大技术。通过从知识来源中检索相关信息并将其纳入提示,RAG为LLM提供了有用的上下文,以产生基于事实的输出。 但是现有的单代理RAG系统面临着检索效率低下、高延迟和次优提示的挑战。这些问题在…

讲座分享|《追AI的人》——中国科学技术大学张卫明教授分享《人工智能背景下的数字水印》

本篇博客记录 2023年11月1日 《人工智能背景下的数字水印》 讲座笔记。 先来明确一下水印在信息隐藏中的定位,如下图: 目录 概述AI for Watermark图像传统攻击方式(如JPEG压缩)跨媒介攻击方式(屏摄) 文档水…