原生JS与jQuery获取宽高方法对比及兼容性分析

作者:小圆点时间:2026-10-28 08:48:12浏览:268

本文对比原生JS与jQuery获取元素宽高的方法,解析width、offsetWidth、innerWidth及outerWidth的计算关系。重点说明各属性在Firefox、Chrome、IE6-9等浏览器中的兼容表现,并指出Chrome首次加载及IE6未设宽高时的特殊行为。

原生JS与jQuery获取宽高方法对比及兼容性分析

说明:由于获取高度的逻辑与宽度一致,下文仅以宽度为例进行阐述。


注意:文中涉及的所有方法与属性返回值均不包含单位。


为便于说明,下文采用以下缩写:



obj -> 在原生JS中表示DOM对象;在JQuery中表示JQuery对象


Width -> obj.style.width


OffsetWidth -> obj.offsetWidth


$width -> obj.width()


$innerWidth -> obj.innerWidth()


$outerWidth -> obj.outerWidth()


padding -> 表示对象的padding-left和padding-right之和


border -> 表示对象的border-left-width和border-right-width之和



原生JS获取宽度的相关属性有 width和offsetWidth。width的获取方法是obj.style.width,只有当对象是通过内嵌方式设定宽度时才能获得,否则返回的是一个空字符串。offsetWidth获得的值跟JQuery中获得对象的outerWidth一样,offsetWidth是非标准的但却得到很好支持的属性。



JQuery获得宽度的方法有width()、innerWidth()、outerWidth()这三种方法。具体使用方式是:obj.width()、obj.innerWidth()、obj.outerWidth()。width()获得的是对象的内容宽度,innerWidth()获得的是对象的内容宽度与填充宽度的和,outerWidth()获得的是包括边框、填充宽度与内容宽度在内的宽度。



这五种方法之间的关系如下:



width = $width;


offsetWidth = border + padding +width;


$innerWidth = padding + width;


$outerWidth = border + padding +width;



这五种方法对firefox、chrome、opera、safari、ie6、ie7、ie8、ie9都兼容,只是存在着两种问题:1、width在没有设定的情况下,chrome在第一次打开页面时,所获取到的宽度全部都是错误的。第二次打开时,结果就跟firefox一致。2、ie6未设定宽高的情况下,不会出现滚动条。

作者最新文章