给定一个具有滚动条的div(例如b/c ofoverflow:auto),如何获取元素的精确innerWidth?在我的示例中:http://jsfiddle.net/forgetcolor/2J7NJ/ width和innerWidth报告相同的宽度。我要的数量应该少于100。

HTML:

<div id='box1'>
<div id='box2'>
</div>
</div>
<p id="w"></p>
<p id="iw"></p>​

CSS:
#box1 {
    width:100px;
    height:100px;
    overflow:auto;
}

#box2 {
    width:200px;
    height:200px;
    background-color:#aaa;
}

Javascript:
$('#w').text("width is: "+$('#box1').width());
$('#iw').text("inner width is: "+$('#box1').innerWidth());​

更新:

当box2 div包含大图像时,我需要它工作(因此,需要一秒钟来加载)。这是一个示例,无法整合下面的解决方案之一(Lukx'):http://jsfiddle.net/forgetcolor/rZSCg/1/。有什么想法如何让它在计算宽度之前等待图像加载?

最佳答案

通过将新的DIV插入#box1 -Container,此DIV将获得可用宽度-读取其宽度将返回一个看起来正确的值。

HTML和CSS均保持不变

JS成为

var helperDiv = $('<div />');
$('#box1').append(helperDiv);

$('#iw').text("inner width is: " + helperDiv.width());
helperDiv.remove();​​​​​​​​​​​​​​​​​​​​​​​​​​​ // because we dont need it anymore, do we?

我还 fork 了您的 fiddle ,看看我做了什么:http://jsfiddle.net/xc9xQ/2/

因此,要通过函数获取此值:
function widthWithoutScrollbar(selector) {
  var tempDiv = $("<div/>");
  $(selector).append(tempDiv);
  var elemwidth = tempDiv.width();
  tempDiv.remove();
  return elemwidth;
};

//Example
console.log($('#page').width());  // 1280
console.log(widthWithoutScrollbar('#page'));  // 1265

关于jquery - 如何在没有滚动条的jQuery中获取元素的innerWidth,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10692598/

10-12 13:28