摘要:如計(jì)算的樣式方法和屬性前者是增強(qiáng)了,這個(gè)方法接收兩個(gè)參數(shù)計(jì)算樣式的元素以及一個(gè)偽元素字符串如。操作表樣式類型表示的是樣式表,包括元素包含的樣式表和在元素中定義的樣式表。
層次:
訪問(wèn)style對(duì)象:
style對(duì)象是CSSStyleDeclaration的實(shí)例;
getComputedStyle方法也返回CSSStyleDeclaration的實(shí)例;
訪問(wèn)樣式表:
元素包含的樣式表由HTMLLinkElement表示;
元素包含的樣式表由HTMLStyleElement表示;
StyleSheetList表示所有的樣式表;(document.styleSheets)
CSSStyleSheet表示該樣式表;(document.styleSheets[0]或document.getElementsByTagName("link").sheet/styleSheet);
訪問(wèn)CSS規(guī)則:
CSSRuleList表示所有的CSS規(guī)則;(document.styleSheets[0].rules/cssRules);
CSSStyleRule表示該CSS規(guī)則;(document.styleSheets[0].cssRules[0]);
CSSStyleDeclaration則通過(guò)style屬性訪問(wèn);(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; //以上是訪問(wèn)元素的樣式 var styleElem = document.getElementsByTagName("style")[0]; //獲得style元素 var styleSheet = styleElem.sheet; //獲得樣式表 var rule = styleSheet.rules[0]; //獲得第一個(gè)css規(guī)則 console.log(rule.cssText); //#myDiv { width: 100px; height: 200px; background-color: blue; } console.log(rule.selectorText); //#myDiv console.log(rule.style); //CSSStyleDeclaration 此方法可以返回這個(gè)規(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); //在樣式表中刪除某個(gè)CSS規(guī)則 //以上是操作樣式表
要確定瀏覽器是否支持DOM2級(jí)定義的CSS能力,可以使用下列代碼:
var supportsDOM2CSS = document.implementation.hasFeature("CSS","2.0"); var supportsDOM2CSS2 = document.implementation.hasFeature("CSS2","2.0");訪問(wèn)元素的樣式
需要注意的是,由于float是js中的保留字,因此不能用作屬性名。而是cssFloat或IE中的styleFloat;style對(duì)象是CSSStyleDeclaration的實(shí)例。
另外,在標(biāo)準(zhǔn)模式下,所有度量值都必須指定一個(gè)度量單位。
DOM樣式屬性和方法DOM2級(jí)樣式規(guī)范還為style對(duì)象定義了一些屬性和方法:
cssText;
length;
parentRule;
getPropertyCSSValue(propertyName);
getPropertyPriority(propertyName);
getPropertyValue(propertyName);
item(index);
removeProperty(propertyName);
setProperty(propertyName,value,priority);
cssText屬性style的屬性,該模式可以訪問(wèn)style特性中的CSS代碼。讀取模式下,返回style特性中CSS代碼的內(nèi)部表示;在寫(xiě)入模式下,賦給cssText的值會(huì)重寫(xiě)整個(gè)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屬性,返回一個(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
摘要:和級(jí)分為許多模塊,分別描述了的某個(gè)非常具體的子集。這些模塊主要有核心視圖事件樣式遍歷和范圍以及。另外還有方法和方法框架的變化框架和內(nèi)嵌框架分別用和表示,它們?cè)诩?jí)中都有一個(gè)新屬性這個(gè)屬性包含一個(gè)指針,指向表示框架內(nèi)容的文檔對(duì)象。 DOM2和DOM3級(jí)分為許多模塊,分別描述了DOM的某個(gè)非常具體的子集。這些模塊主要有核心(Core)、視圖(Views)、事件(Events)、樣式(Styl...
摘要:如計(jì)算的樣式方法和屬性前者是增強(qiáng)了,這個(gè)方法接收兩個(gè)參數(shù)計(jì)算樣式的元素以及一個(gè)偽元素字符串如。操作表樣式類型表示的是樣式表,包括元素包含的樣式表和在元素中定義的樣式表。 層次:訪問(wèn)style對(duì)象: style對(duì)象是CSSStyleDeclaration的實(shí)例; getComputedStyle方法也返回CSSStyleDeclaration的實(shí)例; 訪問(wè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í)行深度...
摘要:級(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類型中定義...
摘要:擴(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(...
閱讀 3145·2021-11-19 09:40
閱讀 2446·2021-10-14 09:42
閱讀 1725·2021-09-22 15:34
閱讀 1456·2019-08-30 15:55
閱讀 791·2019-08-29 12:59
閱讀 423·2019-08-28 18:28
閱讀 1831·2019-08-26 13:42
閱讀 1536·2019-08-26 13:29