2012-07-08 52 views
2

我有结构化这样的div:当另一个CSS值发生变化时,如何更改CSS值?

<div id='head'> 
    <div class='graphData'> 
     <table>...</table> 
    </div> 
    <div class='graph'>...</div> 
</div> 

编辑

对不起,我忘了结构的几个重要部分。

head,graphData和都将它们的min-heights设置为300px。

我的问题是如何更改headgraph's最小高度匹配graphData's最小高度时graphData's最小高度增加或减少?任何方式来检测通过jQuery或JavaScript的CSS样式更改?

graphData的高度因我的数据库中动态生成的行而发生变化。

回答

3

CSS或jQuery没有内置的方式来检测这种性质的变化。 您可能认为要做的是每隔一段时间检查元素的高度,并将它们与最后一次已知值进行比较。如果有差异,那意味着高度已经改变。

var oldHeight = $("#graph").height(); 

var heightChangeTimer = setInterval(function(){ 
    var newHeight = $("#graph").height(); 
    if (newHeight != oldHeight){ 
    oldHeight = newHeight; 
    // do some actions on height change... 
    } 
},100); 

现在,我已经将间隔设置为每100毫秒,但你也可以自行调整值,以满足您的需求 - 也许使它略小IE。更频繁地运行检查...

+1

嗯,对的setInterval解决方案不是一个巨大的风扇,虽然这肯定会工作。 – Stegrex 2012-07-08 10:28:24

+0

@ste - 这完全取决于内容多长时间更改一次大小。这**是更多的“蛮力”解决方案,我承认。 – Lix 2012-07-08 10:33:00

+1

是的,这是更强大的力量,但它绝对是一个好开始。当然,从原始问题中很难看出整个页面需求的意义,因此很难说出哪个解决方案是“最好的”。也许我只是倾向于在一个页面上有很多JS定时器的可能性。 – Stegrex 2012-07-08 10:37:53

0

您可以并排设置,或者您可以将min-height: inherit设置为内部div。

1

在CSS中没有真正的事件系统(当然,jQuery有一个)。 这取决于你的图形元素的变化方式。如果当用户与任何元素相互作用的高度是变化的,你可以使用jQuery的点击功能:

$("#myElement").click(function() { 
    $("#head").addClass("higher"); // change height or something 
}); 
+0

啊哈!关于没有事件系统的CSS,这非常好。好帖子和很好的解决方案。 – Stegrex 2012-07-08 10:26:52

+0

@chr - 在('click')语法上使用更新的jQuery 1.7+'来绑定事件处理程序... – Lix 2012-07-08 10:31:25

+0

没有用户交互。我更新了我的问题。 :) – Ron 2012-07-08 10:39:34

1

jQuery: How to listen for DOM changes?

你可能会想读了这一个。

基本上,我认为你想要做的就是将一个事件监听器绑定到图形的div上(文档将等待并监听发生在它上面的任何事件)。它需要监听的事件是CSS中的更改(可能是DOMSubtreeModified事件,但我会查找样式属性修改事件,不确定是否存在该事件)。

当图形发生变化时,处理head div。

1
+1

虽然这可能在理论上回答这个问题,[这将是更可取的](http://meta.stackexchange.com/q/ 8259)在这里包括答案的重要部分,并提供参考链接。我们希望为本网站带来精彩内容**,而不是向其他地方的用户发送答案:) – Lix 2012-07-08 10:29:35

相关问题