Javascript 在渲染元素之前,如何使用jQuery找到元素的预期渲染宽度?
我有一个元素,例如下面的元素,它尚未附加到Javascript 在渲染元素之前,如何使用jQuery找到元素的预期渲染宽度?,javascript,jquery,dom,Javascript,Jquery,Dom,我有一个元素,例如下面的元素,它尚未附加到正文。我可以很好地使用它,它有所有的类,这些类将导致它使用特定的盒子模型进行渲染 但我需要知道它的宽度,然后才能添加它 如果我使用Firebug检查元素,它会使用元素本身和CSS正确地计算长方体模型和布局。但是我如何从jQuery内部做到这一点呢 <li> <i class="icon"></i> <a>/a> </li> /a> css,例如用于i.icon设置宽度:40
正文
。我可以很好地使用它,它有所有的类,这些类将导致它使用特定的盒子模型进行渲染
但我需要知道它的宽度,然后才能添加它
如果我使用Firebug检查元素,它会使用元素本身和CSS正确地计算长方体模型和布局。但是我如何从jQuery内部做到这一点呢
<li>
<i class="icon"></i>
<a>/a>
</li>
/a>
css,例如用于i.icon
设置宽度:40代码>,但我如何得到它
elm.width()
上的所有变量都为0,包括elm.css('width')
如果不将其添加到文档中,则无法获取其计算属性。但是,您可以添加它,获取计算属性,然后删除它,几乎可以肯定用户不会注意到。例如:
var $elm = /*...the jQuery wrapper around your element...*/;
// Append it
$elm.appendTo(document.body); // Put it where it should go, not usually `document.body` literally
// Get the properties here, e.g.:
var width = $elm.width();
// Remove it again
$elm.remove();
|你不能,你必须附加它,但你可以隐藏它…如果你是说在将它添加到dom之前,那么我认为这是不可能的,因为与元素关联的样式只有在元素添加到dom之后才会应用…将它附加到dom但设置显示:none
(或使用.hide()
)然后你可以获得你需要的任何样式属性,然后删除它。”css,例如fori.icon
设置width:40;
“这是无效的css。40什么<代码>px
<代码>em<代码>%?@Archer:display:none
将给出元素大小0。人们可以使用visibility=“hidden”
——尽管这会造成“空白”。我希望如此。它似乎不起作用。即使将整个li
添加到body
中,也会为li
提供宽度,但不会为子元素提供宽度。@deitch:适用于我:(来源:)。请注意,要提供i
元素宽度,必须设置其display
属性,因为其默认display
属性为inline
,并且不能提供inline元素宽度。(您还需要宽度单位。)@deitch:并改用40%
(而不是上面的40px
),只是数字有所不同:(来源:)谢谢,我会看看是否可以简化为在jsbin上重现。当然,一旦我这样做了,我可能会解决它@我想你是对的。它确实可以工作,但用于设置样式的CSS取决于它的位置。在这种情况下,div的特定类中的li
中的i
。如果我能做一个“CSS查询”,那就太好了。我会解决它,当我让它按照您的解决方案工作时,我会将它标记为正确。谢谢你发帖。