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

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

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

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

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

DOM

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

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

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

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

操作节点

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

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

我们常用来获取节点的属性,如下图:

常用来追加和新增节点的方法,如下:

javascript 复制代码
Node.appendChild(childNode);
Node.insertBefore(newNode,referenceNode)

删除和替换节点的方法:

javascript 复制代码
Node.removeChild()
Node.replaceChild()

复制、合并节点:

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

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

javascript 复制代码
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)
相关推荐
爱滑雪的码农4 小时前
详细说说React大型项目结构以及日常开发核心语法
前端·javascript·react.js
七牛开发者4 小时前
HTML is the new Markdown:来自 Claude Code 团队的实践
前端·人工智能·语言模型·html
@大迁世界5 小时前
43.HTML 事件处理和 React 事件处理有什么区别?
前端·javascript·react.js·html·ecmascript
ZC跨境爬虫6 小时前
跟着 MDN 学 HTML day_38:(DocumentFragment 文档片段接口详解)
前端·javascript·ui·html·音视频
@大迁世界7 小时前
41.ShadCN 是什么?它如何和 Tailwind CSS 集成,从而更容易构建可访问且可自定义的 React 组件?
前端·javascript·css·react.js·前端框架
xiangxiongfly9159 小时前
Vue3 根据角色权限动态加载路由
前端·javascript·vue.js·动态加载路由
费曼学习法10 小时前
React 18 并发模式(Concurrent Mode):Fiber 架构的终极进化
javascript·react.js
容智信息10 小时前
AI Agent(智能体)的输出格式应该从 Markdown 转向 HTML吗?
前端·人工智能·rust·编辑器·html·prompt
_风满楼10 小时前
TDD 进阶:换个角度看会议室预约
前端·javascript·github
梨子同志10 小时前
CSS Grid
前端·css