Javascript 有没有办法获取所有可用元素?

Javascript 有没有办法获取所有可用元素?,javascript,html,dom,Javascript,Html,Dom,我想为我正在构建的web应用程序获取浏览器支持的所有html标记名。我的意思是这样的: console.log(getAllElements()) //[a, abbr, acronym, address, applet, area, base, ...] 不幸的是,如果不使用第三方工具并与浏览器的某些版本号进行匹配,当前的domapi就不可能做到这一点 一般来说,您不应在意,而应退后以确保文档的可访问性 HTML是向后兼容的标准,浏览器只会忽略未知的标记 而是在内部呈现文本。这就是为什么把这

我想为我正在构建的web应用程序获取浏览器支持的所有html标记名。我的意思是这样的:

console.log(getAllElements())
//[a, abbr, acronym, address, applet, area, base, ...]

不幸的是,如果不使用第三方工具并与浏览器的某些版本号进行匹配,当前的domapi就不可能做到这一点

一般来说,您不应在意,而应退后以确保文档的可访问性

HTML是向后兼容的标准,浏览器只会忽略未知的标记 而是在内部呈现文本。这就是为什么把这些 一种退路


很抱歉,您的浏览器不支持嵌入式视频。
相反,您可能希望检查应用程序需要的特定DOM api(服务人员、音频处理…),并实现一些功能
在JS中提供相同的浏览器支持。

我担心这实际上是不可能的。让我告诉你为什么:

首先,我希望所有可能的元素都由
window
对象上的and接口表示,比如
window.htmldevelment
。这对许多人来说都是正确的,您可以通过执行以下命令看到结果(为了参数起见,将svg放在一边):

Object.getOwnPropertyNames(窗口).filter(名称=>/HTML.*.Element/.test(名称))

结果数组存在两个问题。首先,名称,即使您提取名称并省略
HTML
元素
部分,也与标记名称不同。示例:
htmlListElement
vs
。因此,我们自然会尝试实例化该元素,以查看它在标记中的表示方式,如
newhtmldevelment()
,但这是禁止的操作

第二个问题是,并非所有元素都由它们自己的接口表示。有些是足够通用的,比如
,它们由通用的
HTMLElement
表示,它不会提供任何对您的案例有用的信息


另一种方法是使用
document.createElement
根据任意元素的属性检查其是否真的是本机元素。现在它适用于像
这样的元素,这些元素具有特殊的属性,使它们与自定义元素区分开来,但同样,并不是每个元素都是这样的,并且再次以
为例,从属性角度看,它与创建像
这样的自定义元素几乎没有区别


因此,除了检查浏览器是否符合规范并手动列出元素之外,没有其他方法可以真正找到答案。

您的确切意思是什么?所有的元素名?文本节点?我指的是浏览器中所有可用的html标记名,任何人都可以使用web组件创建自己的html元素,因此在当前版本的Firefox、Chrome和Opera中,“可用元素”的概念没有明确的答案,因为您可以在很久以前,在很远很远的web标准中创建自己的元素。。。可以通过访问DTD中声明的所有实体。但它在很久以前就从规范和浏览器中被删除了(HTML5甚至不再有引用所有实体的DTD)“它实际上与创建自定义元素(如)没有区别。”不正确:
document.createElement(“section”)实例HTMLUnknowneElement
->
false
<代码>文档.createElement(“ssection”)实例的HtmlUnknowneElement->
true