如何在jquery中获取元素的innerWidth而不使用滚动条

给定一个包含滚动条的div(例如溢出的b / c:auto),如何获得元素的准确innerWidth? 在我的例子中: http : //jsfiddle.net/forgetcolor/2J7NJ/ width和innerWidth报告相同的宽度。 我想要的数字应该少于100。

HTML:

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 = $('
'); $('#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 = $("
"); $(selector).append(tempDiv); var elemwidth = tempDiv.width(); tempDiv.remove(); return elemwidth; }; //Example console.log($('#page').width()); // 1280 console.log(widthWithoutScrollbar('#page')); // 1265

我不确定你在找什么,但我相信它是id为box1的div的scrollWidthclientWidth

两者都是JavaScript属性,不需要jQuery来检索,但可以使用以下$('#box1')[0]在jQuery中获取。 所有这一切都是从jQuery选择器返回第一个(如果你只使用ID)DOM元素。

如果你想找出box1内容的宽度而不管滚动条你可能想找到$('#box1')[0].scrollWidth 。 如果您正在寻找可用的宽度并 box1中显示,那么您正在寻找$('#box1')[0].clientWidth

我分叉你的小提琴,所以你可以看到两个在行动。 http://jsfiddle.net/arosen/xp9hD/

您可以通过复制原始div来制作另一个div,然后获得宽度等。例如:

 var saveDiv = $('
').html($('#box2').html());

saveDiv.innerWidth会给你0

如果普通javascript中的解决方案没问题,你可以使用david walsh所描述的技术: http : //davidwalsh.name/detect-scrollbar-width

我分叉你的小提琴并实现它: http : //jsfiddle.net/jnaO/z9btp/

但同样,这不是使用jQuery,只是javascript。