我试图在 </body> 之前使用以下代码获取元素宽度

<script type="text/javascript" charset="utf-8">
    $(document).ready(function(){
        var diff = $('div.canvas img.photo').get(1).width;
        console.log(diff);
    });
</script>

但它记录未定义。但是,如果我直接在 Chrome/Firebug 控制台中运行 $('div.canvas img.photo').get(1).width,它会返回正确的宽度。图像没有用 Javascript 加载,所以应该在文档准备好触发时就位。我究竟做错了什么?

最佳答案

不,不应该。 document.ready 在所有 HTML 加载完毕后触发,但未加载图像。如果要等到所有图像都加载完毕,请使用 window.load。

例子:

$(window).load(function(){
    var diff = $('div.canvas img.photo').get(1).width;
    console.log(diff);
});

此外,正如某些人指出的那样,您试图两次获得“.width”属性。

如果可能,请在 CSS 中为图像标签设置一个宽度。这样,您就可以安全地将 document.ready 用于您的代码。使用 window.load 自然会延迟脚本的执行,可能是 1 秒,也可能是 10 秒,具体取决于客户端连接的速度和页面上的内容量。如果您执行任何造型,这可能会导致不必要的跳跃和抖动。

关于javascript - 文档准备好时未定义元素宽度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9077960/

10-10 18:53
查看更多