javascript - 有没有办法获得所有可用的元素?
问题描述
我想为我正在构建的 Web 应用程序获取浏览器支持的所有 html 标记名称。我的意思是这样的:
console.log(getAllElements())
//[a, abbr, acronym, address, applet, area, base, ...]
解决方案
恐怕这真的不可能。让我来告诉你为什么:
首先,我希望所有可能的元素都将由window
对象上的接口表示,例如window.HTMLDivElement
. 这对许多人来说都是正确的,您可以通过执行它来查看结果(为了论证而将 svg 放在一边):
Object.getOwnPropertyNames(window).filter(name => /HTML.*Element/.test(name))
结果数组有两个问题。首先,名称,即使您提取名称并省略HTML
和Element
部分,也与标签名称不同。示例:HTMLDListElement
与<datalist>
. 因此很自然地,人们会尝试实例化该元素以查看它在标记中的表示方式,例如new HTMLDivElement()
,但这是一种禁止的操作!
第二个问题是,并非所有元素都由它们自己的界面表示。有些足够通用,例如<section>
,它们由 generic 表示HTMLElement
,这不会为您提供任何对您的案例有用的信息。
另一种方法是document.createElement
根据其属性来检查任意元素是否真的是原生的。现在这适用于<video>
具有特殊属性的元素,使它们与自定义元素区分开来,但同样,并非每个元素都是这样,<section>
再次以属性为例,它与创建自定义元素几乎没有区别<sssection>
.
所以不,除了检查浏览器对规范的遵守情况并手动列出元素之外,没有其他方法可以真正找到答案。
推荐阅读
- substrate - 我的基板节点没有产生块我该如何解决这个问题?
- python - 每次我通过运行或搜索或使用资源管理器中的工具栏打开命令提示符时,我都想运行 python 脚本或可执行文件
- python - 带有网格和包的 tkinter 框架布局
- microsoft-graph-api - Microsoft Graph API 在线会议删除不起作用
- python - 即使通过了示例测试用例,Dijkstra 算法也不起作用
- mysql - MySQL db 查询 INNER JOIN 并产生一列
- facebook - 如何从 facebook 视频 url 中提取缩略图
- scala - Spark 中的动态 IIF
- forms - Google 应用程序与 Google 搜索引擎的隔离
- deep-learning - 我训练了 pix2code,但无论给出什么图像,它总是输出相同的 DSL 内容