首页 > 其他分享 >DOM – Web Components

DOM – Web Components

时间:2022-09-29 23:57:19浏览次数:69  
标签:Web const Components DOM HTML template templateContent

前言

Web Components 已经听过很多年了, 但在开发中用纯 DOM 来实现还是比较少见的. 通常我们是配搭 Angular, React, Vue, Lit 来使用.

这篇就来讲讲 纯 Web Components 长什么样子吧. Lit 和 Angular 的实现是尽可能依据规范的哦.

 

参考

YouTube – Web Components Crash Course

Web Components 基础入门-Web Components概念详解(上)

 

介绍

Web Components 其实是一个大概念, 它又可以被分为几个部分. 大家拼凑一起才完整了 Web Components.

这些小概念分别是: Custom Elements, Shadow DOM 和 HTML Templates. 我们先把它们挨个挨个分开看. (它们单独也可以 working 的哦)

 

HTML Templates

它最简单, 所以说说它先, 以前我们做动态内容是直接写 HTML Raw 的. 但这个方法对管理分成不友好.

现在都改成用 Template 来管理了.

定义 template

<body>
  <template>
    <h1>dynamic title here...</h1>
    <p>dynamic content here...</p>
  </template>
</body>

template 是不会渲染出来的. 它只是一个模型.

使用 template

// step 1 : 获取 template
const template = document.querySelector<HTMLTemplateElement>("template")!;

// step 2 : clone and binding data
const templateContent = template.content.cloneNode(true) as DocumentFragment;
templateContent.querySelector("h1")!.textContent = "Hello World 1";
templateContent.querySelector("p")!.textContent =
  "Lorem ipsum dolor sit amet consectetur adipisicing elit. Accusantium, laborum.";

// step 3 : append to target
document.body.appendChild(templateContent);

记得要先 clone 了才能使用.

Convert DocumentFragment to Raw String

template.content 是 DocumentFragment 来的, 有时候会需要把它转成 Raw HTML (比如我在 Google Map JavaScript API Info Window 的时候)

参考: Converting Range or DocumentFragment to string

有 2 招. 

1. 创建一个 div 把 frag 丢进去, 然后 .innerHTML 取出来.

const div = document.createElement("div");
div.appendChild(templateContent);
console.log("rawHtml", div.innerHTML);

2. 用 XMLSerializer

const serializer = new XMLSerializer();
const rawHtml = serializer.serializeToString(templateContent);
console.log("rawHtml", rawHtml);

个人感觉, 第一招会比较安全一些. 毕竟 XML 和 HTML 还是有区别的. 未必 XMLSerializer 能处理好 HTML (只是一个猜想而已)

 

标签:Web,const,Components,DOM,HTML,template,templateContent
From: https://www.cnblogs.com/keatkeat/p/16743532.html

相关文章

  • WEB自动化-12-Cypress 调试
    12调试  Cypress的测试代码和被测试程序在同一生命周期中的浏览器中,也就是意味着,可以使用浏览器的开发者工具直接参与调试。Cypress提供了几种调试方法,分别为:debugge......
  • DOM文档对象模型
    目录​​DOM的概念​​​​HTMLDOM 的方法和属性​​​​代码举例​​DOM的概念DOM,全称DocumentObjectModel,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问......
  • DOM文档对象模型
    目录​​DOM的概念​​​​HTMLDOM 的方法和属性​​​​代码举例​​DOM的概念DOM,全称DocumentObjectModel,是一个平台和语言都中立的接口,可以使程序和脚本能够动态访问......
  • 秋色园QBlog技术原理解析:Web之页面处理-内容填充(八)
    文章回顾:1:​​秋色园QBlog技术原理解析:开篇:整体认识(一)​​--介绍整体文件夹和文件的作用2:​​秋色园QBlog技术原理解析:认识整站处理流程(二)​​--介绍秋色园业务处理......
  • 前端面试总结12-WebApi-存储
    简述cooki,localstorage,sessionstorage的区别(1:cookie数据存放在浏览器上,session存放在服务器上(2:cookie安全性低(3:session占用服务器性能(4:单个cookie最大存储数据不超过4k......
  • 支付宝沙箱服务 (结合springboot实现,这里对接的是easy版本,工具用的是IDEA,WebStrom)
    一:打开支付宝开发平台,登录,然后点击控制台https://open.alipay.com/   二:滚动到底部,选着沙箱服务   三:获取到对接要用的appId和公钥私钥    四......
  • Ajax、反向Ajax和WebSocket 概念
    Ajax异步的JavaScript和XML(AsynchronousJavaScriptandXML,Ajax),一种可通过JavaScript来访问的浏览器功能特性,其允许脚本向幕后的网站发送一个HTTP请求而又无需重新加载......
  • 前端面试总结11-WebApi-Ajax
    1.同源策略:ajax请求时,浏览器要求当前网页和serve必须同源(安全),即协议,域名,端口三者必须一致2.可无视同源策略的情况(1:<img/>可用于统计打点,可使用第三方统计服务(2:<link/><......
  • PythonWeb开发
    1.什么是Flask?有什么优点?2.Django和Flask有什么区别?3.Flask-WTF是什么,有什么特点?4.Flask脚本的常用方式是什么?5.如何在Flask中访问会话?6.解释PythonFlask中的数据......
  • python 生成伪随机数函数 random
    """random函数:出一个伪随机数具体怎么做?一般我们会考虑先查找python官方自带的文档在IDLE的右上角点击HELP-->PythonDoc(F1)-->点击左上角的索引-->输入我们要......