clientWidth和clientHeight总是返回零为ie7
我不知道为什么,但clientWidth和clientHeight总是返回零,当我从IE9运行IE9 compat查看,或IE7。它适用于其他一切。 非常简单的代码片段有问题的(所以你可以尝试它太): http://jsfiddle.net/nz2DA/clientWidth和clientHeight总是返回零为ie7
上面找到的代码片段如下... 我有一个包含以下HTML代码段的页面:
<div id='aaa'>aaaaaa</div>
而且我的JavaScript测试clientWidth和clientHeight功能如下:
var el = $('#aaa')[0];
alert('Client width and height: '+ el.clientWidth + ' X ' + el.clientHeight);
这总是弹出一个警告“0×0”,当我在IE7或IE9比较运行适应性模式。
任何帮助或解释真的不胜感激。谢谢!
我测试了你的代码,以下是观察结果。如果你没有为“aaa”元素应用任何样式,IE将不会计算任何宽度和高度。所以JS只给你0.但是,如果你从IE开发工具栏看盒子模型,你会看到一些价值。所以如果你使用float:left
来指定那个元素,JS会返回一个值,这是正确的,所有的浏览器都会给你相同的输出。
由于您使用的是jQuery,为什么不使用width()
或outerWidth()
或innerWidth()
。这些方法适用于所有浏览器。只需使用width()
,您将看到非常大的宽度,因为您没有应用任何样式。在IE中,如果元素没有浮点值,它会得到它的父宽度。在你的情况下,它是窗口宽度。
所以,如果我修改代码以获得正确的宽度和高度应该是:
HTML:
<div id="aaa" style="float:left;">aaaaaa</div>
JS:
var el = $('#aaa')[0];
alert('Client width and height: '+ el.clientWidth + ' X ' + el.clientHeight);
请让我知道如果你需要进一步澄清... 欢呼!
嗨Roshan,感谢您的意见。我遇到的问题是衡量div,而不是改变它的大小。通过添加float:left div改变它的布局和大小。我不幸没有改变布局的奢侈品。不管怎么说,还是要谢谢你! +1为你 – 2013-02-25 13:17:48
你说过:“如果你没有为'aaa'元素应用任何样式,IE将不会计算任何宽度和高度”...我想这就是答案。它不能完成! Aaargh!我会将此标记为答案,直到有人找到解决办法。如果存在! – 2013-02-25 13:19:18
@Foz说,你可以尝试使用'zoom:1',虽然我没有检查它。随时尝试它,让我现在无论它是否工作... – Ryxle 2013-02-26 16:00:21
这是因为IE中的“hasLayout”属性,你的div本身没有“布局”。欲了解更多信息,请参阅http://www.satzansatz.de/cssd/onhavinglayout.html
幸运的是,你可以触发一个元素都有布局,这就是为什么添加“浮动:左”的风格在上面的回答工作。还有其他触发器可以使用,但不会更改页面。这一次给了我正确的价值观为clientWidth和clientHeight:
<div id="aaa" style="zoom: 1">aaaaaa</div>
文章说,设置“最小宽度:0”也应该工作,但它确实不适合我。设置“display:inline-block”工作正常,但这可能会改变你的页面。您可以在CSS中设置这些触发器,以便根本不需要更改HTML。
不错的一个!这工作。见:http://jsfiddle.net/nz2DA/1/因为@ Roshan.Ind首先给出了答案。我会离开他作为答案,但+1为你提供解决方案!谢谢 – 2013-03-05 11:23:05
伟大的答案! +1 – 2014-09-09 21:03:49
尝试offsetHeight Internet Explorer的属性。
所以,我找到了解决办法。我可以使用offsetWidth和offsetHeight来获得这些尺寸。我没有发布这个解决方案,因为它不是一个真正的解决方案,而是一个解决方案。 – 2012-08-03 09:53:41
等待$(document).ready(function(){....})也不起作用。我也知道jquery函数返回高度和宽度,但我想知道是否有修复这些特定的属性。 – 2012-08-03 10:03:15