图像属性是DOM的一部分吗(jQuery-webkit与其他浏览器不一致)?

图像属性是DOM的一部分吗(jQuery-webkit与其他浏览器不一致)?,jquery,dom,safari,webkit,google-chrome,Jquery,Dom,Safari,Webkit,Google Chrome,我在Chrome和Safari上遇到了一个问题,使用jQuery使用一条图像的宽度进行了一些计算 在中使用我的计算时: $(document).ready(function() { /* some calculations with $("img").width() */ }); 在IE6+和Firefox中一切正常,但在Chrome和Safari:$(img).width()中则不正常,无论图像是否已缓存 使用: $(window).load(function() { /*

我在Chrome和Safari上遇到了一个问题,使用jQuery使用一条图像的宽度进行了一些计算

在中使用我的计算时:

$(document).ready(function() {
    /* some calculations with $("img").width() */
});
在IE6+和Firefox中一切正常,但在Chrome和Safari:$(img).width()中则不正常,无论图像是否已缓存

使用:

$(window).load(function() { 
    /* some calculations with $("img").width() */
});
它适用于上述所有浏览器,但问题是它只有在所有图像完全加载后才会启动

webkit行为是预期的行为,还是有一些webkit/jQuery错误导致图像属性不是DOM的一部分

如果webkit/jQuery有问题:有没有办法让我的脚本比上面提到的解决方案执行得更早


顺便说一下,我没有为图像尺寸使用任何内联属性。

请尝试在img标记中指定尺寸:

<img src="myimg.jpg" alt="" width="300" height="200" />

有关此内容的快速谷歌搜索:


我推断的是,由于没有加载图像,webkit将只返回0作为“未知”大小,直到加载图像为止。明确说明尺寸可能会解决此问题。

尝试在img标签中指定尺寸:

<img src="myimg.jpg" alt="" width="300" height="200" />

有关此内容的快速谷歌搜索:


我推断的是,由于没有加载图像,webkit将只返回0作为“未知”大小,直到加载图像为止。具体说明尺寸可能会解决这个问题。

我觉得这更像是一种黑客方式,但它似乎有效(根据我的测试):


Webkit浏览器仍然会比其他浏览器稍慢一些,因为它是在每个图像完成加载之后进行的,但比等待所有图像加载要快。

我觉得这更像是一种黑客方式,但它似乎可以工作(根据我的测试):


Webkit浏览器仍然会比其他浏览器稍慢一些,因为它是在每个图像完成加载之后,但比等待所有图像加载要快。

我不喜欢将应该在服务器上处理的任务卸载到客户端

真正的解决方案是在将图像添加到数据库时计算图像大小,然后在将其发送到客户端之前,使用宽度和高度属性正确生成标记

与最初将其上传到数据库的过程相比,初始计算(以及之后从数据库中提取值)中产生的任何开销都是微不足道的——更不用说以后每次检索了


结果是一个语义上有意义的HTML标记,可以在您关心的所有浏览器中与jQuery一起使用,那么为什么要避免它呢?

我不喜欢将应该在服务器上处理的任务卸载到客户端

真正的解决方案是在将图像添加到数据库时计算图像大小,然后在将其发送到客户端之前,使用宽度和高度属性正确生成标记

与最初将其上传到数据库的过程相比,初始计算(以及之后从数据库中提取值)中产生的任何开销都是微不足道的——更不用说以后每次检索了


结果是一个语义上有意义的HTML标记,在您关心的所有浏览器中与jQuery一起工作,那么为什么要避免它呢?

我发现在使用.load()动态加载图像时可以指定图像大小,我使用带有回调的图像加载函数

loadImage: function(src, callback){
  $("<img alt="" />").attr("src", src).load(callback);
}
现在我可以得到正确的宽度和高度,例如

var contentWidth = $("#img").attr("width");

当使用.load()动态加载图像时,我发现了这种指定图像大小的方法,我使用带有回调的图像加载函数

loadImage: function(src, callback){
  $("<img alt="" />").attr("src", src).load(callback);
}
现在我可以得到正确的宽度和高度,例如

var contentWidth = $("#img").attr("width");

谢谢,这确实也可以,但它不允许从数据库中动态添加图片;如果可以避免(避免开销),我不想在显示图片之前用php计算每个图像的大小。您可以预先计算图像大小并将其存储在数据库中(如果可以/需要)。我手头没有webkit浏览器(我正在工作),所以我无法尝试构建一个测试用例进行调试。如果可能的话,我希望在客户端解决所有问题。谢谢,这确实很有效,但它不允许从数据库动态添加图片;如果可以避免(避免开销),我不想在显示图片之前用php计算每个图像的大小。您可以预先计算图像大小并将其存储在数据库中(如果可以/需要)。我手头没有webkit浏览器(我正在工作),所以我无法尝试构建测试用例进行调试。如果可能的话,我希望在客户端解决所有问题。很好。不过,我还是有点惊讶IE6+和Firefox在加载DOM而webkit没有加载的情况下具有可用的图像属性。由于发送到浏览器的信息是相同的,我认为webkit也在某个地方找到了它。很好。不过,我还是有点惊讶IE6+和Firefox在加载DOM而webkit没有加载的情况下具有可用的图像属性。由于发送到浏览器的信息是相同的,我想webkit也在某处找到了它。谢谢你的回答。但是,我认为回调是在图像完全加载时执行的,因此基本上会给出与使用
$(window).load(function()
function.Yes)相同的结果,只是我不能使用$(window).load()在我的例子中,因为我在用户操作中加载图像,而不是在一系列精心编制的脚本中。谢谢你的回答。但是,我认为回调是在图像完全加载时执行的,因此基本上会给出与使用
$(window).load(function()
function.Yes相同的结果,只是我不能使用$(window).load()在我的例子中,因为我在用户操作上加载图像,而不是在一系列精心编制的脚本中。