7

我正在尝试使用 javascript 为我的函数检索 div 的宽度:

#areaDraw {
margin-top:50px;
width: 50%;
min-height: 100%;
z-index: 1000;
}

和功能:

 Event.add(window, "resize", function() {
    sketch.resize(document.getElementById("areaDraw").style.width,   window.innerHeight);
}).listener();

不知何故,javascript总是为div的宽度返回0(areaDraw)

那么有什么问题:

document.getElementById("areaDraw").style.width
4

6 回答 6

4

尝试document.getElementById("mydiv").offsetWidth代替.style.width

于 2013-07-17T12:11:58.100 回答
4

改用这个:

document.getElementById("areaDraw").offsetWidth

编辑:根据要求,解释为什么这样做(仅作为额外参考)。

这是因为该属性style.width是 CSS 中明确定义offsetWidth的宽度,当元素在浏览器中显示时,它会找到元素的实际宽度。

于 2013-07-17T12:12:05.013 回答
1
document.getElementById("areaDraw").offsetWidth

试试这个:)

于 2013-07-17T12:13:14.867 回答
1

解释

在您尝试获取它的宽度时,您的#areaDraw div元素可能是空的。

element.style.width获取元素内容的宽度,不管paddingmargin属性。


解决方案

尝试使用.offsetWidth来源:MDN)属性。不同之处在于它包括元素整个宽度及其和属性。paddingmargin


更多信息

请参阅MSDN 示例及其参考

于 2013-07-17T12:17:36.207 回答
1

您也可以尝试使用window.getComputedStyle

var elem = document.getElementById("areaDraw");
var width = window.getComputedStyle(elem, null).width;

考虑到在这种情况下宽度将是一个字符串(例如'290.5px')

getComputedStyle() 给出元素所有 CSS 属性的最终使用值。

于 2013-07-17T12:19:06.707 回答
0

元素必须有 style="display: block;" 和我的解决方案:

intId = 0;

function resize(con)
{
    var width = con.offsetWidth;

    if (width == 0)
    {
        var resfnc = function(con)
        {
            return function()
            {
                var width = con.offsetWidth;

                if (width == 0)
                {
                    return;
                }

                clearInterval(intId);

                resize(con);
            }
        }

        intId = setInterval(resfnc(con), 50);

        return;
    }

    //...... work here
}

var resf = function (con)
{
    return function ()
    {
        resize(con);
    };
};


var con = document.querySelector("#elementID");

window.addEventListener('resize', resf(con), true);
于 2016-11-17T23:52:50.487 回答