jQuery 1.8外部高度/宽度不工作

jQuery 1.8外部高度/宽度不工作,jquery,height,jquery-1.8,Jquery,Height,Jquery 1.8,我在很多地方都使用了户外灯和户外灯。现在,在jQuery1.8发布之后,我遇到了很多由对象返回而不是其大小引起的问题 例如: $('#stackoverflowdiv').Height() // returns 100 px $('#stackoverflowdiv').outerHeight() // returns "stackoverflowdiv" div 我发现唯一可以解决这个问题的方法是在函数中使用“true/false”,如下所示,但我得到的结果与标准的width()和

我在很多地方都使用了
户外灯
户外灯
。现在,在jQuery1.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中选择元素造成的。我将尝试制作一个演示

outerHeight
只返回一个整数或
null

返回元素的高度,包括顶部和底部填充, 边框,可选边距,以像素为单位。如果在空的 元素,返回未定义(jQuery 3.0之前为null)

您的代码中一定有其他内容在对输出进行进一步处理,并使您看到div元素。

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

-工作高度方法

上面的演示使用了一个div:

<div id="myDiv">My Div</div>
使用此脚本:

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("<br />height with padding: " + heightWithPadding);
$result.append("<br />height with padding and borders: " + heightWithPaddingAndBorder);
$result.append("<br />height with padding and borders and margin: " + heightWithPaddingAndBorderAndMargin);

在没有看到html和css的情况下,我不能确定它是否正常工作,但是您可以检查并检查它在jQuery1.8.0上是否正常工作

jQuery:

console.log($('#stackoverflowdiv').outerHeight(false));//returns 110
console.log($('#stackoverflowdiv').outerHeight(true));//returns 130
#stackoverflowdiv { 
      height:100px; 
      margin:10px 5px; 
      padding:5px; 
      border 2px solid #fff;
}​
css:

console.log($('#stackoverflowdiv').outerHeight(false));//returns 110
console.log($('#stackoverflowdiv').outerHeight(true));//returns 130
#stackoverflowdiv { 
      height:100px; 
      margin:10px 5px; 
      padding:5px; 
      border 2px solid #fff;
}​

是否确实忘记使用分号或定义
文档。就绪
?或者更糟糕的是,忘记定义
边距
边框

这实际上是一个已知的jQuery bug,您可以阅读

我在没有参数的情况下遇到了这种情况,修复程序正在设置参数(尽管有一个默认的{false}),但是我能够通过将true参数替换为1,将false替换为0来打破Barlas的把戏。所以,如果你是,就不要这样做

这样做:

alert(jQuery(this).outerHeight(false));
不要这样做:

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

仅当我执行
.outerHeight(1)时,它才起作用
.outerHeight(真)

最佳修复方法是在调用
outerHeight
outerWidth
时传递布尔参数
true
false

但是..

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

var oldOuterHeight =  $.fn.outerHeight;

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

我想这可能是因为我正在使用contents()函数在iFrame中选择元素。我将对此进行测试。这似乎是您的代码的一个非常本地化的问题,因为jQuery的1.8高度/宽度方法的行为与预期的一样。如果有什么不同的话,1.8版本为这些方法添加了新功能,并解决/修复了几个问题。请参阅1.8修复程序中的一些标记:,,这个问题是因为jquery uiI的旧版本看到了相同的行为,如在外径/高度断开并返回元素,而不是数字。这个问题不应该结束。主持人干得好。新问题:这不应该关闭。我在将JQuery从1.7.2升级到1.9.1时遇到了JQuery工具提示插件的问题。将
outerWidth()
更改为
outerWidth(false)
并将
outerwight()
更改为
outerwight(true)
后,效果良好。当jquery tokeninput开始在错误的位置呈现下拉列表时,我遇到了这个问题。我追溯到一个outerHeight方法,并通过传递false来解决它。我还尝试删除jquery-ui-1.8.20,这也解决了这个问题-现在我将升级jquery ui,看看它是否与jquery的较新版本交互。在我的例子中,jquery tokeninput在升级到jquery 1.8及更高版本后中断。