jQuery 的 width() 函数的 Javascript 等价物是啥?

Posted

技术标签:

【中文标题】jQuery 的 width() 函数的 Javascript 等价物是啥?【英文标题】:What is the Javascript equivalent for jQuery's width() function?jQuery 的 width() 函数的 Javascript 等价物是什么? 【发布时间】:2011-10-14 22:37:29 【问题描述】:

我希望能够计算宽度 css 属性设置为 'auto' 的元素的宽度(以像素为单位)。

我尝试了element.style.width,但没有成功,因为它返回了'auto'。我注意到 jQuery 函数 width() 返回以 px 为单位的长度,但我无法使用 jQuery 来解决这个问题,因为它在我的页面中不可用。那么,有人知道 jQuery width() 的等效方法吗?

谢谢。

【问题讨论】:

可能相关:Quick resource to learn more about all the JS height's. jQuery source 中的getWH() 函数将揭示实现。 (使用name = "width" 调用。) 【参考方案1】:

jQuery 使用...

element.getBoundingClientRect().width

在内部,它还有一些其他的东西来处理浏览器的差异。

它返回一个元素呈现的大小,其中 .offsetxx 根据盒子模型返回大小。

element.getBoundingClientRect()

是获取元素“真实”尺寸的最准确方法。

这是 John Resig(jQuery 的作者)关于此事的帖子。

http://ejohn.org/blog/getboundingclientrect-is-awesome/

【讨论】:

实际上,$el.width()$el.outerWidth() 经常给我零,而el.getBoundingClientRect().width 给我正确的值,在最新的 Firefox 和 Chrome 上,使用 jQuery 2.1.4【参考方案2】:

在这上面浪费了 2 个小时。 对于我的情况,其他答案不起作用,因此将其他答案和我的发现与示例合并到一篇文章中,以便于阅读:

对于像select 这样的元素,JQuery 中的width()javascript 中的clientWidth 相同。

下面的示例代码,包括输出:

// Add jQuery library in html:
//   <head>
//       <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
//   </head>

let eleId = 'myselectid1';    // NOTE: Provide your element id below

// jQuery
console.log( $('#' + eleId).width() );

// JavaScript
let ele = document.getElementById(eleId);
console.log(ele.clientWidth);                      // 58                // includes padding into calculation
console.log(ele.offsetWidth);                      // 60                // includes border size and padding into width calculation
console.log(ele.getBoundingClientRect().width);    // 60                // includes border size and padding into width calculation
console.log(window.getComputedStyle(ele, null).getPropertyValue("width"));    // 60px     (note the px in value, you may also get values like 'auto')     // all dynamic values for all CSS properties, IE>=9
console.log(ele.style.height);                     // empty string     // if you set it earlier, you would get this
console.log(ele.innerWidth);                       // undefined        // only works on window object, not on element like select/ div - fails in older IE<9

希望对您有所帮助。

【讨论】:

【参考方案3】:

基本上归结为.offsetWidth,但是由于跨浏览器的差异,jQuery代码稍微复杂一些。

【讨论】:

它在各种浏览器中的实现也大相径庭,因此使用像 jQuery 这样经过良好测试的东西是有意义的..

以上是关于jQuery 的 width() 函数的 Javascript 等价物是啥?的主要内容,如果未能解决你的问题,请参考以下文章

jquery-常用的运行函数

jquery--常用的函数2

函数奇怪行为中的JQuery变量

Jquery函数css [重复]

从 JavaScript 函数转换为 jQuery

jquery 直接在CSS函数中设置三元运算符