2011-11-15 52 views
1

我有一个价格网格,使用相对定位来移动一个字段,在一个框下面:overflow: hidden;。在这个领域,有绝对定位的盒子包含价格。当此框悬停时,上面和左侧的匹配值将改变颜色。为了实现这一点,一个类使用jQuery进行切换。这最初起作用。为什么在dom更改后忽略对类的更改?

但是,网格移动后,类更改不会再影响网格上方的块。在Chrome控制台中,我可以看到正在添加的课程,但未应用CSS样式。没有其他样式的元素已经改变。

我100%确定没有其他风格规则影响元素,它只是在DOM被更改后停止响应类中的变化。

我可以以某种方式“刷新”DOM吗?

编辑:

我试着只得到了相关代码:

添加细胞在首位:

$("#price_dates_cells").append("<div id='"+weekday[theBeginDate.getDay()]+"-"+theBeginDate.getDate()+"-"+(theBeginDate.getMonth()-1)+"' class='datecell' style='left: "+(Math.floor(difference/(3600 * 24 * 1000)) * (cellwidth))+"px'>"+weekday[theBeginDate.getDay()]+"<br>"+theBeginDate.getDate()+" "+yearmonth[theBeginDate.getMonth()]+"</div>"); 

切换类:

var str_element = "#"+weekday[Bdate.getDay()]+"-"+Bdate.getDate()+"-"+(Bdate.getMonth()-1); 
$(str_element).toggleClass("red"); 

和似乎导致pr的运动oblem:

$('#price_grid').animate({"top": (((horizontalMovement) * cellheight)) }, 'fast', 'linear'); 

Class not Applied http://img708.imageshack.us/img708/6491/classnotapplied.png

+1

张贴一点你的代码会帮助很多,或者你可以创建一个jsfiddle :) – Rohan

回答

0

哦,我现在觉得很愚蠢。我已经改变了附加元素的id结构,以确保它们是唯一的,但我忘了更改必须防止双重添加日期单元格的检查。该元素确实接收了该类,并且应用了它的样式,但被相同的元素覆盖,但没有收到该类。

jQuery逻辑上只将该类添加到具有指定ID的第一个元素,并且由于该元素是首先创建的,因此它将位于重复项下。

假若我是剪辑的截图有一点不同,我敢肯定有人会注意到:d

感谢大家对你的答案!

1

CSS总是给prioritylast statement。所以,如果你要覆盖.datecell DIV color然后写red class after就这样写:

.datecell{ 
    background-color:grey; 
} 
.red{ 
background-color:red 
} 

这就是发生在你的情况

如果你不想red覆盖.datecell然后像这样写:

.red{ 
    background-color:red 
    } 
.datecell{ 
     background-color:grey; 
    } 
+1

CSS根据选择器的特殊性和*然后*顺序分配优先级。意思是,如果一个选择器比另一个更具体,那么即使它最先出现也具有优先权。 –

+0

@AndyE;是的,我知道如果我写.datecell.red或.parent .red是更多指定然后.red但如果elememt不是像上面的例子那样更具体,那么它是最后一个语句的优先级。 – sandeep