var image = document.getElmentById("myimage")
var imgurl = image.src //src屬性是圖片的URL
image.id === "myimage" // 判定要查找圖片的id
var f = document.forms[0]; //文檔中的第一個(gè)<form>
f.action = "submit.php"; //設(shè)置提交的URL
f.method = "POST"; //HTTP請(qǐng)求類(lèi)型
元素節(jié)點(diǎn)提供四個(gè)方法來(lái)操作屬性。
getAttribute() //獲取屬性
setAttribute() //設(shè)置屬性
hasAttribute() //檢測(cè)屬性是否存在
removeAttribute() //刪除屬性
2.1 Element.getAttribute()
getAttribute()方法返回當(dāng)前元素節(jié)點(diǎn)的指定屬性。如果指定屬性不存在,則返回null。
<div id="top" name="div"></div>
var t = document.getElementById('top');
t.getAttribute('name'); //div
2.2 Element.setAttribute()
setAttribute()方法用于為當(dāng)前元素節(jié)點(diǎn)新增屬性。如果屬性已經(jīng)存在,則相當(dāng)于修改已存在的屬性。
t.setAttribute('name','top2');
2.3 Element.hasAttribute()
hasAttribute()方法返回一個(gè)布爾值,表示當(dāng)前元素節(jié)點(diǎn)是否包含指定的屬性。
t.hasAttribute('name') //true
2.4 Element.removeAttribute()
removeAttribute()方法用于從當(dāng)前元素節(jié)點(diǎn)移除屬性。
t.removeAttribute('name')
//<div id="top"></div>
3、數(shù)據(jù)集(dataset)屬性
在HTML5文檔中,任意以“data-”為前綴的小寫(xiě)的屬性名字都是合法的。
HTML5還在Element對(duì)象上定義了dataset屬性。該屬性指代一個(gè)對(duì)象,它的各個(gè)屬性對(duì)應(yīng)于去掉前綴的data-屬性。因此dataset.x應(yīng)該保存data-x屬性的值。帶連字符的屬性對(duì)應(yīng)于駝峰命名法屬性名:data-jquery-test屬性就變成dataset.jqueryTest屬性。
<div id="top" data-tip="title"></div>
var t=document.getElementById('top');
t.dataset.tip //title
t.dataset.tip = 'title2'
注意:dataset屬性是元素的data-屬性的實(shí)時(shí)、雙向接口。設(shè)置或刪除dataset的一個(gè)屬性就等同于設(shè)置或移除對(duì)應(yīng)元素的data-屬性。
4、作為Attr節(jié)點(diǎn)的屬性
Node類(lèi)型定義了attributes屬性。針對(duì)非Element對(duì)象的任何節(jié)點(diǎn),該屬性為null。對(duì)于Element對(duì)象,attributes屬性是只讀的類(lèi)數(shù)組對(duì)象,它代表元素的所有屬性。類(lèi)似NodeList,attributes對(duì)象也是實(shí)時(shí)的,它可以用數(shù)字索引訪問(wèn),這意味著可以枚舉元素的所有屬性。而且,也可以用屬性名索引。
document.body.attributes[0] //<body>元素的第一個(gè)屬性
document.body.attributes.bgcolor // <body>元素的bgcolor屬性
document.body.attributes['ONLOAD'] // <body>元素的onload屬性。
屬性節(jié)點(diǎn)對(duì)象有name和value屬性,對(duì)應(yīng)該屬性的屬性名和屬性值,等同于nodeName屬性和nodeValue屬性。
<div id="top"></div>
var t = document.getElemntById('top');
t.attributes[0].name // "id"
t.attributes[0].nodeName // "id"
t.attributes[0].value // "top"
t.attributes[0].nodeValue // "top"
5、元素的內(nèi)容
5.1 作為HTML的元素內(nèi)容
讀取Element的innerHTML屬性作為字符串標(biāo)記返回那個(gè)元素的內(nèi)容。
<div id="top">內(nèi)容</div>
var t=document.getElementById('top');
t.innerHTML // 內(nèi)容
t.innerHTML = '內(nèi)容2';
//<div id="top">內(nèi)容2</div>
HTML5還標(biāo)準(zhǔn)化了outerHTML屬性。只有Element節(jié)點(diǎn)定義了outerHTML屬性,Document節(jié)點(diǎn)則無(wú)。
insertAdjacentHTML()
將任意的HTML標(biāo)記字符串插入到指定的元素“相鄰”位置。第一個(gè)參數(shù)為具有以下值之一的字符串:“beforebegin”、“afterbegin”、“beforeend”和“afterend”。標(biāo)記是該方法的第二個(gè)參數(shù)。
5.2 作為純文本的元素內(nèi)容
標(biāo)準(zhǔn)的方法是用Node的textContent屬性:
<div id="top"><p>內(nèi)容</p></div>
var t = document.getElementById('top');
t.textContent // 內(nèi)容
textContent屬性就是將指定元素的所有后代Text節(jié)點(diǎn)簡(jiǎn)單的串聯(lián)在一起。
textContent屬性在IE中不支持。在IE中,可以用innerText屬性來(lái)替代。
5.3 作為T(mén)ext節(jié)點(diǎn)的元素內(nèi)容
nodeValue屬性,保存Text節(jié)點(diǎn)的內(nèi)容。
下面的textContent()函數(shù),它遞歸地遍歷元素的子節(jié)點(diǎn),然后連接后代節(jié)點(diǎn)中所有的Text節(jié)點(diǎn)的文本。
function textContent(e){
var child,type,s=''; //s保存所有子節(jié)點(diǎn)的文本
for(child = e.firstChild; child !=null;child =child.nextSibling){
type = child.nodeType;
if(type === 3 || type === 4) //Text和CDATASection節(jié)點(diǎn)
{
s += child.nodeValue;
}else if( type === 1){
s += textContent(child);
}
return s;
}
}
CDATASection節(jié)點(diǎn),是在XML文檔中的,它是Text的子類(lèi)型,代表了CDATA段的內(nèi)容。
二、CSS
層疊樣式表(Cascading Style Sheet,CSS)是一種指定HTML文檔視覺(jué)表現(xiàn)的標(biāo)準(zhǔn)。
2.1 腳本化內(nèi)聯(lián)樣式
更改單獨(dú)的文檔元素的style屬性是腳本化CSS最直接了當(dāng)?shù)姆椒ā?/p>
style屬性的值并不是字符串,而是一個(gè)CSSStyleDeclaration對(duì)象。該style對(duì)象的JavaScript屬性代表了HTML代碼中通過(guò)style指定的CSS屬性。
<div id="top"></div>
var t = document.getElementById('top');
t.style.fontSize = '15px';
t.style.color = 'red';
//或
t.setAttribute('style','background:red;');
注意:CSSStyleDeclaration對(duì)象中的屬性名和實(shí)際的CSS屬性名有所區(qū)別。如果一個(gè)CSS屬性名包含一個(gè)或多個(gè)連字符,CSSStyleDeclaration屬性名的格式應(yīng)該是移除連字符,將每個(gè)連字符后面緊跟著的字母大寫(xiě)。比如:CSS屬性border-left-width的值在JavaScript中通過(guò)borderLeftWidth屬性進(jìn)行訪問(wèn)。
另外,當(dāng)一個(gè)CSS屬性(如float)在JavaScript中對(duì)應(yīng)的名字是保留字時(shí),在之前加“css”前綴來(lái)創(chuàng)建合法的CSSStyleDeclaration名字。
float -- cssFloat
注意:所有的定位屬性都需要包含單位。
t.style.left = 300 //錯(cuò)誤
t.style.left = '300px' //正確
style對(duì)象的cssText也可以用來(lái)讀寫(xiě)或刪除整個(gè)style屬性。
t.style.cssText
t.style.cssText = 'background:red';
style對(duì)象的以下三個(gè)方法,用來(lái)讀寫(xiě)行內(nèi)CSS規(guī)則。
setProperty(propertyName,value):設(shè)置某個(gè)CSS屬性。
getPropertyValue(propertyName):讀取某個(gè)CSS屬性。
removeProperty(propertyName):刪除某個(gè)CSS屬性。
這三個(gè)方法的第一個(gè)參數(shù),都是CSS屬性名,且不用改寫(xiě)連詞線。
t.style.setProperty('background-color','red');
t.style.getPropertyValue('background-color');
t.style.removeProperty('background-color');
上面的方法都是只能讀寫(xiě)內(nèi)聯(lián)樣式(用style來(lái)設(shè)置),如果要獲取引用的樣式或者偽元素樣式呢?
這時(shí)就要用到window對(duì)象的getComputedStyle()方法了!
window.getComputedStyle()
getComputedStyle()是瀏覽器窗口對(duì)象的方法,可用來(lái)獲得一個(gè)元素的計(jì)算樣式。此方法需要兩個(gè)參數(shù),第一個(gè)參數(shù)是要獲取其計(jì)算樣式的元素,第二個(gè)參數(shù)也是必需的,通常是null或空字符串,但它也可以是命名CSS偽對(duì)象的字符串,如:“:before”,“:after”,“:first-line”或者“:first-letter”。
getComputedStyle()方法返回的是一個(gè)CSSStyleDeclaration對(duì)象,它代表了應(yīng)用在指定元素(或偽對(duì)象)上的所有樣式。
<style>
#top{ line-height:30px;}
#top:before{content:'before';color:red};
</style>
<div id="top" style="background:red"></div>
var t = document.getElementById('top');
window.getComputedStyle(t,null).lineHeight //30px
window.getComputedStyle(t,':before').content // "before"
此外,還可以用window.getComputedStyle對(duì)象的getPropertyValue()方法,獲取屬性。
window.getComputedStyle(t,null).getPropertyValue('line-height'); //30px,不需使用連字符
計(jì)算樣式的CSSStyleDeclaration對(duì)象和表示內(nèi)聯(lián)樣式的對(duì)象的區(qū)別:
在IE中,每個(gè)HTML有自己的currentStyle屬性,它的值也是一個(gè)CSSStyleDeclaration對(duì)象。
function getStyle(dom, attr) {
var value = dom.currentStyle ? dom.currentStyle[attr] : getComputedStyle(dom, false)[attr];
return parseFloat(value);
}
getStyle(t,'lineHeight'); //30
2.2 腳本化CSS類(lèi)
通過(guò)改變或添加HTML的class屬性值,也是改變內(nèi)聯(lián)style屬性的一個(gè)方法。
由于標(biāo)識(shí)符class在JavaScript中是保留字,所以HTML屬性class在JavaScript代碼中使用className的JavaScript代碼。
t.className = 'attention'; //設(shè)置class屬性
t.className += 'attention2'; //添加class屬性
t.className = ''; //刪除全部class
t.className = t.className.replace('attention2',''); //刪除名為attention2的class
在HTML5中,每個(gè)元素都定義了classList屬性,該屬性值是DOMTokenList對(duì)象:一個(gè)只讀的類(lèi)數(shù)組對(duì)象,它包含元素的單獨(dú)類(lèi)名,而且是實(shí)時(shí)的。它有四個(gè)方法:
element.classList.add() //添加
element.classList.remove() //刪除
element.classList.contains() //是否包含
element.classList.toggle() //如果不存在類(lèi)名就添加,否則刪除
2.3 腳本化樣式表
在腳本化樣式表時(shí),我們會(huì)碰到兩類(lèi)需要使用的對(duì)象。
第一類(lèi)是元素對(duì)象,由<style>和<link>元素表示,兩種元素包含或引用樣式表。
第二類(lèi)是CSSStyleSheet對(duì)象,它表示樣式表本身。 document.styleSheets 屬性是一個(gè)只讀的類(lèi)數(shù)組對(duì)象,它包含CSSStyleSheet對(duì)象,表示與文檔關(guān)聯(lián)在一起的樣式表。
2.3.1 獲取樣式表
StyleSheet對(duì)象是一個(gè)類(lèi)數(shù)組對(duì)象。
var sheets = document.styleSheets;
var s = document.styleSheets[0];
當(dāng)然,你也可以通過(guò)選擇器獲取
<style id="styleElement">
body{ background:red }
</style>
document.querySelector('#styleElement').sheet
//等同于 document.styleSheets[0]
注意:styleSheets數(shù)組包含link節(jié)點(diǎn)和style的樣式表
2.3.2開(kāi)啟和關(guān)閉樣式表
<style>、<link>元素和CSSStyleSheet對(duì)象都定義了一個(gè)在JavaScript中可以設(shè)置和查詢(xún)的disabled屬性。顧名思義,如果disabled屬性為true,樣式表就被瀏覽器關(guān)閉并忽略。
document.styleSheets[0].disabled = true; //關(guān)閉第一張樣式表
//或
var s = document.querySelectorAll('styleElement');
s[0].disabled = true; //通過(guò)選擇器選擇樣式表
注意:disabled屬性只能在JavaScript中設(shè)置,不能在HTML語(yǔ)句中設(shè)置。
2.3.3 查詢(xún)、插入和刪除樣式表
document.styleSheets[]數(shù)組的元素是CSSStyleSheet對(duì)象。CSSStyleSheet對(duì)象有一個(gè)CSSRules[]屬性,指向一個(gè)類(lèi)數(shù)組對(duì)象,它包含樣式表的所有規(guī)則:
document.styleSheets[0].cssRules[0]
在IE中使用不同的屬性名rules代替CSSRules。
CSSRules[]或rules[]數(shù)組的元素為CSSRule對(duì)象。兩者還是有區(qū)別的:在標(biāo)準(zhǔn)API中,CSSRule對(duì)象包含所有CSS規(guī)則,包含@import和@page等指令;但在IE中,rules[]數(shù)組只包含樣式表中實(shí)際存在的樣式規(guī)則。
CSSRule對(duì)象有兩個(gè)屬性使用。
selectText是規(guī)則的CSS選擇器,它引用一個(gè)描述與選擇器相關(guān)聯(lián)的樣式的可寫(xiě)CSSStyleDeclaration對(duì)象。
cssText屬性來(lái)獲得規(guī)則的文本表示形式。
var s = document.querySelector('#styleElement').sheet; 或 document.styleSheets[0];
s.cssRules[0].cssText //body { background: red; }
s.cssRules[0].selectorText ///body
每條CSS規(guī)則還有一個(gè)style屬性,指向一個(gè)對(duì)象,用來(lái)讀寫(xiě)具體的CSS屬性。
s.cssRules[0].style.background //red
s.cssRules[0].style.background = 'blue';
styleSheets對(duì)象還有兩個(gè)方法 insertRule() 和 deleteRule() 方法來(lái)添加和刪除規(guī)則。不過(guò),在IE中,并不支持上面兩個(gè)方法,不過(guò)有 addRule() 和 removeRule() 方法。
insertRule方法的第一個(gè)參數(shù)是表示CSS規(guī)則的字符串,第二個(gè)參數(shù)是該規(guī)則在cssRules對(duì)象的插入位置。deleteRule方法的參數(shù)是該條規(guī)則在cssRules對(duì)象中的位置。
s.insertRule(' h1 { color:blue; }',0); //h1元素默認(rèn)是藍(lán)色
s.deleteRule(1);
//IE
s.addRule('h1','color:blue',s.cssRules.length);
s.removeRule(1);
2.3.4 創(chuàng)建新樣式表
document.createElement('style');
//或
var l = document.createElement('link');
l.setAttribute('rel', 'stylesheet');
l.setAttribute('type', 'text/css');
l.setAttribute('href', 'example.css');
document.head.appendChild(l);
document.head.appendChild(linkElm);
//IE
document.createStyleSheet()
2.4 CSS事件
在HTML5中,提供了CSS動(dòng)畫(huà)事件,讓我們可以監(jiān)聽(tīng)動(dòng)畫(huà)的進(jìn)程。
2.4.1 transitionEnd事件
CSS的過(guò)渡效果(transition)結(jié)束后,觸發(fā)transitionEnd事件。
function onTransitionEnd(elem, handler,capture) {
elem.addEventListener('transitionend', handler,capture);
elem.addEventListener('webkitTransitionEnd', handler,capture);
elem.addEventListener('mozTransitionEnd', handler,capture);
};
2.4.2 animationstart事件,animationend事件,animationiteration事件
CSS動(dòng)畫(huà)有以下三個(gè)事件:
element.addEventListener("animationstart", listener, false);
element.addEventListener("animationend", listener, false);
element.addEventListener("animationiteration", listener, false);
當(dāng)然,在實(shí)際使用過(guò)程中,需要加上前綴。
element.addEventListener('webkitAnimationStart',listener,false);
我們還可以控制動(dòng)畫(huà)的狀態(tài)。
animation-play-state屬性可以控制動(dòng)畫(huà)的狀態(tài)(暫停/播放),該屬性需求加上瀏覽器前綴。
element.style.webkitAnimationPlayState = "paused";
element.style.webkitAnimationPlayState = "running";
更多建議: