2011-12-06 31 views
9

我有一个容器元素,它是一种布局容器,它的子项和基于一些属性,我必须安排孩子。JavaScript - 需要一种方法来设置元素的OuterHeight

我需要简单的方法来设置元素的outerHeight,像,

$(e).setOuterHeight(200); 

jQuery的outerHeight没有设置高度在所有的,确实是其一个只读的方法。

$(e).height(200); // this clips my element 

在上面的方法中,我放松了输入文本的边框。

我的元素的儿童是基于可用空间和基于数据的一些其他标准,它拥有像浮简单的布局,清晰等不会因为填充等动态改变基于尺寸的工作对接。即使我不想但没有选择,我终将使用Table,但无论如何感谢您的帮助。

现在,当元素的大小更然后孩子则没有问题,但有时容器元素可能有较小的高度那么孩子和那个时候,我需要增加尺寸。

function calculateSize(e){ 
    var s = { 
     width: $(e).innerWidth(), 
     height: 0 
    }; 
    var ae = new Enumerator(e.children); 
    while(ae.next()){ 
     var child = ae.current(); 
     // I have tried all alternatives 
     // for following lines 
     // child.clientHeight || child.offsetHeight 
     // $(child).outerHeight() 
     // $(child).innerHeight() 
     s.height += $(child).outerHeight(); 
    } 
    if(s.height > $(e).height()){ 
     $(e).height(s.height); 
    } 
} 

function layoutChildren(e){ 
     .... 
     /// for every child c 
     /// some steps before 
     var heightForChildren = 
     calculatedWithPadMarginBorder(availableHeight,c); 
     /// tried combinations 
     $(c).height(heightForChildren); 
     /// last statement fails for button 
     /// as button's padding cuts itself 
     /// removing padding in calculation 
     /// cuts other input elements !! 
     /// some steps after 
     .... 
} 

我需要如何计算运行高度/宽度,包括/不包括填充/保证金/边框等,以及如何正确设置它,这样我不遇到问题了一些解释。我不能继续尝试所有的排列组合,因为即使在jQuery网站上我也没有看到正确的文档。

固定高度的计算都很好,但是这是一种其自身的大小,并安排在特定的顺序儿童中动态元素。

问题是没有办法设置outerHeight,当我们设置元素的高度/宽度时,高度/宽度实际上是内部高度/宽度而没有考虑边距,而当我们想调整父级时,我们需要outerHeight,但我们不能容易地将外部高度设置回来。

我calculateSize和layoutChildren是两种不同的方法和两个独立的算法,因为父母将被重新调整,总结所有儿童的身高。然后高度被简单地分为没有。的孩子堆叠在一起。我的计算是完美的,但在我的layoutChildren方法中,我有元素的“outerHeight”和“outerWidth”,并且不知道如何使用jQuery或其他任何方式正确设置它。

回答

1

好吧,这很奇怪,但这是答案。

有奇怪的控制,

  • SELECT
  • BUTTON(INPUT [类型=提交|复位|按钮])

WebKit浏览器

  • 填充和边界是视为所有控件的OuterWidth的一部分
  • 填充和边界必须加入宽度OuterWidth所有控件
  • 填充和边境被视为InnerWidth的一部分“怪异控制”
  • 填充和边界必须从宽度设置宽度为所有“非怪异的前扣除控制”

非WebKit浏览器

  • 填充和边境被视为OuterWidth的一部分,所有非‘怪异控制’
  • 填充和边界必须是dded以宽度为OuterWidth所有非“怪异控制”
  • 填充和边境被视为InnerWidth的一部分
  • 填充和边界必须从宽度设置宽度为所有“非前扣除所有非“怪异控制”怪异控制”
0

我很乐意提供帮助,但我根本不明白你的问题。 关于jQuery的尺寸方法的文档,我发现http://api.jquery.com/category/css/在innerWidth(),innerHeight(),outerWidth()和outerHeight()上都保存了文档。

我希望这可以帮助,否则,试图通过你的问题阅读,更凸显出你所需要的答案。

+0

我想将outerHeight设置为元素,jQuery给了我outerHeight,但是如何将它设置为元素? –

+0

好吧,现在我明白了。这是CSS boxmodel的一个基本问题:http://www.w3.org/TR/CSS2/box.html这已经引起了很大的争议。 我建议一个相当丑陋的方法,因为我们已经在处理javascript的高度计算。这是您计算outerHeight中的差异,有无边距,并且当您设置高度时,您将添加此差异。 我希望这是有道理的 - 虽然我会强烈建议您尝试为此找到一个CSS解决方案,一般来说,这些类型的元素问题安排总是有一个比JS解决方案更流畅的CSS解决方案 – kraenhansen

+0

:)这是真的一个丑陋的解决方案,不幸的是,计算仍然不能很好地执行,因为我刚刚发现,SELECT和BUTTON是唯一一个与其他控件有不同计算的控件,只有那些被裁剪。我很喜欢CSS解决方案,但我们又一次处理30%的IE用户,而IE 7-8对CSS2仍然很奇怪。 –

1

如果您没有特殊要求,默认情况下,标准元素会将其高度与其子级相匹配。如果将样式设置为float:left或float:right,则其默认宽度也将包含其所有子项。

2

.outerHeight(value) version added: 1.8.0

可以使用jQuery.outerHeight(value)设置元素的外高度的价值。例如:$foo.outerHeight(200)

相关问题