最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript CSS修改學(xué)習(xí)第三章 修改樣式表

 更新時(shí)間:2010年02月19日 14:08:18   作者:  
在這一章我打算通過直接修改頁(yè)面的樣式表而不是通過訪問元素的辦法來修改PRE的背景顏色。不幸的是,瀏覽器嚴(yán)重的不兼容性讓這個(gè)代碼基本上不能使用。

請(qǐng)注意代碼和傳統(tǒng)的DHTML的區(qū)別。在DHTML你通過直接修改頁(yè)面上的特定元素來改變樣式,而這里的代碼修改的是樣式表。
這里查看W3C DOM-CSS的兼容性列表。
定義
一個(gè)頁(yè)面總是包含一個(gè)或者幾個(gè)樣式表,一個(gè)樣式表里面包含一條或者幾條規(guī)則,一條規(guī)則里有詳細(xì)的樣式聲明。這個(gè)頁(yè)面的樣式表如下:

復(fù)制代碼 代碼如下:

<link rel="stylesheet" href="../quirksmode.css">
<style>
<!--
@import url("test.css");
p,h2,h3 {
    padding-right: 10px;
}
pre.test + * {
    margin-right: 20%;
}
pre.test {
    background-color: #ffffff;
}
-->
</style>

我們的目的是修改pre.test的白色背景為#EEF0F5。
樣式表
所有外鏈或者內(nèi)嵌的樣式表都能通過document.styleSheets數(shù)組訪問。quirksmode.css,這個(gè)網(wǎng)站的通用樣式表保存在document.styleSheets[0]里。上面這段特別的樣式表段就保存在document.styleSheets[1]。我們就在這段代碼上進(jìn)行測(cè)試。
cssRules[]和rules[]
一條規(guī)則就是一個(gè)或者多個(gè)元素的一組聲明。這里有兩種訪問規(guī)則的方法。W3C堅(jiān)持使用cssRules[],而微軟堅(jiān)持rules[]。兩種方法都是用索引數(shù)字,第一條規(guī)則就是(css)Rules[0],第二條就是(css)Rules[1]等等。
復(fù)制代碼 代碼如下:

var theRules = new Array();
if (document.styleSheets[1].cssRules)
    theRules = document.styleSheets[1].cssRules
else if (document.styleSheets[1].rules)
    theRules = document.styleSheets[1].rules

現(xiàn)在theRules就包含了所有的樣式規(guī)則。規(guī)則的數(shù)目
這是樣式表:
復(fù)制代碼 代碼如下:

@import url("test.css");
p,h2,h3 {
    padding-right: 10px;
}
pre.test + * {
    margin-right: 20%;
}
pre.test {
    background-color: #ffffff;
}

在你看來可能是4條規(guī)則:@import 然后是p,h2,h3,接著pre.test + *,最后是pre.test。然而瀏覽器可不這么看。
Safari看見的是4條規(guī)則:
0、undefined
1、P
2、PRE.test[CLASSS~="test"]+*
3、PRE.test[CLASSS~="test"]
注意大寫
IE7beta3看見了5條:
0、P
1、H2
2、H3
3、PRE.test + *
4、PRE.test
注意大寫
Mac IE也看見5條:
0、P
1、H2
2、H3
3、PRE.test * (注意沒有+號(hào))
4、PRE.test
注意大寫
Mozilla和Opera 9看見4條:
0、undefined
1、p,h2,h3
2、pre.test + *
3、pre.test
注意小寫
非常棒的混亂!
1、IE認(rèn)為p,h2,h3是三條而不是一條規(guī)則,而Safari則只取p。知道現(xiàn)在我才知道這是一種不正確的寫法。
2、Mac IE把選擇器改成了pre.test *,這樣含義就非常不一樣了。非常嚴(yán)重的問題。
3、除了Safari給pre.test添加了不必要的表達(dá)式以外,這個(gè)是支持最好的了。
所以要訪問pre.test在Safari和Mozilla里需要cssRules[3],而IE是rules[4],早期的Mozilla是cssRules[5]。很可愛,不是么?
沒有關(guān)鍵字
所以如果使用索引值的話問題就非常嚴(yán)重。我們希望能這樣訪問:
document.styleSheets[1].cssRules['PRE.test']這樣我就能訪問pre的樣式表規(guī)則了。但是W3C或者其他瀏覽器貌似不需要這樣的訪問樣式表的方法。但是所有的文檔在這個(gè)問題上都保持沉默。
這個(gè)失敗意味著你基本上沒法訪問規(guī)則了。
樣式聲明
假設(shè)我們已經(jīng)訪問了一條規(guī)則?,F(xiàn)在需要改變其中一條聲明。表達(dá)式如下:
復(fù)制代碼 代碼如下:
rule.style.color = '#0000cc';

W3C的方法是:
復(fù)制代碼 代碼如下:
rule.style.setProperty('color','#00cc00',null);

因?yàn)閟tyle.color簡(jiǎn)單的多,所以我不想用這個(gè)seProperty()。
例子
打算改變pre的顏色,代碼如下:
為了保證能用,我把pre的規(guī)則寫在最后一條。很丑,但是這是唯一的辦法:
復(fù)制代碼 代碼如下:

function changeIt() {
    if (!document.styleSheets) return;
    var theRules = new Array();
    if (document.styleSheets[1].cssRules)
        theRules = document.styleSheets[1].cssRules
    else if (document.styleSheets[1].rules)
        theRules = document.styleSheets[1].rules
    else return;
    theRules[theRules.length-1].style.backgroundColor = '#EEF0F5';
}

翻譯地址:http://www.quirksmode.org/dom/changess.html
轉(zhuǎn)載請(qǐng)保留以下信息
作者:北玉(tw:@rehawk)

相關(guān)文章

  • javascipt基礎(chǔ)內(nèi)容--需要注意的細(xì)節(jié)

    javascipt基礎(chǔ)內(nèi)容--需要注意的細(xì)節(jié)

    本篇文章,小編為大家介紹關(guān)于javascipt基礎(chǔ)內(nèi)容--需要注意的細(xì)節(jié),有需要的朋友可以參考一下
    2013-04-04
  • JS的Document屬性和方法小結(jié)

    JS的Document屬性和方法小結(jié)

    Document想必大家并不陌生吧,在使用js的過程中會(huì)經(jīng)常遇到它,那么它有哪些屬性、哪些方法,在本文將以示例為大家詳細(xì)介紹下,希望對(duì)大家有所幫助
    2013-09-09
  • javascript函數(shù)聲明和函數(shù)表達(dá)式區(qū)別分析

    javascript函數(shù)聲明和函數(shù)表達(dá)式區(qū)別分析

    本文向大家展示了javascript中函數(shù)聲明和函數(shù)表達(dá)式的概念及區(qū)別,介紹的非常全面,也很詳盡,這里推薦給大家
    2014-12-12
  • js基礎(chǔ)知識(shí)(公有方法、私有方法、特權(quán)方法)

    js基礎(chǔ)知識(shí)(公有方法、私有方法、特權(quán)方法)

    這篇文章主要介紹了js基礎(chǔ)知識(shí),包括公有方法、私有方法,以及特權(quán)方法的使用介紹,感興趣的小伙伴們可以參考一下
    2015-11-11
  • Javascript 布爾型分析

    Javascript 布爾型分析

    今天在做景德鎮(zhèn)的企業(yè)等級(jí)功能的時(shí)候,遇到一個(gè)很有趣的問題。在一個(gè)jsp頁(yè)面里,我需要把一個(gè)java的字符串轉(zhuǎn)為js的布爾型。
    2008-12-12
  • Javascript學(xué)習(xí)筆記9 prototype封裝繼承

    Javascript學(xué)習(xí)筆記9 prototype封裝繼承

    在上文中,我利用prototype的原理做了一個(gè)封裝的New,然后我就想到,我是否可以用prototype的原理進(jìn)一步封裝面向?qū)ο蟮囊恍┗咎卣髂??比如繼承。
    2010-01-01
  • 淺談JavaScript中的Math.atan()方法的使用

    淺談JavaScript中的Math.atan()方法的使用

    這篇文章主要介紹了JavaScript中的Math.atan()方法的使用,是JS入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-06-06
  • 輕松學(xué)習(xí)JavaScript函數(shù)中的 Rest 參數(shù)

    輕松學(xué)習(xí)JavaScript函數(shù)中的 Rest 參數(shù)

    ES6 引入 rest 參數(shù)用于獲取函數(shù)的多余參數(shù),這樣就不需要使用arguments對(duì)象了。rest 參數(shù)搭配的變量是一個(gè)數(shù)組,該變量將多余的參數(shù)放入數(shù)組中。下面我們來詳細(xì)了解一下吧
    2019-05-05
  • javascript基礎(chǔ)知識(shí)

    javascript基礎(chǔ)知識(shí)

    本文主要介紹javascript一些基礎(chǔ)知識(shí),比較實(shí)用,希望能給大家做一個(gè)參考。
    2016-06-06
  • THREE.JS入門教程(1)THREE.JS使用前了解

    THREE.JS入門教程(1)THREE.JS使用前了解

    Three.js是一個(gè)偉大的開源WebGL庫(kù),WebGL允許JavaScript操作GPU,在瀏覽器端實(shí)現(xiàn)真正意義的3D,本文介紹下THREE.JS基礎(chǔ)/瀏覽器支持/設(shè)置場(chǎng)景/構(gòu)建網(wǎng)格表面/材質(zhì)/光/渲染循環(huán)/通用的對(duì)象屬性等等,感興趣的朋友可以了解下哦
    2013-01-01

最新評(píng)論

沭阳县| 辉南县| 海原县| 济宁市| 来凤县| 西丰县| 宜宾市| 修水县| 乌兰浩特市| 南康市| 松潘县| 呼伦贝尔市| 方城县| 台中县| 科尔| 庆安县| 横峰县| 赞皇县| 扬州市| 汉川市| 万宁市| 永川市| 巴彦县| 交城县| 白城市| 礼泉县| 吴旗县| 遂川县| 江陵县| 呼图壁县| 容城县| 工布江达县| 兴海县| 长泰县| 行唐县| 五华县| 温州市| 拉孜县| 云霄县| 盐边县| 丰原市|