给定一个具有滚动条的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/