自定义元素(custom elements)

记录下自定义html自定义元素的相关心得:

浏览器将自定义元素保留在 DOM 之中,但不会任何语义。除此之外,自定义元素与标准元素都一致

事实上,浏览器提供了一个HTMLUnknownElement,HTMLElement对象,所有自定义元素都是该对象的实例。

   var tabs=document.createElement("tabs");
   console.log(tabs instanceof HTMLUnknownElement);//true
   console.log(tabs instanceof HTMLElement);//true

Custom Elements 标准:“自定义元素的名字必须包含一个破折号(-)
一旦名字之中使用了破折号,自定义元素就不是HTMLUnknownElement的实例了。

 var tabs=document.createElement("my-tabs");
   console.log(tabs instanceof HTMLUnknownElement);//false
   console.log(tabs instanceof HTMLElement);//true

Custom Elements 标准规定了,自定义元素的定义可以使用 ES6 的class语法

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <meta name="Generator" content="EditPlus?">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
  <title>Document</title>
 </head>
 <body>
      <my-element content="Custom Element">
  Hello
</my-element>
 </body>
</html>
<script>

class MyElement extends HTMLElement {//自定义元素的定义可以使用ES6的class语法
  get  content() {
    return this.getAttribute(‘content‘);
  }

  set  content(val) {
    this.setAttribute(‘content‘, val);
  }
}
//原生的window.customElements对象的define方法用来定义 Custom Element。该方法接受两个参数,第一个参数是自定义元素的名字,第二个参数是一个 ES6 的class。
window.customElements.define(‘my-element‘, MyElement);

window.onload=function(){//在页面元素加载完之后,才执行
function customTag(tagName, fn){//Array.from([arguments]);可以将字符串,数组,类数组集合转化为数组
  Array
    .from(document.getElementsByTagName(tagName))
    .forEach(fn);
}
function myElementHandler(element) {
  element.textContent = element.content;
}
customTag(‘my-element‘, myElementHandler);
};
</script>

另外一个比较简单的例子:

<!doctype html>
<html lang="en">
 <head>
  <meta charset="UTF-8">
  <meta name="Generator" content="EditPlus?">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
  <title>Document</title>
  <style>
    greeting{
        display:block;
         font-size:36px;
        color:red;
    }
  </style>
  <script>

  window.onload = function() {
            function customTag(tagName, fn){
            console.log(document.getElementsByTagName("div"));
            Array .from(document.getElementsByTagName(tagName)).forEach(fn);
             }

            function greetingHandler(element) {
              element.innerHTML = ‘你好,世界‘;
            }
            customTag(‘greeting‘, greetingHandler);
    }
</script>
 </head>
 <body>
 <div></div>
        <greeting>Hello World</greeting>
        <greeting>Hello World</greeting>
        <greeting>Hello World</greeting>
 </body>
</html>

其实更关心的是,HTML组件的开发,这是一个很好的雏儿。

https://developer.mozilla.org/en-US/docs/Web/JavaScript

时间: 2024-10-20 20:57:36

自定义元素(custom elements)的相关文章

使用 custom element 创建自定义元素

很早我们就可以在 HTML 文档中写 <custome-element></custom-element> 这样的自定义名称标签.但是浏览器对于不认识的标签一律当成一个普通的行内元素处理,没有相关语义.虽然我们能用 JavaScript 代码给它添加一些功能,但是并没有生命周期相关的函数供我们做一些初始化和销毁的处理. 通过浏览器提供的 Custom elements api 我们能定义一个自定义元素,并且告知 HTML 解析器如何正确地构造一个元素,以及在该元素的属性变化时执行相

使用custom elements和Shadow DOM自定义标签

具体的api我就不写 官网上面多  如果不知道这个的话也可以搜索一下 目前感觉这个还是相当好用的直接上码. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"&g

Web Components之Custom Elements

什么是Web Component? Web Components 包含了多种不同的技术.你可以把Web Components当做是用一系列的Web技术创建的.可重用的用户界面组件的统称.Web Components使开发人员拥有扩展浏览器标签的能力,可以自由的进行定制组件.但截至本文时间,Web Components依然是W3C工作组的一个草案,并为被正式纳入标准,但这并不妨碍我们去学习它. Web组件 何为Web组件?Web组件相对于Web开发者来说并不陌生,Web组件是一套封装好的HTML,

自定义元素–为你的HTML代码定义新元素

注意:这篇文章介绍的 API 尚未完全标准化,并且仍在变动中,在项目中使用这些实验性 API 时请务必谨慎. 引言 现在的 web 严重缺乏表达能力.你只要瞧一眼“现代”的 web 应用,比如 GMail,就会明白我的意思: 堆砌 <div> 一点都不现代.然而可悲的是,这就是我们构建 web 应用的方式.在现有基础上我们不应该有更高的追求吗? 您还可以参考以下HTML5/CSS3相关文章:<使用CSS3开启GPU硬件加速提升网站动画渲染性能><HTML5 WebSocket

magento自定义选项Custom Options Replicator怎么使用?

magento自定义选项Custom Options Replicator,是用于在后台产品操作中,将某一个产品的自定义选项复制到指定的产品中. 那要怎么用呢? 选中需要被复制的产品3.右上角选择"copy sustom options"4.填入范本产品的"ID" 狂点submit等着瞧吧! magento自定义选项Custom Options Replicator怎么使用?

Knockoutjs:Component and Custom Elements(翻译文章)

Knockoutjs 的Components 是一种自定义的组件,它以一种强大.简介的方式将你自己的ui代码组织成一种单独的.可重用的模块,自定义的组件(Component)有以下特点: 1.可以替代单独的widgit或者控制逻辑,或者你自己application的整个模块: 2.包含自己的view,通常也包含了自己的viewModel(这个viewModel也可以不进行定义) 3.可以预加载,可以通过AMD或者其他模块系统的方式根据需要异步加载 4.可以接收参数,根据需要选择性的对这些参数进行

Cypress 系列之----03自定义命令Custom Commands

// *********************************************** //本篇主要针对创建各种自定义命令,重写命令,官方参考资料:https://on.cypress.io/custom-commands // // *********************************************** // -- This is a parent command --父命令,用cy可以直接调用 // Cypress.Commands.add('login

Javascript 自定义事件 (custom event)

Javascript 中经常会用到自定义事件.如何创建一个简单的自定义事件呢?在创建自定义的事件之前,我们应该考虑一下和事件有关的东西.例如 click 事件,首先我们要能注册一个click事件(在一个button上绑定click事件),然后要能够触发这个事件,最后事件不需要的时候要能够移除事件. 我们可以借助JQuery 的方法来实现自定义事件,请看下面的例子: <div id="myDiv">myDiv</div> <script type="

vue15 自定义元素指令、标签指令

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>智能社--http://www.zhinengshe.com</title> <meta name="viewport" content="width=device-width, initial-scale=1.0, ma