成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JavaScript DOM2和DOM3——“樣式”的注意要點

whjin / 2379人閱讀

摘要:如計算的樣式方法和屬性前者是增強(qiáng)了,這個方法接收兩個參數(shù)計算樣式的元素以及一個偽元素字符串如。操作表樣式類型表示的是樣式表,包括元素包含的樣式表和在元素中定義的樣式表。

層次:
訪問style對象:

style對象是CSSStyleDeclaration的實例;

getComputedStyle方法也返回CSSStyleDeclaration的實例;

訪問樣式表:

元素包含的樣式表由HTMLLinkElement表示;

this is a paragraph.

length屬性

style的屬性,length的目的,就是將其與item()方法配套使用,以便迭代在元素中定義的CSS屬性。如:


    

this is a paragraph.

getPropertyValue()方法

style的屬性,可以使用屬性名進(jìn)一步取得屬性的值。如:


    

this is a paragraph.

getPropertyCSSValue()方法

style屬性,返回一個包含兩個屬性的CSSValue對象,這兩個屬性分別是cssText和cssValueType。其中,cssText屬性的值與getPropertyValue()返回的值相同,而cssValueType屬性則是一個數(shù)值常量,表示值的類型:0為繼承的值;1為基本的值;2為列表;3為自定義的值。如下面的代碼即輸出CSS屬性值,也輸出值的類型:

var p = document.getElementById("p");
var i, prop;
for (i = 0, len = p.style.length; i < len; i++) {
    prop = p.style[i];
    value = p.style.getPropertyCSSValue(prop);
    console.log(prop + ":" + value.cssText + "," + value.cssValueType);
    // [Log] color:red,1 (testingjs.js, line 6)
    // [Log] font-family:monospace,2 (testingjs.js, line 6)
}

或許兼容性有問題,這個代碼在chrome中運行不了。不過,此方法不常用,一般都是用getPropertyValue()方法

removeProperty()方法

該屬性的目的是要移除某個CSS屬性。如:

var p = document.getElementById("p");
p.style.removeProperty("color");
setProperty()方法

該屬性的目的是要添加某個CSS屬性。如:

var p = document.getElementById("p");
console.log(p.style.setProperty("color","orange"));
計算的樣式getComputedStyle()方法和currentStyle屬性

前者是增強(qiáng)了document.defaultView,這個方法接收兩個參數(shù):計算樣式的元素以及一個偽元素字符串(如:after)。如果不需要偽元素信息,第二個值設(shè)置為null即可。該方法返回一個CSSStyleDeclaration對象,以下面代碼為例:



使用getComputedStyle()方法,用法是document.defaultView.getComputedStyle()返回CSSStyleDeclaration實例:

var myDiv = document.getElementById("myDiv");
var computedStyle = document.defaultView.getComputedStyle(myDiv, null);
console.log(computedStyle.length); //263
console.log(myDiv.style.length); //18
console.log(computedStyle.backgroundColor); //rgb(255,0,0)
console.log(computedStyle.border); //1px solid rgb(0, 0, 0)
console.log(computedStyle.width + computedStyle.height); //100px200px

currentStyle屬性則是用在IE上的,與上述類似。用法是element.currentStyle返回CSSStyleDeclaration實例。

操作表樣式

CSSStyleSheet類型表示的是樣式表,包括link元素包含的樣式表和在style元素中定義的樣式表。這兩個元素本身是由HTMLLinkElement和HTMLStyleElement類型表示的。但是CSSStyleSheet類型相對更加通用一些,它只表示樣式表,而不管這些樣式表在HTML中是如何定義的。CSSStyleSheet繼承自StyleSheet,接口屬性如下:

disabled:表示樣式表是否被禁用的布爾值;

href:如果是link元素表示的樣式表,則是樣式表的URL,否則是null;

media:當(dāng)前樣式表支持的所有媒體類型的集合,可用length屬性和item()方法,在IE中返回字符串;

ownerNode:指向擁有當(dāng)前樣式表的節(jié)點的指針;IE不支持;

parentStyleSheet:如果樣式表是通過@import導(dǎo)入的,這個屬性是一個指向?qū)胨臉邮奖淼闹羔槪?/p>

title:ownerNode中title值;

type:樣式表類型的字符串,一般是“type/css”;

CSSStyleSheet類型還支持下面的屬性和方法:

cssRules:樣式表中包含的樣式規(guī)則的集合。IE不支持但有個類似的rules;

ownerRule:樣式表是通過@import導(dǎo)入的,這個屬性就是一個指針,指向表示導(dǎo)入的規(guī)則;否則為null;IE不支持;

deleteRule(index):刪除cssRules集合中指定位置的規(guī)則;IE不支持但有個類似的removeRule()方法;

insertRule(rule,index):向cssRules集合中指定的位置插入rule字符串,IE不支持但有個類似的addRule()方法;

應(yīng)用于文檔中的所有樣式表是通過document.styleSheets集合來表示的。

另外,也可以直接通過link元素和style元素取得CSSStyleSheet對象。DOM規(guī)定了一個包含CSSStyleSheet對象的屬性,名叫sheet;在IE,可以使用styleSheet屬性。如:

console.log(document.getElementsByTagName("style")[0].sheet); //CSSStyleSheet對象
console.log(document.getElementsByTagName("style")[0].styleSheet); //CSSStyleSheet對象 只用于IE
console.log(document.styleSheets[0]); //同樣也是CSSStyleSheet對象
CSS規(guī)則

層次梳理:

console.log(document.styleSheets); //StyleSheetList對象 該行代碼包含著所有包括link元素和style元素的樣式表
console.log(document.styleSheets[0].cssRules); //CSSRuleList對象 該行代碼包含著第一個樣式表中的所有規(guī)則
console.log(document.styleSheets[0].cssRules[0]); //CSSStyleRule對象 該行代碼表示第一個樣式表中的第一條規(guī)則 可通過cssText屬性訪問

CSSRule對象表示樣式表中的每一條規(guī)則:

cssText:返回整條規(guī)則對應(yīng)的文本;IE不支持;

parrentRule:如果是導(dǎo)入的規(guī)則,這個屬性引入的就是導(dǎo)入規(guī)則否則為null;

parentStyleSheet:當(dāng)前規(guī)則所屬的樣式表,IE不支持;

selectorText:返回當(dāng)前規(guī)則的選擇符文本;

style:可以通過它設(shè)置和取得規(guī)則中特性的樣式值;是一個CSSStyleDeclaration對象;

type:規(guī)則類型的常量值,對于樣式規(guī)則,這個值是1;IE不支持;

比較常用的屬性是:cssText、selectorText、style。另外,cssText是只讀的,但是style.cssText則是讀寫的。

以下面的代碼為例:


script代碼如下:

var sheet = document.getElementsByTagName("style")[0].sheet; //獲得第一個stylesheet
var rule = sheet.rules[0]; //獲得該樣式表中第一條規(guī)則

console.log(rule.cssText); //#myDiv { width: 100px; height: 200px; background-color: blue; }(獲得該規(guī)則對應(yīng)的文本)
console.log(rule.selectorText); //#myDiv(該規(guī)則的選擇符文本)

console.log(rule.style); //CSSStyleDeclaration
console.log(rule.style[0]); //background-color(取得該規(guī)則中特定的樣式值)
console.log(rule.style[1]); //width

另外,可以用style的方式修改樣式信息:

var sheet = document.getElementsByTagName("style")[0].sheet;
var targetRule = sheet.rules[0];
targetRule.style.height = "300px";
創(chuàng)建規(guī)則

insertRule()方法,向現(xiàn)有樣式表中添加新規(guī)則;接收兩個參數(shù):規(guī)則文本和插入規(guī)則的索引。IE8及更早的的瀏覽器支持類似的方法:addRule(),接收兩個必選參數(shù):選擇符文本、CSS樣式信息和一個可選參數(shù):插入規(guī)則的位置;

刪除規(guī)則

deleteRule()方法,接收一個參數(shù):要刪除的規(guī)則的位置,IE中用removeRule()方法

元素大小

DOM中沒有規(guī)定如何確定頁面中元素的大小,IE為此率先引入了一些屬性。

偏移量

offsetHeight:垂直方向上占用的空間大??;

offsetWidth:水平方向上占用的空間大??;

offsetLeft:左外邊框至包含元素的左內(nèi)邊框之間的像素距離;

offsetTop:上外邊框至包含元素的上內(nèi)邊框之間的像素距離;

如下面的div元素:



script:

var div = document.getElementById("myDiv");
console.log(div.offsetHeight); //122 包括了100px的高度、2個1px的border、2個10px的padding,共122px
console.log(div.offsetWidth); //112 包括了80px的高度、2個1px的border、1個10px的padding和1個20px的padding-left,共112px
console.log(div.offsetLeft); //10 包括了10px的margin
console.log(div.offsetTop); //20 包括了20px的margin-top

對塊級元素來說,offsetTop、offsetLeft、offsetWidth 及 offsetHeight 描述了元素相對于 offsetParent 的邊界框。

offsetParent屬性,該屬性不一定與parentNode值相等,可能是body也有可能是table;要想知道某個元素在頁面上的偏移量,用下面函數(shù):

    
th1 th2
td1 td2

對于使用表格和內(nèi)嵌框架布局的頁面,不同瀏覽器實現(xiàn)這些元素的方式不同,得到的值不會太準(zhǔn)確。

客戶區(qū)大小

指的是內(nèi)容及內(nèi)邊距所占據(jù)的空間大?。篶lientWidth、clientHeight;如:

console.log(div.clientHeight); //120 height加上padding,不包括margin和border console.log(div.clientWidth); //110 width加上padding,不包括margin和border

又如使用該屬性取得瀏覽器視口大?。?/p>

var div = document.getElementById("myDiv");
function getViewport() {
    if (document.compatMode == "BackCompat") {
        return {
            width: document.body.clientWidth,
            height: document.body.clientHeight
        };

    } else {
        return {
            width: document.documentElement.clientWidth,
            height: document.documentElement.clientHeight
        };
    }
}
console.log(getViewport()); //{width: 1280 height: 913}
滾動大小

指的是包含滾動內(nèi)容的元素的大?。?/p>

scrollHeight:在沒有滾動條的情況下,元素內(nèi)容的總高度;

scrollWidth:在沒有滾動條的情況下,元素內(nèi)容的總寬度;

scrollLeft:被隱藏在內(nèi)容區(qū)域左側(cè)的像素數(shù);

scrollTop:被隱藏在內(nèi)容區(qū)域上方的像素數(shù);

如:

#pId{
        width: 100px;
        height: 100px;
        border: 1px solid gray;
        overflow: scroll;
    }

thisisamessage.thisisamessage.thisisamessage. thisisamessage.thisisamessage. thisisamessage. thisisamessage. thisisamessage. thisisamessage.thisisamessage. thisisamessage.thisisamessage.thisisamessage.thisisamessage.thisisamessage.thisisamessage.thisisamessage.

var x = document.getElementById("pId"); var t = setTimeout(echoo, 1000); function echoo() { console.log(x.scrollLeft); var y = setTimeout(echoo, 1000); }

另外,帶有垂直滾動條的頁面總高度就是document.documentElement.scrollHeight。

在不包含滾動條的頁面而言,scrollWidth和scrollHeight與clientWidth和clientHeight之間的關(guān)系并不是分清晰。一些瀏覽器會出現(xiàn)不一致問題,如:

Firefox 中這兩組屬性是相等的,大小代表的是文檔內(nèi)容區(qū)域的實際尺寸,非視口尺寸;

Opera、Safari >= 3.1、Chrome中這兩組屬性是有差別的,s...是視口大小,c...是文檔內(nèi)容區(qū)域的大??;

IE在標(biāo)準(zhǔn)模式下,s...是內(nèi)容區(qū)域大小,c...是視口大小;

要確定文檔的總高度時,必須取得s...或c...之間的最大值(Math.max),如:

var docHeight = Math.max(document.documentElement.scrollHeight, document.documentElement.clientHeight);
console.log(docHeight); //913
var docWidth = Math.max(document.documentElement.scrollWidth, document.documentElement.scrollWidth);
console.log(docWidth); //1280

下面的函數(shù)會檢測元素是否位于頂部,如果不是就會將其自動滾到頂部:

#pId{
        width: 150px;
        height: 200px;
        border: 1px solid gray;
        overflow: scroll;
    }

HTMLElement.offsetParent 是一個只讀屬性,返回一個指向最近的(closest,指包含層級上的最近)包含該元素的定位元素。如果沒有定位的元素,則 offsetParent 為最近的 table 元素對象或根元素(標(biāo)準(zhǔn)模式下為 html;quirks 模式下為 body)。當(dāng)元素的 style.display 設(shè)置為 "none" 時,offsetParent 返回 null。offsetParent 很有用,因為 offsetTop 和 offsetLeft 都是相對于其內(nèi)邊距邊界的。

var pElem = document.getElementById("pId"); var btn = document.getElementById("stt"); btn.onclick = scrollToTop; function scrollToTop() { if (pElem.scrollTop !== 0) { pElem.scrollTop = 0; } }
確定元素大小

getBoundingClientRect()方法會返回一個矩形對象,包含4個屬性:left、top、right和bottom:

var p = document.getElementById("divId");
console.log(p.getBoundingClientRect().right); //110
console.log(p.getBoundingClientRect().left); //10
console.log(p.getBoundingClientRect().top); //10
console.log(p.getBoundingClientRect().bottom); //60

注意:IE、Firefox3+、Opera9.5、Chrome、Safari支持,在IE中,默認(rèn)坐標(biāo)從(2,2)開始計算,導(dǎo)致最終距離比其他瀏覽器多出兩個像素,我們需要做個兼容。

document.documentElement.clientTop; // 非IE為0,IE為2
document.documentElement.clientLeft; // 非IE為0,IE為2
functiongGetRect(element) {
    var rect = element.getBoundingClientRect();
    var top = document.documentElement.clientTop;
    var left = document.documentElement.clientLeft;
    return {
        top: rect.top - top,
        bottom: rect.bottom - top,
        left: rect.left - left,
        right: rect.right - left
    }

}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/78350.html

相關(guān)文章

  • JavaScript DOM2DOM3——“DOM變化”注意要點

    摘要:和級分為許多模塊,分別描述了的某個非常具體的子集。這些模塊主要有核心視圖事件樣式遍歷和范圍以及。另外還有方法和方法框架的變化框架和內(nèi)嵌框架分別用和表示,它們在級中都有一個新屬性這個屬性包含一個指針,指向表示框架內(nèi)容的文檔對象。 DOM2和DOM3級分為許多模塊,分別描述了DOM的某個非常具體的子集。這些模塊主要有核心(Core)、視圖(Views)、事件(Events)、樣式(Styl...

    騫諱護(hù) 評論0 收藏0
  • JavaScript DOM2DOM3——“樣式注意要點

    摘要:如計算的樣式方法和屬性前者是增強(qiáng)了,這個方法接收兩個參數(shù)計算樣式的元素以及一個偽元素字符串如。操作表樣式類型表示的是樣式表,包括元素包含的樣式表和在元素中定義的樣式表。 層次:訪問style對象: style對象是CSSStyleDeclaration的實例; getComputedStyle方法也返回CSSStyleDeclaration的實例; 訪問樣式表: 元素包含的樣式表...

    Jason_Geng 評論0 收藏0
  • JavaScript DOM2DOM3——“遍歷”注意要點

    摘要:級遍歷和范圍模塊定義了兩個用于輔助完成順序遍歷結(jié)構(gòu)的類型和這兩個類型能夠基于給定的起點對結(jié)構(gòu)執(zhí)行深度優(yōu)先的遍歷操作。其中的屬性,表示任何遍歷方法在上一次遍歷中返回的接待你。通過設(shè)置這個屬性也可以修改遍歷繼續(xù)進(jìn)行的節(jié)點。 DOM2級遍歷和范圍模塊定義了兩個用于輔助完成順序遍歷DOM結(jié)構(gòu)的類型:NodeIterator和TreeWalker;這兩個類型能夠基于給定的起點對DOM結(jié)構(gòu)執(zhí)行深度...

    antz 評論0 收藏0
  • JavaScript DOM2DOM3——“范圍”注意要點

    摘要:級遍歷和范圍模塊定義了范圍接口。折疊范圍方法折疊就是指范圍中未選擇文檔的任何部分。表示折疊到范圍的起點,參數(shù)表示折疊到范圍的終點。常量指定比較當(dāng)前范圍的點和指定范圍的點。下節(jié)再討論及更早版本中的范圍 DOM2級遍歷和范圍模塊定義了范圍接口。通過范圍可以選擇文檔中的一個區(qū)域,而不必考慮節(jié)點的界限(選擇在后臺完成,對用戶是不可見的)。 DOM中的范圍 DOM2級在Document類型中定義...

    happyhuangjinjin 評論0 收藏0
  • DOM擴(kuò)展,DOM2DOM3

    摘要:擴(kuò)展選擇符的核心是兩個方法和。目前已完全支持的瀏覽器有和。在寫模式下,會根據(jù)指定的字符串創(chuàng)建新的子樹,然后用這個子樹完全替換調(diào)用元素。在刪除帶有事件處理程序或引用了其他對象子樹時,就有可能導(dǎo)致內(nèi)存占用問題。刪除集合中指定位置的規(guī)則。 DOM擴(kuò)展 選擇符API Selectors API Level 1 的核心是兩個方法:querySelector()和querySelectorAll(...

    suxier 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<