【问题标题】:Can I access custom html tag <component> or <slot> contents我可以访问自定义 html 标签 <component> 或 <slot> 内容吗
【发布时间】:2016-09-22 03:30:20
【问题描述】:

假设我想创建一个自定义 html 元素,例如:

<video-container>
  <video></video>
</video-container>

所以我创建了一个这样的模板:

<div class="wrapper">
   etc..
   <content></content>
</div>

然后我通过 HTML 元素原型createdCallback 将其附加到页面。

在该回调中,我希望能够将侦听器附加到 video 元素,以便我可以在 playpause 等上做一些事情。我不清楚是否有任何方法可以访问视频标签传入。我可以访问content 标记,但它不显示任何子节点。这可能吗?

如果我只是抓取整个文档并获取视频元素,我可以访问视频元素,但这很难看,因为我希望能够仅获取当前自定义元素范围内的视频标签。

【问题讨论】:

    标签: javascript html web-component shadow-dom custom-element


    【解决方案1】:

    直接方式

    您应该通过在自定义元素本身上使用 querySelector 来访问它:

    VideoContainerPrototype.createdCallback = function ()
    {
        var video1 = this.querySelector( 'video' ) 
    }
    

    你不需要经过 Shadow DOM。


    影子方式

    但是,如果您想从 Shadow 根中获取它,您可以在 &lt;slot&gt; 元素上使用 assignedNodes() 方法(以前在 &lt;content&gt; 上使用 getDistributedNodes()):

    var video2 = this.shadowRoot.querySelector( 'slot' ).assignedNodes()[1] 
    

    它返回一个插入的节点数组。因为在您的示例中,索引[0] 处有一个文本节点,您必须在[1] 处获取该节点。

    注意:如果您想在索引 [0] 处获取 &lt;video&gt; 元素,也可以使用命名槽。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-22
      • 2011-12-03
      • 1970-01-01
      • 2021-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多