如何使用 vanilla JavaScript 查找 div 的宽度?

Posted

技术标签:

【中文标题】如何使用 vanilla JavaScript 查找 div 的宽度?【英文标题】:How to find the width of a div using vanilla JavaScript? 【发布时间】:2011-06-14 19:46:36 【问题描述】:

如何在不使用 jQuery 之类的库的情况下以跨浏览器兼容的方式找到<div> 的当前宽度?

【问题讨论】:

+1 表示“无 jQuery”评论 :) Understanding offsetWidth, clientWidth, scrollWidth and -Height, respectively 的可能重复项(确实,这个问题在很久以后才被问到,但仍然有一个更详细的答案)。 【参考方案1】:

另一种选择是使用 getBoundingClientRect 函数。请注意,如果元素的显示为“无”,getBoundingClientRect 将返回一个空矩形。

var elem = document.getElementById("myDiv");
if(elem) 
   var rect = elem.getBoundingClientRect();
   console.log(rect.width);  

【讨论】:

【参考方案2】:

获取计算样式的正确方法是等待页面呈现。可以通过以下方式完成。注意获取auto值的超时时间。

function getStyleInfo() 
    setTimeout(function() 
        const style = window.getComputedStyle(document.getElementById('__root__'));
        if (style.height == 'auto') 
            getStyleInfo();
        
        // IF we got here we can do actual business logic staff
        console.log(style.height, style.width);
    , 100);
;

window.onload=function()  getStyleInfo(); ;

如果你只使用

window.onload=function() 
    var computedStyle = window.getComputedStyle(document.getElementById('__root__'));

您可以获得auto 的宽度和高度值,因为浏览器在执行完全加载之前不会呈现。

【讨论】:

【参考方案3】:

您可以使用clientWidthoffsetWidth Mozilla developer network reference

应该是这样的:

document.getElementById("yourDiv").clientWidth; // returns number, like 728

或带边框宽度:

document.getElementById("yourDiv").offsetWidth; // 728 + borders width

【讨论】:

【参考方案4】:

实际上,您不必使用document.getElementById("mydiv")。 您可以简单地使用 div 的 id,例如:var w = mydiv.clientWidth;var w = mydiv.offsetWidth; 等等

【讨论】:

【参考方案5】:

所有答案都是正确的,但我仍然想提供一些其他可行的替代方案。

如果您正在寻找指定的宽度(忽略填充、边距等),您可以使用。

getComputedStyle(element).width; //returns value in px like "727.7px"

getComputedStyle 允许您访问该元素的所有样式。例如:padding、paddingLeft、margin、border-top-left-radius等。

【讨论】:

【参考方案6】:
document.getElementById("mydiv").offsetWidth
element.offsetWidth (MDC)

【讨论】:

那个,或者cientWidth,虽然我不知道真正的区别。 offsetWidth 包括边框宽度,clientWidth 不包括。 当 myDiv 没有 CSS 规则但在标签中定义了“宽度”和“高度”时,offsetWidth 返回父宽度。没问题,我刚刚添加了 CSS 规则,效果很好。 @nim 如果你的 div 有display: none 或者不是文档的一部分,它的偏移高度总是为零。 This answer 对offsetWidthclientWidth 之间的区别进行了详细的可视化解释。【参考方案7】:

您还可以使用 ClassName 搜索 DOM。例如:

document.getElementsByClassName("myDiv")

这将返回一个数组。如果您对某一特定属性感兴趣。例如:

var divWidth = document.getElementsByClassName("myDiv")[0].clientWidth;

divWidth 现在将等于 div 数组中第一个元素的宽度。

【讨论】:

【参考方案8】:

在 div 或 body 标签上调用下面的方法 onclick="show(event);" 函数显示(事件)

        var x = event.clientX;
        var y = event.clientY;

        var ele = document.getElementById("tt");
        var width = ele.offsetWidth;
        var height = ele.offsetHeight;
        var half=(width/2);
       if(x>half)
        
          //  alert('right click');
            gallery.next();
        
        else
       
           //   alert('left click');
            gallery.prev();
        


    

【讨论】:

以上是关于如何使用 vanilla JavaScript 查找 div 的宽度?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 vanilla Javascript 文件中导入 nodejs 模块

如何在 Vanilla JavaScript (JS) 中导入/导出类

如何使用 vanilla javascript 通过 ajax 将多张照片上传到 Laravel 应用程序?

你如何避免使用 vanilla web 组件的请求地狱?

如何仅使用 vanilla JavaScript 和 Node-API 将多个 div 元素包装在另一个元素节点周围?

es6 vanilla javascript中的Ajax请求