天天看點

jQ中css()和addClass的差別之優先級

  筆者在實作點選表格中某行添加高亮的效果時,發現一個css()和addClassd()的沖突,具體代碼如下:

<style>
    .se
{
    background:#FF6500;
    color:#fff;
}
</style>
<script type="text/javascript">
        $(function(){
            $("tbody>tr:odd").css("background-color","#FFF38F");
            $("tbody>tr:even").css("background-color","#FFFFEE"); 
            $("tbody>tr").click(function(){
                $(this).addClass("se")
                    .siblings().removeClass("se")
                    .end()
                    .find(\':radio\').attr(\'checked\', true);
            })    
        });
    </script>      

  單從代碼邏輯上來看,是沒有錯的。點選後字型顔色也确實改變了,隻是背景顔色卻不會改變。按理說會按順序來,最後設定的樣式會把之前的同類樣式覆寫掉。實際卻沒有。

  這是為什麼呢?先從優先級的角度分析。

  我們知道當外部樣式、内部樣式和内聯樣式同一樣式規則同時應用于同一個元素的時候,優先級如下 :

  外部樣式 < 内部樣式 < 内聯樣式 (ps:這個優先級在絕大多數情況下來說能正确的實作,但其實需要涉及到權重的計算)

1..addClass()方法是通過增加class名的方式,那麼這個樣式是在外部檔案或者内部樣式中先定義好的,等到需要的時候在附加到元素上; 

2.通過.css()方法處理的是内聯樣式,直接通過元素的style屬性附加到元素上的 ;

是以通過.css方法設定的樣式屬性優先級要高于.addClass方法,點選時所添加的類名無法覆寫css()設定的樣式。