Javascript HTML模板牛犊上的槽和乳头

Javascript HTML模板牛犊上的槽和乳头,javascript,html,web-component,shadow-dom,slot,Javascript,Html,Web Component,Shadow Dom,Slot,是否有人可以确认或向我指出将宿主元素的“slot=”指示符与模板的标记相匹配的规则的建议文档 我非常希望这是一个简单的名称匹配过程,而不管光DOM和阴影DOM中对应插槽的深度/位置如何,但遗憾的是,祖先血统似乎是一个压倒一切的因素。即使名称匹配,灯光DOM中的子插槽也不会填充阴影DOM中的孙子插槽。这是正确的吗 这让我想起了COBOL关于级别的MOVE-CORR规则,但肯定这个限制前提是主页作者非常了解组件的阴影DOM渲染槽不适合使用 浏览器:Chrome 58.0.3029.96(64位) 似

是否有人可以确认或向我指出将宿主元素的“slot=”指示符与模板的
标记相匹配的规则的建议文档

我非常希望这是一个简单的名称匹配过程,而不管光DOM和阴影DOM中对应插槽的深度/位置如何,但遗憾的是,祖先血统似乎是一个压倒一切的因素。即使名称匹配,灯光DOM中的子插槽也不会填充阴影DOM中的孙子插槽。这是正确的吗

这让我想起了COBOL关于级别的MOVE-CORR规则,但肯定这个限制前提是主页作者非常了解组件的阴影DOM渲染槽不适合使用

浏览器:Chrome 58.0.3029.96(64位)

似乎在说,只要根还可以,后代深度就不应该成为问题。还是我看错了

例如:

<!DOCTYPE html>
<html>
<head>
<template id="contact-template">
    <style>
        :host { border: solid 1px #ccc; border-radius: 0.5rem; padding: 0.5rem; margin: 0.5rem; }
        b { display: inline-block; width: 5rem; }
    </style>
    <b>HELLO</b><br/>
    <b>Name</b>: <slot name="fullName"><slot name="firstName"></slot> <slot name="lastName"></slot></slot><br>
    <b>Email</b>: <slot name="email">Unknown</slot><br>
    <b>Address</b>: <slot name="address">Unknown</slot>
    <slot></slot>
</template>
<script>
window.addEventListener('DOMContentLoaded', function () {
  var contacts = document.getElementById('contacts').children;
    var template = document.getElementById('contact-template').content;
    alert("Hello"+contacts.length);
        document.getElementById("d").attachShadow({mode: 'open'}).appendChild(template.cloneNode(true));

    return;

    for (var i = 0; i < contacts.length; i++)
        contacts[i].attachShadow({mode: 'open'}).appendChild(template.cloneNode(true));
});
</script>
</head>
<body onload="load()">

<p id="demo">Click the button to change the text in this paragraph.</p>

<button onclick="myFunction()">Try it</button>
<div id="contacts">
<div id="d">
<span slot="email">span it</span>
  <div name="removeToWork">
        <div slot="fullName">Commit Queue</div>
        (<a slot="email" href="mailto:commit-queue@webkit.org">commit-queue@webkit.org</a>)<br>
        <span slot="address">One Infinite Loop, Cupertino, CA 95014</span>
  </div>
</div>


<script>
function myFunction() {
    document.getElementById("demo").innerHTML = "Hello World";
}

function load() {

}

</script>

</body>
</html>

:host{边框:实心1px#ccc;边框半径:0.5rem;填充:0.5rem;边距:0.5rem;}
b{显示:内联块;宽度:5rem;}
你好
名称:
电子邮件:未知
地址:不详 addEventListener('DOMContentLoaded',函数(){ var contacts=document.getElementById('contacts').children; var-template=document.getElementById('contact-template')。内容; 警报(“Hello”+contacts.length); document.getElementById(“d”).attachShadow({mode:'open'}).appendChild(template.cloneNode(true)); 返回; 对于(变量i=0;i单击按钮更改此段落中的文本

试试看 跨越它 提交队列 ()
加利福尼亚州库珀蒂诺的一个无限环路,邮编95014 函数myFunction(){ document.getElementById(“demo”).innerHTML=“Hello World”; } 函数加载(){ }
只有当slotable(具有
slot
属性的元素)是影子DOM主机的直接子元素时,才会将其插入影子DOM

从:

  • 对于主机的每个slotable子级,slotable按树顺序运行以下子步骤:
  • 所以孙子孙女不相配

    <div id="host">
      <div slot="s1">Can match</div>
      <div slot="s2">Can match</div>
      <div>
         <div slot="s3">Won't match</div>
      </div>
    </div>
    
    
    相配
    相配
    不匹配
    
    是的,我希望“树顺序”包含递归性。然而,这个例子肯定与您所说的和我个人的经历相矛盾:-摘要/细节元素不是真正的节点/子节点?不要混淆slot元素和slotable元素:直接子元素约束指的是slotable。插槽可以是影子树上的孙子。你这个笨蛋!谢谢你,伙计。更有意义。