当前位置: 首页 > news >正文

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)

相关文章:

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

这篇涉及到HTML DOM的节点类型、节点层级关系、DOM对象的继承关系、操作DOM节点和HTML元素 还用到HTML5的本地存储技术。 换肤效果的原理:是在选择某种皮肤样式之后,通过JavaScript脚本来加载选中的样式,再通过localStorage存储。 先来回忆…...

2103. 环和杆

2103. 环和杆 难度: 简单 来源: 每日一题 2023.11.02 总计有 n 个环,环的颜色可以是红、绿、蓝中的一种。这些环分别穿在 10 根编号为 0 到 9 的杆上。 给你一个长度为 2n 的字符串 rings ,表示这 n 个环在杆上的分布。rings 中每两个字符形成一个…...

YOLOv5:修改backbone为SPPCSPC

YOLOv5:修改backbone为SPPCSPC 前言前提条件相关介绍SPPCSPCYOLOv5修改backbone为SPPCSPC修改common.py修改yolo.py修改yolov5.yaml配置 参考 前言 记录在YOLOv5修改backbone操作,方便自己查阅。由于本人水平有限,难免出现错漏,敬…...

css中flexbox和grid的区别

css中flexbox和grid的区别 我们是不是被那些不会按预期排列的元素所影响?这篇文章我们将深入探讨css中flexbox和grid的布局。通过了解他们的主要差异,我们会发现这些布局是如何改变我们网站的风格。 理解CSS布局 css布局是网页设计的一个重要方面&…...

uniapp循环对象列表---点击列表切换选中不同状态

目录 源码图片最后 源码 <template><view><ul><li v-for"(item, index) in list" click"toggleSelection(index)" :class"{selected: selectedIndex index}">{{ item }}<view :class"{selected: selectedInde…...

【使用Python编写游戏辅助工具】第二篇:键盘监听的应用

前言 这里是【使用Python编写游戏辅助工具】的第二篇&#xff1a;键盘监听的应用。本文主要介绍使用Python实现事件监听功能。 键盘监听是指通过编程的方式监控用户在键盘上的按键操作。 在这里键盘监听的主要用途是&#xff1a; 监听我们按下的按键&#xff0c;如果按下了指…...

Shiny Server和ShinyProxy是什么,有什么区别?

调研以及参与过多个生物公司的生信工具研发&#xff0c;不管是ShinyServer还是ShinyProxy都有一定研究&#xff0c;尤其是ShinyServer。如果仅是本地化测试想快速的搭建Shiny应用&#xff0c;我推荐用Shiny Server&#xff0c;如果多并发用户且更好的线上管理Shiny应用&#xf…...

Java 客户端、服务端NIO大文件传输

一、需求 公司电脑不让使用U盘&#xff0c;又不想通过公司聊天软件传输&#xff0c;怕被监控。但是通过QQ、微信传输文件对文件大小又有限制。基于种种原因&#xff0c;自己简单写了个服务端、客户端进行文件传输&#xff0c;大文件最好在局域网内进行数据传输。 二、pom依赖…...

Unity3D与iOS的交互 简单版开箱即用

本文适合的情况如下&#xff1a; Unity客户端人员 与 IOS端研发人员合作的情况 目录 From U3D to iOS 实现原理 1.unity工程目录创建2个文件 NativeCallProxy.m、NativeCallProxy.h 并且放到Unity工程目录Plugins/iOS/unity_ios_plus目录下 2.创建C#调用脚本 定义对应.mm脚…...

限制LitstBox控件显示指定行数的最新数据(3/3)

实例需求&#xff1a;由于数据行数累加增加&#xff0c;控件加载的数据越来越多&#xff0c;每次用户都需要使用右侧滚动条拖动才能查看最新数据。 因此希望ListBox只加载最后10行数据&#xff08;不含标题行&#xff09;&#xff0c;这样用户可以非常方便地选择数据&#xff…...

Maven进阶系列-仓库和镜像

Maven进阶系列-仓库和镜像 文章目录 Maven进阶系列-仓库和镜像1. 仓库1.1 仓库类型1.2 寻找jar的基本优先级顺序&#xff1a;1.3 仓库优先次序验证示例 2. settings.xml文件2.1 mirrors2.1.1 没有配置mirror2.1.2 配置了mirror2.1.3 <mirrorOf> 2.2 servers2.3 profiles …...

mac下载安装jenkins

下载 https://get.jenkins.io/war/ 启动 使用命令行启动 java -jar jenkins.war 浏览器访问 IP:8080 或 localhost:8080 &#xff0c;对jenkins进行配置&#xff0c;刚开始需要输入密码 终端会展示密码和密码存放位置 jenkins插件下载地址&#xff0c; 下载后自行上传。 I…...

Mac上的iTerm2和Oh My Zsh 的安装(安装过程和失败详解)

前言&#xff08;无重点&#xff0c;安装往后看&#xff09; 由于在很多人的安利下&#xff0c;说很好用&#xff0c;作者今天花费了4个小时用血的教训总结出来的安装教程&#xff0c;我在安装过程中遇到的最大的问题就是 1. curl: (7) Failed to connect to raw.githubusercon…...

阿里云OS系统Alibaba Cloud Linux 3系统的安全更新命令

给客户部署的服务&#xff0c;进入运维阶段&#xff0c;但是经常被客户监测到服务器漏洞&#xff0c;现在整理一下&#xff0c;服务器漏洞问题更新命令步骤。 服务器系统&#xff1a; 阿里云linux服务器&#xff1a;Alibaba Cloud Linux 3 漏洞类型和描述&#xff1a; #3214…...

你写的Python代码到底多快?这些测试工具了解了解

当我们写完一个脚本或一个函数&#xff0c;首先能保证得到正确结果&#xff0c;其次尽可能的快&#xff08;虽然会说Py慢&#xff0c;但有的项目就是得要基于Py开发&#xff09; 本期将总结几种获取程序运行时间的方法&#xff0c;极大的帮助对比不同算法/写法效率 插播&…...

网际控制报文协议ICMP

网际控制报文协议ICMP ​ 为了更有效的转发IP数据报和提高交付成功的机会&#xff0c;在网际层使用ICMP&#xff08;Internet Control Message Protocol&#xff09;协议&#xff0c;其允许主机或路由器报告差错情况和提供有关异常情况的报告。ICMP报文装在IP数据报中&#xf…...

海外腾讯云服务器配置域名的详细说明!!

本文首要针对腾讯云服务器装备域名的问题进行具体的说明&#xff0c;包含域名的品种、注册方法、解析进程以及安全性等方面的介绍&#xff0c;帮助用户更好的理解腾讯云服务器装备域名的全进程。 一、域名的品种 1.域名是互联网上仅有标识一台计算机或一个网络资源的名称&#…...

听GPT 讲Rust源代码--library/std(12)

题图来自 Decoding Rust: Everything You Need to Know About the Programming Language[1] File: rust/library/std/src/os/watchos/mod.rs 该文件&#xff08;rust/library/std/src/os/watchos/mod.rs&#xff09;的作用是为Rust标准库提供支持WatchOS操作系统的特定功能。 W…...

06、Caused by: java.nio.charset.MalformedInputException: Input length = 1

目录 问题&#xff1a;原因&#xff1a;解决方法&#xff1a; 问题&#xff1a; Caused by: java.nio.charset.MalformedInputException: Input length 1 原因&#xff1a; 应该是中文有哪些文字导致的。 yml 编码格式出错 解决方法&#xff1a; 直接这里把GBK改成 utf-8…...

探索 Java 8 中的 Stream 流:构建流的多种方式

人嘛&#xff0c;要懂得避嫌… 开篇引入 Java 8引入了Stream流作为一项新的特性&#xff0c;它是用来处理集合数据的一种函数式编程方式。Stream流提供了一种更简洁、高效和易于理解的方法来操作集合数据&#xff0c;同时也能够实现并行处理&#xff0c;以提高性能。 以下是St…...

自动化文件管理:基于Python的网盘批量处理方案

自动化文件管理&#xff1a;基于Python的网盘批量处理方案 【免费下载链接】BaiduPanFilesTransfers 百度网盘批量转存、分享和检测工具 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduPanFilesTransfers 在数字资源日益丰富的时代&#xff0c;百度网盘用户面临着批…...

VM振弦采集模块精度实测:从标准信号源到误差分析全流程

1. 项目概述与核心价值最近在做一个岩土工程安全监测的项目&#xff0c;其中有个环节让我琢磨了好一阵子&#xff1a;如何准确地评估我们用的那批VM振弦采集模块的测量精度。这玩意儿在结构健康监测、桥梁隧道、边坡稳定性监测里用得非常多&#xff0c;核心任务就是读取振弦式传…...

双十一话务峰值8倍冲击_智能语音机器人扛峰技术方案

双十一话务峰值8倍冲击&#xff1a;国内主流的智能语音机器人推荐这样扛本文从技术架构视角&#xff0c;解析智能语音机器人在电商大促场景下应对话务峰值冲击的核心方案。一、电商大促场景下的客服联络核心挑战 每年双十一、618 等大促节点&#xff0c;电商零售行业的话务量都…...

2026年阿里云OpenClaw/Hermes Agent配置Token Plan部署方法详解

2026年阿里云OpenClaw/Hermes Agent配置Token Plan部署方法详解。OpenClaw是开源的个人AI助手&#xff0c;Hermes Agent则是一个能自我进化的AI智能体框架。阿里云提供计算巢、轻量服务器及无影云电脑三种部署OpenClaw 与 Hermes Agent的方案、百炼Token Plan兼容主流 AI 工具&…...

2026年AI面试准确率TOP榜:92%一致性背后,谁在定义行业新标准?

当年ChatGPT的横空出世&#xff0c;让全世界第一次见识到通用大模型的对话能力&#xff1b;DeepSeek 的爆发&#xff0c;则将AI的火种真正播撒到中国各行各业的毛细血管中&#xff0c;而在人力资源行业作为数字化转型的前沿阵地&#xff0c;首当其冲迎来了AI的全面渗透 &#x…...

ElastiFlow企业级网络流量监控解决方案:5大核心优势与架构深度解析

ElastiFlow企业级网络流量监控解决方案&#xff1a;5大核心优势与架构深度解析 【免费下载链接】elastiflow Network flow analytics (Netflow, sFlow and IPFIX) with the Elastic Stack 项目地址: https://gitcode.com/gh_mirrors/el/elastiflow 在数字化转型浪潮中&a…...

AI助力!谷歌、苹果让手机开发与个性化定制更简单

App Store 的承诺与现状“有个应用程序能搞定”&#xff0c;这是 App Store 从一开始的承诺&#xff0c;用户轻点几下就能找到让手机实现所需功能的应用程序。不过&#xff0c;至今仍未出现完美的购物清单应用程序。尽管如此&#xff0c;应用程序的确将现代智能手机塑造成了如今…...

Robo 3T:原生跨平台MongoDB管理工具的架构解析与技术实践

Robo 3T&#xff1a;原生跨平台MongoDB管理工具的架构解析与技术实践 【免费下载链接】robomongo Native cross-platform MongoDB management tool 项目地址: https://gitcode.com/gh_mirrors/ro/robomongo Robo 3T作为一款原生跨平台的MongoDB管理工具&#xff0c;为开…...

别再死记硬背二进制转换了!用Python写个自动转换工具,顺便搞懂CPU是怎么算的

用Python打造二进制转换工具&#xff1a;从代码实践理解CPU运算本质 当我们在编程中遇到需要处理二进制数据时&#xff0c;是否曾对背后的计算机原理产生好奇&#xff1f;本文将通过构建一个Python数制转换工具&#xff0c;带你穿透代码表层&#xff0c;深入理解CPU如何处理二…...

如何将短信从Android传输到 iPhone

每次苹果发布新款 iPhone&#xff0c;都会吸引大量渴望更换手机的用户&#xff0c;其中也包括许多Android用户。对于这些Android用户来说&#xff0c; 将数据从Android迁移到新 iPhone是当务之急&#xff0c;尤其是传输短信&#xff0c;因为短信通常包含个人和职业生活的重要信…...