摘要:如計算的樣式方法和屬性前者是增強(qiáng)了,這個方法接收兩個參數(shù)計算樣式的元素以及一個偽元素字符串如。操作表樣式類型表示的是樣式表,包括元素包含的樣式表和在元素中定義的樣式表。
層次:
訪問style對象:
style對象是CSSStyleDeclaration的實例;
getComputedStyle方法也返回CSSStyleDeclaration的實例;
訪問樣式表:
元素包含的樣式表由HTMLLinkElement表示;
元素包含的樣式表由HTMLStyleElement表示;
StyleSheetList表示所有的樣式表;(document.styleSheets)
CSSStyleSheet表示該樣式表;(document.styleSheets[0]或document.getElementsByTagName("link").sheet/styleSheet);
訪問CSS規(guī)則:
CSSRuleList表示所有的CSS規(guī)則;(document.styleSheets[0].rules/cssRules);
CSSStyleRule表示該CSS規(guī)則;(document.styleSheets[0].cssRules[0]);
CSSStyleDeclaration則通過style屬性訪問;(document.styleSheets[0].cssRules[0].style);
舉例:
var div = document.getElementById("myDiv"); console.log(div.style.border); //1px solid black console.log(div.style.length); //18 console.log(div.style.cssText); //order: 1px solid black; background-color: red; console.log(div.style[0]); //background-color; div.style.removeProperty("border"); div.style.setProperty("border","1px solid blue"); console.log(div.style.getPropertyValue("border")); //1px solid blue console.log(document.defaultView.getComputedStyle(div).length); //263 console.log(document.defaultView.getComputedStyle(div).width); //100px; //以上是訪問元素的樣式 var styleElem = document.getElementsByTagName("style")[0]; //獲得style元素 var styleSheet = styleElem.sheet; //獲得樣式表 var rule = styleSheet.rules[0]; //獲得第一個css規(guī)則 console.log(rule.cssText); //#myDiv { width: 100px; height: 200px; background-color: blue; } console.log(rule.selectorText); //#myDiv console.log(rule.style); //CSSStyleDeclaration 此方法可以返回這個規(guī)則的樣式并可以賦值,設(shè)置新的樣式 console.log(rule.style.width); //100px rule.style.width = "200px"; console.log(rule.style.width); //200px var styleSheet2 = document.styleSheets[0]; console.log(styleSheet == styleSheet2); //True證明document.styleSheets與style標(biāo)簽返回的styleSheet是一樣的 styleSheet.insertRule("body{background-color:gray}",0); //在樣式表中插入新的CSS規(guī)則 styleSheet.deleteRule(0); //在樣式表中刪除某個CSS規(guī)則 //以上是操作樣式表
要確定瀏覽器是否支持DOM2級定義的CSS能力,可以使用下列代碼:
var supportsDOM2CSS = document.implementation.hasFeature("CSS","2.0"); var supportsDOM2CSS2 = document.implementation.hasFeature("CSS2","2.0");訪問元素的樣式
需要注意的是,由于float是js中的保留字,因此不能用作屬性名。而是cssFloat或IE中的styleFloat;style對象是CSSStyleDeclaration的實例。
另外,在標(biāo)準(zhǔn)模式下,所有度量值都必須指定一個度量單位。
DOM樣式屬性和方法DOM2級樣式規(guī)范還為style對象定義了一些屬性和方法:
cssText;
length;
parentRule;
getPropertyCSSValue(propertyName);
getPropertyPriority(propertyName);
getPropertyValue(propertyName);
item(index);
removeProperty(propertyName);
setProperty(propertyName,value,priority);
cssText屬性style的屬性,該模式可以訪問style特性中的CSS代碼。讀取模式下,返回style特性中CSS代碼的內(nèi)部表示;在寫入模式下,賦給cssText的值會重寫整個style特性的值。如:
length屬性Document this is a paragraph.
style的屬性,length的目的,就是將其與item()方法配套使用,以便迭代在元素中定義的CSS屬性。如:
getPropertyValue()方法this is a paragraph.
style的屬性,可以使用屬性名進(jìn)一步取得屬性的值。如:
getPropertyCSSValue()方法this is a paragraph.
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
摘要:和級分為許多模塊,分別描述了的某個非常具體的子集。這些模塊主要有核心視圖事件樣式遍歷和范圍以及。另外還有方法和方法框架的變化框架和內(nèi)嵌框架分別用和表示,它們在級中都有一個新屬性這個屬性包含一個指針,指向表示框架內(nèi)容的文檔對象。 DOM2和DOM3級分為許多模塊,分別描述了DOM的某個非常具體的子集。這些模塊主要有核心(Core)、視圖(Views)、事件(Events)、樣式(Styl...
摘要:如計算的樣式方法和屬性前者是增強(qiáng)了,這個方法接收兩個參數(shù)計算樣式的元素以及一個偽元素字符串如。操作表樣式類型表示的是樣式表,包括元素包含的樣式表和在元素中定義的樣式表。 層次:訪問style對象: style對象是CSSStyleDeclaration的實例; getComputedStyle方法也返回CSSStyleDeclaration的實例; 訪問樣式表: 元素包含的樣式表...
摘要:級遍歷和范圍模塊定義了兩個用于輔助完成順序遍歷結(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í)行深度...
摘要:級遍歷和范圍模塊定義了范圍接口。折疊范圍方法折疊就是指范圍中未選擇文檔的任何部分。表示折疊到范圍的起點,參數(shù)表示折疊到范圍的終點。常量指定比較當(dāng)前范圍的點和指定范圍的點。下節(jié)再討論及更早版本中的范圍 DOM2級遍歷和范圍模塊定義了范圍接口。通過范圍可以選擇文檔中的一個區(qū)域,而不必考慮節(jié)點的界限(選擇在后臺完成,對用戶是不可見的)。 DOM中的范圍 DOM2級在Document類型中定義...
摘要:擴(kuò)展選擇符的核心是兩個方法和。目前已完全支持的瀏覽器有和。在寫模式下,會根據(jù)指定的字符串創(chuàng)建新的子樹,然后用這個子樹完全替換調(diào)用元素。在刪除帶有事件處理程序或引用了其他對象子樹時,就有可能導(dǎo)致內(nèi)存占用問題。刪除集合中指定位置的規(guī)則。 DOM擴(kuò)展 選擇符API Selectors API Level 1 的核心是兩個方法:querySelector()和querySelectorAll(...
閱讀 1842·2021-09-22 15:55
閱讀 3532·2021-09-07 10:26
閱讀 638·2019-08-30 15:54
閱讀 693·2019-08-29 16:34
閱讀 847·2019-08-26 14:04
閱讀 3271·2019-08-26 11:47
閱讀 2142·2019-08-26 11:33
閱讀 2300·2019-08-23 15:17