jQuery 1.8外部高度/宽度不起作用

我在很多地方使用了outerHeightouterWidth 。 现在,在jQuery 1.8发布之后,我遇到了很多由对象返回而不是它的大小引起的问题。

例如:

 $('#stackoverflowdiv').Height() // returns 100 px $('#stackoverflowdiv').outerHeight() // returns "stackoverflowdiv" div 

我发现解决这个问题的唯一方法就是在函数中使用“true / false”,如下所示,但我得到的结果与标准的width()height()函数相同:

 $('#stackoverflowdiv').outerHeight(true) // returns 100 px $('#stackoverflowdiv').outerHeight(false) // returns 100 px 

有谁知道为什么这不再工作或以其他方式获得元素的高度/宽度+其边距。

编辑:我开始相信这是因为我使用contents()函数在iframe中选择元素。 我会尝试做一个演示。

这实际上是一个已知的jQuery错误 ,你可以在这里阅读。

我正在体验它没有参数,修复是设置参数(即使有一个默认的{false}),但我能够通过用1替换true参数并用0替换false来打破Barlas的小提琴。所以不要’如果你这样做的话。

做这个:

 alert(jQuery(this).outerHeight(false)); 

不要这样做:

 alert(jQuery(this).outerHeight()); alert(jQuery(this).outerHeight(0)); 

只有我这样才能工作.outerHeight(1);.outerHeight(true);

最好的解决方法是在调用outerHeightouterWidth时传递布尔参数truefalse

但..

如果您无权访问调用outerHeight文件或者您不想编辑文件中的所有outerHeight函数,则可以覆盖jQuery outerHeight函数,如下所示,使其始终传递true参数

 var oldOuterHeight = $.fn.outerHeight; $.fn.outerHeight = function () { return oldOuterHeight.apply(this, [true]); }; 

JQuery 1.8 height() innerHeight()outerHeight()以及outerHeight(true)按预期工作:

演示 – 工作高度方法

上面的演示使用div:

 
My Div

使用以下CSS:

 div{ border: 1px solid blue; padding: 5px; margin: 10px; } 

使用此脚本:

 var $div = $("#myDiv"); var height = $div.height(); var heightWithPadding = $div.innerHeight(); var heightWithPaddingAndBorder = $div.outerHeight(); var heightWithPaddingAndBorderAndMargin = $div.outerHeight(true); var $result = $("#result"); $result.append("height: " + height); $result.append("
height with padding: " + heightWithPadding); $result.append("
height with padding and borders: " + heightWithPaddingAndBorder); $result.append("
height with padding and borders and margin: " + heightWithPaddingAndBorderAndMargin);

导致以下结果:

 height: 20 height with padding: 30 height with padding and borders: 32 height with padding and borders and margin: 52 

它工作得很好,我不能确定没有看到你的html和css但你可以检查这个例子并检查它在jQuery 1.8.0上工作正常

这是工作jsFiddle。

jQuery的:

 console.log($('#stackoverflowdiv').outerHeight(false));//returns 110 console.log($('#stackoverflowdiv').outerHeight(true));//returns 130 

CSS:

 #stackoverflowdiv { height:100px; margin:10px 5px; padding:5px; border 2px solid #fff; }​ 

你确定忘了使用分号或定义document.ready吗? 或者更糟糕的是忘了定义marginborder

outerHeight只根据jQuery DOC返回一个整数或null

您的代码中必须有其他东西与您的输出相关,并让您看到div元素。