对于ie7,clientWidth和clientHeight总是返回零
clientWidth and clientHeight always returns zero for ie7
我不知道为什么,但当我在IE9 compat View或IE7中从IE运行此程序时,clientWidth和clientHeight总是返回零。它适用于其他一切。有问题的非常简单的代码片段(这样您也可以尝试一下):http://jsfiddle.net/nz2DA/
上面找到的代码片段如下。。。我有一个包含以下HTML片段的页面:
<div id='aaa'>aaaaaa</div>
我的javascript测试clientWidth和clientHeight函数如下:
var el = $('#aaa')[0];
alert('Client width and height: '+ el.clientWidth + ' X ' + el.clientHeight);
当我在IE7或IE9兼容模式下运行时,这总是会弹出一个带有"0 X 0"的警报。
如有任何帮助或解释,我们将不胜感激。谢谢
之所以会发生这种情况,是因为IE中有"hasLayout"属性,而您的div本身并没有"have layout"。有关详细信息,请参阅http://www.satzansatz.de/cssd/onhavinglayout.html
幸运的是,您可以触发一个元素具有布局,这就是为什么添加"float:left"样式在上面的答案中有效。你也可以使用其他触发器,尽管它们不会改变页面。这个给了我正确的clientWidth和clientHeight:值
<div id="aaa" style="zoom: 1">aaaaaa</div>
这篇文章说,设置"最小宽度:0"也应该有效,但对我来说没有。设置"显示:内联块"还可以,但这可能会改变你的页面。您可以在CSS中设置这些触发器,这样HTML就根本不需要更改。
我测试了您的代码,以下是观察结果。
在IE中(糟透了!),如果你没有为"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);
如果你需要更多的澄清,请告诉我。。。干杯
尝试offsetHeightinternet explorer的属性。
- 节点导出返回一个空对象
- ES6构造函数返回基类的实例
- 监视函数从服务返回不起作用,但作用域函数起作用
- 控制台返回var不是't定义,但它是
- 从函数返回角度承诺
- Javascript返回值只在循环中返回一次
- 从控制器返回后Ajax启动事件激发
- CKFinder 3为所选文件返回错误的URL
- 如何在d3.js中返回路径的y坐标
- 如何从jquery函数返回变量
- Angular js-返回一个包含类似
- JSONP请求返回结果,但也触发error_callback
- 如何使用Spring MVC将Facebook返回的响应数据保存在Java类中
- 从HTTPGET返回一个自定义对象列表,以便在Angular 2应用程序中使用
- JS验证ajax返回的html中的表单数据
- 使用谷歌应用程序脚本将服务器端数据表返回到客户端
- AJAX:$_GET不返回任何值
- Javascript clientHeight在devtools控制台中返回正确的值,但从js返回0
- 对于ie7,clientWidth和clientHeight总是返回零
- 将clientWidth/clientHeight Javascript与webgl一起使用会返回问题