【问题标题】:img element in HTML: file attribute and src attribute behaves differentlyHTML 中的 img 元素:file 属性和 src 属性的行为不同
【发布时间】:2019-10-03 12:08:15
【问题描述】:

我有一个file 属性,它保存在某个<img id = "one"> 元素上。说file属性包含File type的对象。我有另一个 <img id = "two"> 元素。当我尝试这个时:

document.getElementById('two').src = document.getElementById('one').file

它的行为不同:

document.getElementById('two').file = document.getElementById('one').file

第一行代码返回包含在img one 中的Filestring 表示,第二行代码返回实际的File 对象。这种行为差异是怎么回事?

【问题讨论】:

    标签: html fileapi


    【解决方案1】:

    HTMLImageElements don't have a file attribute,因此当您分配 document.getElementById('two').file 时,您只是在表示 <img id="two"> 的 JavaScript 对象上创建了一个 file 属性。访问该属性,您将取回您输入的File

    但是document.getElementById('two').src 是一个IDL attribute,它反映了img 元素的src 内容属性。 src 内容属性包含图像的地址,因此当您从 JavaScript 访问 src IDL 属性时,您会将文件转换为字符串:

    2.7.1 Reflecting content attributes in IDL attributes

    定义了一些 IDL 属性以反映特定的内容属性。这意味着在获取时,IDL 属性返回内容属性的当前值,在设置时,IDL 属性将内容属性的值更改为给定值。

    [...]

    如果反射 IDL 属性是 USVString 属性,其内容属性被定义为包含 URL,则在获取时,如果内容属性不存在,则 IDL 属性必须返回空字符串。否则,IDL 属性必须解析相对于元素节点文档的内容属性的值,如果成功,则返回结果 URL 字符串。如果解析失败,则必须返回 content 属性的值,并将其转换为 USVString。

    【讨论】:

      【解决方案2】:

      如果要处理文件,请使用<input type="file">,否则不能将“文件”放入<img> 标记中

      【讨论】:

        猜你喜欢
        • 2012-01-12
        • 1970-01-01
        • 1970-01-01
        • 2015-07-16
        • 2014-09-09
        • 2010-10-09
        • 2013-06-14
        • 1970-01-01
        • 2012-06-25
        相关资源
        最近更新 更多