JavaScript 中的获取器和设置器概念是你应该理解的那些东西之一。它们在 jQuery 中很不错,因为 API 非常一致,所以一旦你理解了,你基本上就可以猜到各种方法是如何工作的。在最基本的层面上...
设置器 **执行** 某些操作。
获取器返回 **值**。
通常,单个方法可以以两种方式使用。以高度方法为例。
// Used as a "setter" - will set the height
$("#example").height(100);
// Used as a "getter" - will return a value
var theHeight = $("#example").height();
看到区别了吗?设置器在使用该方法时 **传递参数**。获取器 **不传递任何内容**。这就是 jQuery 本身知道该做什么的方式。它只是测试那里是否有参数。如果没有,它就表现得像一个获取器。如果它在那里,它就表现得像一个设置器。这仅仅是一个不错的 API 方便性,而不是使用诸如 getHeight 和 setHeight 之类的单独方法。
值得注意的是,单独使用的获取器不会执行任何操作。
// Useless
$("#example").height();
如果你使用设置器设置变量的值,你将得到返回的 jQuery 对象。
// x will be a jQuery object containing #example
var x = $("#example").height(100);
这可能有点令人困惑,但也是一个保存代码的小技巧。如果你知道你需要缓存该 jQuery 对象并设置其高度,不妨在一行代码中完成它。
查看 CodePen 8ff68485673396d452f650bfb437fb2a,由 Chris Coyier (@chriscoyier) 在 CodePen 上创建
文章中还提到了 box-sizing: border-box;
。 盒子大小 是一个非常有用的 CSS 属性。我强烈建议将其设置在所有元素上,例如
* {
box-sizing: border-box;
}
正如视频中提到的,这也使 jQuery 中的 height()
更加可预测和一致。如果没有设置 border-box,height()
等于 CSS 中的高度属性,或者元素的自然高度减去填充和边框。设置了 border-box
后,height()
恰好是元素在屏幕上占用的高度,包括填充和边框。如果没有设置 border-box
,要获得该高度,你需要在 jQuery 中使用 outerHeight()
。
Chris,
当将盒子大小设置为 border-box 时,.height 仍然不能像 .outerHeight 一样工作。边框未包含在 Chrome 版本 30.0.1599.101 m 的计算中。
这是一个已知问题吗?
我遇到了同样的问题,并决定 height 返回计算后的高度,因此在使用盒子大小时,它将始终与 outerHeight 不同。
“请注意,.height() 将始终返回内容高度,无论 CSS 盒子大小属性的值如何。从 jQuery 1.8 开始,这可能需要检索 CSS 高度加上盒子大小属性,然后在元素具有盒子大小:border-box 时从每个元素中减去任何潜在的边框和填充。为了避免这种损失,请使用 .css( “height” ) 而不是 .height()。” 来自 https://api.jqueryjs.cn/height/
@aimeeavant 谢谢