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

資訊專欄INFORMATION COLUMN

JavaScript DOM2和DOM3——“樣式”的注意要點(diǎn)

Jason_Geng / 422人閱讀

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

層次:
訪問(wèn)style對(duì)象:

style對(duì)象是CSSStyleDeclaration的實(shí)例;

getComputedStyle方法也返回CSSStyleDeclaration的實(shí)例;

訪問(wèn)樣式表:

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

this is a paragraph.

length屬性

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


    

this is a paragraph.

getPropertyValue()方法

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


    

this is a paragraph.

getPropertyCSSValue()方法

style屬性,返回一個(gè)包含兩個(gè)屬性的CSSValue對(duì)象,這兩個(gè)屬性分別是cssText和cssValueType。其中,cssText屬性的值與getPropertyValue()返回的值相同,而cssValueType屬性則是一個(gè)數(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)
}

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

removeProperty()方法

該屬性的目的是要移除某個(gè)CSS屬性。如:

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

該屬性的目的是要添加某個(gè)CSS屬性。如:

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

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



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

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實(shí)例。

操作表樣式

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

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

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

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

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

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

title:ownerNode中title值;

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

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

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

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

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

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

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

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

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

層次梳理:

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

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

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

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

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

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

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

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

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

以下面的代碼為例:


script代碼如下:

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

console.log(rule.cssText); //#myDiv { width: 100px; height: 200px; background-color: blue; }(獲得該規(guī)則對(duì)應(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ī)則;接收兩個(gè)參數(shù):規(guī)則文本和插入規(guī)則的索引。IE8及更早的的瀏覽器支持類似的方法:addRule(),接收兩個(gè)必選參數(shù):選擇符文本、CSS樣式信息和一個(gè)可選參數(shù):插入規(guī)則的位置;

刪除規(guī)則

deleteRule()方法,接收一個(gè)參數(shù):要?jiǎng)h除的規(guī)則的位置,IE中用removeRule()方法

元素大小

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

偏移量

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

offsetWidth:水平方向上占用的空間大?。?/p>

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

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

如下面的div元素:



script:

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

對(duì)塊級(jí)元素來(lái)說(shuō),offsetTop、offsetLeft、offsetWidth 及 offsetHeight 描述了元素相對(duì)于 offsetParent 的邊界框。

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

    
th1 th2
td1 td2

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

客戶區(qū)大小

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

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

又如使用該屬性取得瀏覽器視口大小:

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}
滾動(dòng)大小

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

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

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

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

scrollTop:被隱藏在內(nèi)容區(qū)域上方的像素?cái)?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); }

另外,帶有垂直滾動(dòng)條的頁(yè)面總高度就是document.documentElement.scrollHeight。

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

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

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

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

要確定文檔的總高度時(shí),必須取得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ù)會(huì)檢測(cè)元素是否位于頂部,如果不是就會(huì)將其自動(dòng)滾到頂部:

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

HTMLElement.offsetParent 是一個(gè)只讀屬性,返回一個(gè)指向最近的(closest,指包含層級(jí)上的最近)包含該元素的定位元素。如果沒(méi)有定位的元素,則 offsetParent 為最近的 table 元素對(duì)象或根元素(標(biāo)準(zhǔn)模式下為 html;quirks 模式下為 body)。當(dāng)元素的 style.display 設(shè)置為 "none" 時(shí),offsetParent 返回 null。offsetParent 很有用,因?yàn)?offsetTop 和 offsetLeft 都是相對(duì)于其內(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()方法會(huì)返回一個(gè)矩形對(duì)象,包含4個(gè)屬性: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)開(kāi)始計(jì)算,導(dǎo)致最終距離比其他瀏覽器多出兩個(gè)像素,我們需要做個(gè)兼容。

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)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

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

相關(guān)文章

  • JavaScript DOM2DOM3——“DOM變化”注意要點(diǎn)

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

    騫諱護(hù) 評(píng)論0 收藏0
  • JavaScript DOM2DOM3——“樣式注意要點(diǎn)

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

    whjin 評(píng)論0 收藏0
  • JavaScript DOM2DOM3——“遍歷”注意要點(diǎn)

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

    antz 評(píng)論0 收藏0
  • JavaScript DOM2DOM3——“范圍”注意要點(diǎn)

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

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

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

    suxier 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<