window属性:customElements

window.customElements 是一个内置的 Web API,它提供了一组方法来定义和使用自定义元素。这个 API 是 Web Components 规范的一部分,允许开发者创建新的 HTML 标签,这些标签可以拥有自定义的行为和样式。

自定义元素提供了一种强大的方式扩展 HTML,但它们应该谨慎使用,以保持语义化的 HTML 和可访问性。

属性和方法

window.customElements 对象包含以下方法:

  • define(name, constructor):定义一个新的自定义元素。
  • get(name):获取一个已定义的自定义元素的构造函数。
  • whenDefined(name):返回一个 promise,当指定的自定义元素被定义时解析。

define()定义自定义元素

使用 customElements.define() 方法来定义一个新的自定义元素。这个方法接受两个参数:自定义元素的名称和一个继承自 HTMLElement 的构造函数。

※ 自定义元素的构造函数中可以定义生命周期回调方法,如 connectedCallbackdisconnectedCallbackattributeChangedCallback 和 adoptedCallback

// 定义一个新的自定义元素
class MyCustomElement extends HTMLElement {constructor() {super(); // 调用父类的构造函数this.attachShadow({ mode: 'open' }); // 创建 Shadow DOMthis.shadowRoot.innerHTML = `<style>p { color: red; }</style><p> Hello, World! </p>`;}connectedCallback() {console.log('MyCustomElement was inserted into the DOM.');}disconnectedCallback() {console.log('MyCustomElement was removed from the DOM.');}
}// 注册自定义元素
customElements.define('my-custom-element', MyCustomElement);

使用自定义元素

一旦自定义元素被定义,你可以像使用普通 HTML 元素一样在 HTML 文档中使用它。

※  自定义元素的名称必须包含一个连字符(-),这是 Web Components 规范的要求。

  • HTML 中直接使用
<my-custom-element></my-custom-element>
  • JavaScript 中动态创建和使用  
// 创建一个新的自定义元素实例
const myElement = document.createElement('my-custom-element');// 将元素添加到文档中
document.body.appendChild(myElement);
获取自定义元素的构造函数

使用 customElements.get() 方法来获取已定义的自定义元素的构造函数。

const MyCustomElementConstructor = customElements.get('my-custom-element');
const myElementInstance = new MyCustomElementConstructor();
document.body.appendChild(myElementInstance);
等待自定义元素定义完成 

使用 customElements.whenDefined() 方法来获取一个 promise,该 promise 在指定的自定义元素被定义时解析。

customElements.whenDefined('my-custom-element').then(() => {console.log('my-custom-element is defined');// 可以安全地创建和使用 my-custom-elementconst myElement = document.createElement('my-custom-element');document.body.appendChild(myElement);
});

各大浏览器兼容性

  1. Chrome:从 Chrome 36 开始支持。
  2. Firefox:从 Firefox 63 开始支持。
  3. Safari:从 Safari 10 开始支持。
  4. Edge:从 Edge 14 开始支持。
  5. Opera:从 Opera 23 开始支持。

END.

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

[产品管理-59]:项目组合中产品或项目的类型分类: 平台类、支持改进类、衍生类、突破类

目录 一、概述 1、平台型项目&#xff1a;平台产品 2、支持性项目&#xff1a;现有产品的改进&#xff0c;还是现有产品&#xff0c;只不过性能、效率提升。 3、衍生型项目&#xff1a;衍生出来的新产品&#xff0c;不同于现有产品&#xff0c;但与现有产品有关联 4、突破…

Jmeter的安装和使用

使用场景&#xff1a; 我们需要对某个接口进行压力测试&#xff0c;在多线程环境下&#xff0c;服务的抗压能力&#xff1b;还有就是关于分布式开发需要测试多线程环境下数据的唯一性。 解决方案: jmeter官网连接&#xff1a;Apache JMeter - Apache JMeter™ 下载安装包 配…

一文学习Android中的Property

在 Android 系统中&#xff0c;Property 是一种全局的键值对存储系统&#xff0c;允许不同组件和进程间以轻量级的方式进行数据传递。它主要用于系统配置、状态标识等场景&#xff0c;使得不同进程能够通过属性的设置或获取来通信。property 的核心特性是快速、高效&#xff0…

aosp15系统窗口闪屏原生bug-dim图层相关-你会修改吗?

背景 近期各个大厂已经开始准备aosp15的系统rom适配工作了&#xff0c;应该是想2025年初开发发布相关的新机型&#xff0c;所以慢慢的我们也要开始适应aosp15版本的相关问题的修改和研究哈。 近期就有相关学员朋友在做android15相关的dialog开发时候&#xff0c;发现了一个严…

SCUI Admin + Laravel 整合

基于 Vue3 和 Element Plus 和 Laravel 整合开发 项目地址&#xff1a;持续更新 LaravelVueProject: laravel vue3 scui

LeetCode 热题 100之 堆

1.数组中第k个最大元素 和Acwing 786 第k个数一模一样 排序 思路分析1&#xff1a;此题要求时间复杂度未为O(n)。虽然库函数sort和快速排序都能过&#xff0c;但是时间复杂度不满足条件。下面优化快速排序&#xff0c;写一个快速选择算法。我们可以引入随机化来加速这个过程&…

使用SpringBoot+Vue+Echarts制作一个文章贡献度表

使用SpringBootVueEcharts制作一个文章贡献度表 制作博客贡献表 使用了ECharts中的 calendar-effectscatter 组件制作贡献表&#xff1a;点我传送 首先附上完整的vue代码&#xff1a; <template><div id"container" style" width: 100%; height: 30…

使用Matlab建立决策树

综述 除了神经网络模型以外&#xff0c;树模型及基于树的集成学习模型是较为常用的效果较好的预测模型。我们以下先构建一个决策树模型。 决策树算法的优点如下&#xff1a;1、 决策树易于理解和实现&#xff0c;用户在学习过程中不需要了解过多的背景知识&#xff0c;其能够…

LangGPT结构化提示词编写实践

基础任务 如果直接询问大模型strawberry有几个r&#xff0c;大模型会给出错误的答案&#xff1a; 这里我们引入思维连Chain of Thought&#xff0c;我们让大模型遍历一遍单词&#xff0c;每次累加得到最终结果 之前怎么都做不对的题&#xff0c;让大模型一步一步思考&#xf…

开源ISP(Infinite-ISP)介绍

ISP&#xff08;Image Signal Processor&#xff09;我介绍了很多了&#xff0c;大家可以先看下面的文章&#xff0c;了解基本概念&#xff1a; ISP算法及架构分析介绍 谈谈FPGA工程师如何做ISP 图像信号处理器和 Infinite-ISP ISP从图像传感器获取 RAW 像素&#xff0c;并将其…

如何在c++侧编译运行一个aclnn(AOL)算子?

1 AOL算子库 CANN&#xff08;Compute Architecture for Neural Networks&#xff09;提供了算子加速库&#xff08;Ascend Operator Library&#xff0c;简称AOL&#xff09;。该库提供了一系列丰富且深度优化过的高性能算子API&#xff0c;更亲和昇腾AI处理器&#xff0c;调…

三分钟学会Docker基本操作,快速入门容器技术!

如果您时常遭遇以下困境&#xff1a; 被繁琐的应用安装依赖与环境配置耗尽了宝贵时间与精力&#xff1f; 即便严格遵循安装指南&#xff0c;仍频遇障碍&#xff0c;导致应用无法启动&#xff0c;让您倍感挫败与焦虑&#xff1f; 向研发团队反馈安装难题&#xff0c;却只换来“…

快速入门Zookeeper

Zookeeper ZooKeeper作为一个强大的开源分布式协调服务&#xff0c;扮演着分布式系统中至关重要的角色。它提供了一个中心化的服务&#xff0c;用于维护配置信息、命名、提供分布式同步以及提供组服务等。通过其高性能和可靠的特性&#xff0c;ZooKeeper能够确保在复杂的分布式…

uniapp—android原生插件开发(3Android真机调试)

本篇文章从实战角度出发&#xff0c;将UniApp集成新大陆PDA设备RFID的全过程分为四部曲&#xff0c;涵盖环境搭建、插件开发、AAR打包、项目引入和功能调试。通过这份教程&#xff0c;轻松应对安卓原生插件开发与打包需求&#xff01; 一、打包uniapp资源包&#xff1a; 打包…

Windows 11开发环境配置与应用开发

&#x1f4dd;个人主页&#x1f339;&#xff1a;一ge科研小菜鸡-CSDN博客 &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; 1. 引言 Windows 11是微软发布的新一代操作系统&#xff0c;它不仅在视觉和用户体验上进行了革新&#xff0c;还为开发者提供了更…

停车共享小程序ssm+论文源码调试讲解

2 系统关键技术 2.1 微信小程序 微信小程序&#xff0c;简称小程序&#xff0c;英文名Mini Program&#xff0c;是一种全新的连接用户与服务的方式&#xff0c;可以快速访问、快速传播&#xff0c;并具有良好的使用体验。 小程序的主要开发语言是JavaScript&#xff0c;它与普…

【MRAN】情感分析中情态缺失问题的多模态重构和对齐网络

abstract 多模态情感分析&#xff08;MSA&#xff09;旨在通过文本、视觉和声音线索识别情感类别。然而&#xff0c;在现实生活中&#xff0c;由于各种原因&#xff0c;可能会缺少一到两种模式。当文本情态缺失时&#xff0c;由于文本情态比视觉和听觉情态包含更多的语义信息&…

通过 Windows IIS 服务访问腾讯云 CFS 文件系统

互联网信息服务&#xff08;IIS&#xff09;可以像访问本地数据一样访问文件存储&#xff08;Cloud File Storage&#xff0c;CFS&#xff09;系统上的数据&#xff0c;并提供 Web 服务&#xff0c;实现网站存储与计算分离。本文介绍如何配置 IIS 访问 CFS 文件系统。 背景信息…

L7.【LeetCode笔记】相交链表

1.题目 . - 力扣&#xff08;LeetCode&#xff09; 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 题目数据 保证 整个链式结…

Java开发插件:JRebel热部署(最佳实践+激活方式)

使用场景&#xff1a; 在庞大的项目&#xff0c;我们启动项目的时间较长&#xff0c;尤其每次修改完代码要进行测试&#xff0c;就要重新编译启动项目&#xff0c;耗时且繁琐&#xff0c;热部署插件通过设置更新操作&#xff0c;就可以实现快速启动项目&#xff0c;开发效率显…