jQuery width()没有在生成内容的div上返回正确的值
使用下面的代码,警报不会返回#main的实际大小,它总是返回#main的css宽度值,并删除%。 所以在这种情况下,我在警报中得到95。 如果我提醒parent()。width()我得到100。
从.get()调用返回的数据是有时比#main更宽的ul,有时不是。 内容的宽度似乎与.width()返回的内容没有任何关系。
所以我的问题是,如何获得#main的真实像素宽度?
CSS:
#container { width: 100%; } #main { width: 95%; overflow: hidden; }
HTML:
使用Javascript / jQuery的:
$.get('page.php', function(result) { $('#main').html(result); }); alert($('#main').width();
我试图在用于内联编辑的textareas上实现jquery.autogrow-textarea时遇到了同样的问题。 textareas包含在尚未显示的div
(css display: none;
)。 在调试.autogrow()
javascript代码时,我发现jQuery的.width()
返回了百分比值,删除了’%’字符而不是计算出的宽度(以像素为单位)(例如100表示100%,80表示80%) 。
以下是说明此场景的jsfiddle: http : //jsfiddle.net/leeives/ujE6s/
要解决这个问题,我会在显示textarea后立即将代码更改为.autogrow()
。 然后,对.width()
的调用是准确的。
我不确定你是否正在使用隐藏的内容,但我想我会写下我的答案,以防其他人在搜索jQuery的.width()
问题时偶然发现(就像我一样.width()
。
我遇到了同样的问题。 无论出于何种原因(环境),我都无法从具有CSS宽度百分比值的div中提取正确的.width()。
这篇文章接受的答案: webkit浏览器正在使elements.width()错误
Gaby回答了使用的建议:$(window).load(…)工作得很好。
$(window).load(function () { alert($('#main').width(); });
我知道这是一个旧post,但如果他们没有遇到其他post,这可能对某人有用。
这是因为AJAX是异步的。 运行alert
,请求未返回。
固定代码:
$.get('page.php', function(result) { $('#main').html(result); alert($('#main').width()); });
如果您修复代码的最后一行,则此方法有效:
alert($('#main').width());
这是小提琴
此外, div id=container
在HTML中拼写错误。 修正了小提琴。
我似乎无法复制这种行为。 也许某人用一个以百分比forms返回值的实现来覆盖jQuery.fn.width()
? 我在Firebug或类似的程序中调试并检查该function以确定。
jQuery width ()返回没有边框和填充的元素的宽度。
另一方面,CSS 宽度可能包括边框和填充(这取决于您的浏览器/ css默认框模型行为)。
如果你需要元素的整个宽度,你应该使用jQuery outerWidth ()代替。
$.get('page.php', function(result) { $('#main').html(result); alert($('#main').outerWidth(); });