我有一个图像,我将动态填充src稍后与javascript,但为了方便,我希望图像标签存在于页面加载,但只是不显示任何东西。我知道<img src= " />是无效的,那么最好的方法是什么?


当前回答

正如评论中所写的,这种方法是错误的。

我没有找到这个答案之前,但根据W3规范有效的空src标签将是一个锚链接#。

示例:src="#", src="#empty"

页面验证成功,没有发出额外的请求。

其他回答

我有段时间没这么做了,但我也经历过一次。

<img src="about:blank" alt="" />

是我最喜欢的—//:0表示您将尝试在端口0 (tcpmux端口?)上与原始服务器建立HTTP/HTTPS连接—这可能是无害的,但我宁愿不这样做。哎呀,浏览器可能只看到端口0,甚至不发送请求。但我还是不希望你这么说因为这可能不是你想说的。

无论如何,在我测试的所有浏览器中,about:blank的渲染实际上都非常快。我只是把它扔到W3C验证器中,它没有抱怨,所以它甚至可能是有效的。

编辑:不要这样做;它不能在所有浏览器上工作(它会显示一个“破碎的图像”图标,正如在这个答案的评论中指出的那样)。使用<img src='data:…下面的解决方案。或者如果你不关心有效性,但仍然想避免对服务器的多余请求,你可以执行<img alt="" />,不带src属性。但这是无效的HTML,所以要小心选择。

Test Page显示了一大堆不同的方法:http://desk.nu/blank_image.php—提供了各种不同的文档类型和内容类型。-正如下面评论中提到的,使用Mark Ormston的新测试页面:http://memso.com/Test/BlankImage.html

我发现,简单地将src设置为一个空字符串,并在CSS中添加一个规则来隐藏损坏的图像图标就可以了。

[src=''] {
    visibility: hidden;
}

正如评论中所写的,这种方法是错误的。

我没有找到这个答案之前,但根据W3规范有效的空src标签将是一个锚链接#。

示例:src="#", src="#empty"

页面验证成功,没有发出额外的请求。

虽然没有有效的方法来忽略图像的源,但有一些源不会导致服务器故障。我最近有一个类似的问题与iframes和确定//:0是最好的选择。不,真的!

以//开头(省略协议)导致使用当前页面的协议,防止HTTPS页面中的“不安全内容”警告。没有必要跳过主机名,但可以使其更短。最后,端口为:0确保服务器请求不能发出(根据规范,这不是一个有效的端口)。

这是我发现的唯一一个在任何浏览器中都没有导致服务器命中或错误消息的URL。通常的选择——javascript:void(0)——如果在通过HTTPS提供服务的页面上使用,会在IE7中导致“不安全内容”警告。任何其他端口都会导致尝试服务器连接,即使是无效地址。(一些浏览器会简单地发出无效的请求并等待它们超时。)

这在Chrome, Safari 5, FF 3.6和IE 6/7/8中进行了测试,但我希望它能在任何浏览器中工作,因为它应该是网络层,可以杀死任何尝试的请求。

我建议动态添加元素,如果使用jQuery或其他JavaScript库,它是相当简单的:

http://api.jquery.com/appendTo/ http://api.jquery.com/prependTo/ http://api.jquery.com/html/

再看看prepend和append。否则,如果你有一个这样的图像标签,你想让它有效,那么你可以考虑使用一个虚拟的图像,如1px透明gif或png。