所以我有了这个元素,我需要获得width()
和height()
,但它会一直返回0,但是当我在控制台中输入$('#lightingData').width()
时,它会给出我是正确的价值观。我想我需要使用其他一些包装函数,我尝试过$(document).ready(function() {...});
和$(window).load(function(){...});
还有其他包装函数会在执行之前等待更长时间吗?
答案 0 :(得分:2)
如果#lightningData
元素在display:none
被触发并且您的代码已执行时onload
widht()
,则height()
和.show()
将返回0.您可以显式调用检查尺寸
$('#lightingData').show().width();
{{1}}
答案 1 :(得分:2)
您可以尝试的其中一件事是在尝试调用.width()
和.height()
之前明确等待加载该特定元素。
试试这个:
$('#lightingData').load(function() {
...height and width manipulation here...
...don't forget about scope...
});
您应该将其放在$(document).ready(...)
内,因为您希望文档至少知道$('#lightingData')
是什么。因为0
和height
获得width
而不是错误,所以我可以假设在调用方法之前至少找到它们。
更新
根据@Ian添加的评论,我想指出这只适用于某些类型的元素(URL,IFrame,图像/媒体等 - 基本上任何需要加载其内容的东西)。我不打算更新代码,因为如果你将它用于其中一种元素,我上面的代码是正确的,如果你将它用于另一种元素,那将是愚蠢的。如果您同时使用它,则只需添加条件/过滤器(基于您的实现)以确定此代码是否应绑定到该特定元素。
答案 2 :(得分:0)
如果您100%确定$(文件).ready()
点的宽度仍为0试试这个:
$(function () {
$('#lightingData').show(function(e) {
var width = $(this).width();
//do something
});
});
或者,有些愚蠢,但对90%的情况都有效:
$(function() {
setInterval(function () {
var width = $('#lightingData').width();
//do something
}, 1000);
});
这个将在$(文件).ready()。
之后将动作延迟1秒如果没有确切的方案,很难给出指定的解决方案。