i具有保存在某个<img id = "one">
元素上的file
属性。上述file
属性包含File
类型的对象。我有<img id = "two">
元素的羚羊。当我尝试一下时:
document.getElementById('two').src = document.getElementById('one').file
它的行为不同:
document.getElementById('two').file = document.getElementById('one').file
第一行代码返回img one
中包含的File
的string
表示,第二行代码返回实际File
对象。这种行为差异是什么?
HTMLImageElement
s没有file
属性,因此,当您分配document.getElementById('two').file
时,您只是在代表<img id="two">
的JavaScript对象上创建file
属性。访问该属性,然后您返回您放入的File
。
但是document.getElementById('two').src
是一个IDL属性,它反映了img
元素的src
内容属性。src
内容属性包含图像的地址,因此,当您从JavaScript访问src
IDL属性时,您将文件转换为字符串:
2.7.1反映IDL属性中的内容属性
某些IDL属性被定义为反映特定的内容属性。这意味着在获取时,IDL属性返回内容属性的当前值,并且在设置时,IDL属性将内容属性的值更改为给定值。
[...]
如果反射IDL属性是一个USVString属性,其内容属性被定义为包含URL,则在获取内容属性时,如果没有内容属性,则IDL属性必须返回空字符串。否则,IDL属性必须分析相对于元素节点文档的内容属性的值,如果成功的话,请返回所得的URL字符串。如果解析失败,则必须返回内容属性的值,然后转换为USVString。
如果要使用文件,请使用 <input type="file">
,否则不能将"文件"放入 <img>
tag