给定一个包含滚动条的div(例如溢出的b / c: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?
我也分叉你的小提琴,看看我做了什么: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