Javascript 使用X标记创建自定义子元素的正确方法
因此,我知道,使用该选项可以创建HTML中显示的自定义元素,如下所示:Javascript 使用X标记创建自定义子元素的正确方法,javascript,html,web-component,x-tag,Javascript,Html,Web Component,X Tag,因此,我知道,使用该选项可以创建HTML中显示的自定义元素,如下所示: <x-my-custom-element>my content</x-my-custom-element> <x-my-custom-element> <x-my-custom-element-child> <x-my-custom-element-grandchild></x-my-custom-element-grandchild
<x-my-custom-element>my content</x-my-custom-element>
<x-my-custom-element>
<x-my-custom-element-child>
<x-my-custom-element-grandchild></x-my-custom-element-grandchild>
</x-my-custom-element-child>
</x-my-custom-element>
还有,有没有办法强制子元素始终是另一个元素的子元素?换言之,这将起作用:
<x-my-custom-element-parent>
<x-my-custom-element-child></x-my-custom-element-child>
</x-my-custom-element-parent>
但这不会:
<x-my-custom-element-child>
<x-my-custom-element-parent></x-my-custom-element-parent>
</x-my-custom-element-child>
不能在同一原型中注册3个不同的自定义元素 因此,您需要创建3个不同的原型,例如使用
Object.create()
:
然后调用regsiter()
方法
关于第二个问题,在创建附加元素时,您需要控制自定义元素的内容。您不能在同一原型中注册3个不同的自定义元素 因此,您需要创建3个不同的原型,例如使用
Object.create()
:
然后调用regsiter()
方法
关于第二个问题,在创建附加元素时,您需要控制自定义元素的内容。因为您的自定义元素名称是有效的(包含一个“破折号”
-
字符),如果需要添加功能,您只需使用xtag.register()
注册它们,属性、默认内容、阴影DOM等。名称无法识别但有效的元素将只是HTMLElement
对象。名称无法识别且无效的元素将成为htmlunknowneelement
对象
// valid custom element name
document.createElement('foo-bar') instanceof HTMLElement; // true
// invalid custom element name
document.createElement('foobar') instanceof HTMLUnknownElement; // true
你可以看报纸
我不知道如何强制元素层次结构。标准HTML元素不强制执行此操作。例如,您可以执行
和
。如果使用不当,这些元素就无法正常工作。因为自定义元素名是有效的(包含“破折号”-
字符),如果需要添加功能、属性、默认内容、阴影DOM、,等。名称无法识别但有效的元素将只是HTMLElement
对象。名称无法识别且无效的元素将成为htmlunknowneelement
对象
// valid custom element name
document.createElement('foo-bar') instanceof HTMLElement; // true
// invalid custom element name
document.createElement('foobar') instanceof HTMLUnknownElement; // true
你可以看报纸
我不知道如何强制元素层次结构。标准HTML元素不强制执行此操作。例如,您可以执行
和
。如果像这样使用不当,这些元素就无法正常工作。我指的是web组件库(请参阅更新)。我不太确定你的答案是否与此相符。我指的是web组件库(见更新)。我不太确定你的答案是否与此相符。谢谢。我更新了这个问题,因为x-tag可能不清楚我指的是什么。关于强制合规性,我想控制台。当子元素使用不当时发出警告。但是,我认为我可以在x-tag内部实现这样的功能。@Obinwanehill您可以在插入的生命周期函数中查看父节点的标记名
,如果不是预期的,则执行控制台.warn()
:xtag.register('custom-child',{lifecycle:{inserted(){if('custom-parent'!==this.parentNode.tagName.toLowerCase())控制台。警告('should's child of')})是的,这正是我所想的。谢谢。谢谢。我更新了这个问题,因为x-tag可能不清楚我指的是什么。关于强制合规性,我想控制台。当子元素使用不当时发出警告。但是,我想我可以在x-tag内部实现这样做的功能。@obinwanehill可以在inserted
生命周期函数中查看parentNode
的标记名,如果不是您期望的,则执行console.warn()
:xtag.register('custom-child',{lifecycle:{inserted(){if('custom parent'!==this.parentNode.tagName.toLowerCase())console.warn('should's child of')}}是的,这正是我所想的。谢谢。
// valid custom element name
document.createElement('foo-bar') instanceof HTMLElement; // true
// invalid custom element name
document.createElement('foobar') instanceof HTMLUnknownElement; // true