Javascript webcomponents中允许的页面上的非唯一ID

Javascript webcomponents中允许的页面上的非唯一ID,javascript,dom,web-component,Javascript,Dom,Web Component,web组件中是否允许使用非唯一的DOM元素ID?我知道这些在不同的文档中是允许的,但我在youtube.com上遇到了这个问题。具体来说,所有边栏元素都有id“endpoint”,每个元素都有相同的ownerDocument(window.document)它们是“允许的”,因为浏览器会处理它,但它们不能正常工作。id属性必须是每个文档唯一的。如果您的web组件使用影子dom,那么在该影子dom中,您可以使用文档中出现的ID(因为您无法从外部查询影子dom),但鉴于您的web组件完全处于其自身内

web组件中是否允许使用非唯一的DOM元素ID?我知道这些在不同的文档中是允许的,但我在youtube.com上遇到了这个问题。具体来说,所有边栏元素都有id“endpoint”,每个元素都有相同的
ownerDocument
(window.document)

它们是“允许的”,因为浏览器会处理它,但它们不能正常工作。
id
属性必须是每个文档唯一的。如果您的web组件使用影子dom,那么在该影子dom中,您可以使用文档中出现的ID(因为您无法从外部查询影子dom),但鉴于您的web组件完全处于其自身内容的控制之下,它应该已经确切地知道它们需要访问的元素的位置。不需要在阴影dom中进行查询选择,使用普通节点api函数构建阴影dom,并将它们缓存到web组件的作用域中。错误。从Internet Explorer早期为所有ID值创建全局变量开始,重复ID就一直有效。许多月前,所有浏览器供应商都复制了这种行为,因为一旦微软拥有90%的浏览器市场,所有浏览器都必须支持基于这种(微软)ID行为编写的Web应用程序。今天,除了FireFox之外,所有浏览器仍然为重复的ID创建一个完全有效的全局ID数组
this.shadowRoot.querySelectorAll(“#foo”)
将返回shadowDOM中ID=foo相同的所有元素。。。但这些不会产生任何变量!对,似乎我在youtube.com上的webcomponents中找不到影子根,document.querySelectorAll(“#endpoint”)给了我一个元素数组。安全地假设没有影子根,youtube只是忽略了由?Yes文档设置的id唯一性
querySelector/getElementById
查询主DOM,它无法查询shadowRoots