为什么可以使用new Image,但不能使用new Div或new Span?

12

在我看到的示例中,使用new Image()创建一个新的HTML图像元素,但是当我尝试使用new Div()时却没有支持。这是否有原因,或者在未来有计划添加它?

示例:


var image = new Image();
var div = new Div(); // error

这只是一个猜测。图像本身已经完整,不需要<img>Suff</img>这样的标签。另一方面,<div>几乎总是用作其他内容的容器。 - James A Mohler
@James A Mohler:为什么一个空元素有一个独特的构造函数是有意义的,而一个非空元素没有一个却是没有意义的呢? - BoltClock
3个回答

10

Div类不存在。可以使用函数Document.createElement()创建任何DOM元素:

var div = document.createElement('div');
var img = document.createElement('img');

document.createElement('div') 创建一个新的 HTMLDivElement

new Image() 实际上创建了一个 HTMLImageElement,等同于 document.createElement('img')

出于历史原因,可以使用 new Image() 语法来创建图像。在90年代,Image 对象是所有浏览器中最早实现的动态HTML特性之一,在当前 DOM 甚至发明之前就已被所有浏览器以相同的方式实现(更不必说采用相同的方式实现了)。


3
有5个答案,而你的是唯一一个真正回答了问题的...感谢你。无论如何,我想当某些奇怪的事情发生在Web API上时,人们应该期望历史原因会浮出水面=p - 此外,如果你有一个外部来源支持你的说法,那就太棒了。 - Kyll
2
@Paul Stenne:他们说“Stack Overflow 以来自专家的高质量问答为荣……”至少,这些确实偶尔会出现 :) - BoltClock

2
这是一个好问题,为什么存在那个方法。HTML Living Standard没有回答这个问题(https://html.spec.whatwg.org/multipage/embedded-content.html#dom-image)。它只声明提供了HTMLImageElement的构造函数,除此之外还提供了工厂方法document.createElement('img')
通过这个函数,您可以创建所有的DOM元素,例如document.createElement('div') https://developer.mozilla.org/en-US/docs/Web/API/Document/createElement 我不知道是否会为其他元素实现这些构造函数。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接