js正確獲取元素樣式詳解
更新時(shí)間:2009年08月07日 01:16:47 作者:
當(dāng)js獲取這三種樣式時(shí),style只能獲取內(nèi)聯(lián)樣式,獲取不到外部樣式和嵌入式樣式,因此要用currentStyle屬性,而currentStyle在FF下不支持
在說(shuō)js獲取元素樣式之前,簡(jiǎn)單地談一下樣式
樣式分三種
外部樣式 External Style Sheet
以CSS為擴(kuò)展名的文件(又稱為"超文本樣式表"文件),它的作用范圍可以是多張網(wǎng)頁(yè),或整個(gè)網(wǎng)站,甚至不同的網(wǎng)站。與網(wǎng)頁(yè)鏈接后,才能應(yīng)用。
嵌入式樣式 internal Style Sheet
包含在網(wǎng)頁(yè)內(nèi)部的樣式設(shè)置,它的作用范圍僅限于嵌入的網(wǎng)頁(yè)。
內(nèi)聯(lián)式樣式 inline Style
在HTML文檔中,內(nèi)聯(lián)式樣式表的格式化信息直接插入所應(yīng)用的網(wǎng)頁(yè)元素的HTML標(biāo)簽中,作為其HTML標(biāo)簽的屬性參數(shù)。嚴(yán)格地說(shuō),內(nèi)聯(lián)樣式表稱不上表,僅僅是一條HTML標(biāo)記。
當(dāng)出現(xiàn)相同的樣式時(shí),優(yōu)先級(jí)是內(nèi)聯(lián)大于嵌入式樣式, 嵌入式樣式大于外部樣式。
---------------------------------------------------------------
當(dāng)js獲取這三種樣式時(shí),style只能獲取內(nèi)聯(lián)樣式,獲取不到外部樣式和嵌入式樣式,因此要用currentStyle屬性,而currentStyle在FF下不支持
下面介紹二種 兼容FF和IE和正確獲取樣式的方法
var $=function(id){return document.getElementById(id) };
方法一
/*
* @string id
* @string styleName 樣式名
*/
function getEyeJsStyle(id,styleName){
if($(id).currentStyle){//ie
return $(id).currentStyle[styleName];
}else{ //ff
var $arr=$(id).ownerDocument.defaultView.getComputedStyle($(id), null);
return $arr[styleName];
}
}
方法二:
HTMLElement.prototype.__defineGetter__("currentStyle", function () {
return this.ownerDocument.defaultView.getComputedStyle(this, null);
});
講述一下getComputedStyle函數(shù)的用法
這個(gè)函數(shù)有兩個(gè)參數(shù):
第一個(gè)參數(shù)為需要獲取樣式的元素對(duì)象;
第二個(gè)參數(shù)為偽元素,如:hover, :first-letter, :before等等,
如果不需要偽元素則該參數(shù)為null。
getComputedStyle()函數(shù)可以從 document.defaultView 對(duì)象中訪問(wèn)到,即可以這樣調(diào)用該函數(shù)
--------------------------------------------------------------------------------------------
順便說(shuō)一下runtimeStyle屬性,首頁(yè)該屬性只在IE中支持,在FF不支持
runtimeStyle 運(yùn)行時(shí)的樣式!如果與style的屬性重疊,將覆蓋style的屬性!
意思就是當(dāng)指定了runtimeStyle,那么當(dāng)前顯示的樣式以runtimeStyle為準(zhǔn),如果取消了runtimeStyle,那么當(dāng)前顯示樣式就恢復(fù)到currentStyle的樣式。
案例:
設(shè)置document.getElementById("eyejs").runtimeStyle.width="400px"; 那該元素的寬度就是400px,,將覆蓋style的屬性
案例分析打包下載
樣式分三種
外部樣式 External Style Sheet
以CSS為擴(kuò)展名的文件(又稱為"超文本樣式表"文件),它的作用范圍可以是多張網(wǎng)頁(yè),或整個(gè)網(wǎng)站,甚至不同的網(wǎng)站。與網(wǎng)頁(yè)鏈接后,才能應(yīng)用。
嵌入式樣式 internal Style Sheet
包含在網(wǎng)頁(yè)內(nèi)部的樣式設(shè)置,它的作用范圍僅限于嵌入的網(wǎng)頁(yè)。
內(nèi)聯(lián)式樣式 inline Style
在HTML文檔中,內(nèi)聯(lián)式樣式表的格式化信息直接插入所應(yīng)用的網(wǎng)頁(yè)元素的HTML標(biāo)簽中,作為其HTML標(biāo)簽的屬性參數(shù)。嚴(yán)格地說(shuō),內(nèi)聯(lián)樣式表稱不上表,僅僅是一條HTML標(biāo)記。
當(dāng)出現(xiàn)相同的樣式時(shí),優(yōu)先級(jí)是內(nèi)聯(lián)大于嵌入式樣式, 嵌入式樣式大于外部樣式。
---------------------------------------------------------------
當(dāng)js獲取這三種樣式時(shí),style只能獲取內(nèi)聯(lián)樣式,獲取不到外部樣式和嵌入式樣式,因此要用currentStyle屬性,而currentStyle在FF下不支持
下面介紹二種 兼容FF和IE和正確獲取樣式的方法
復(fù)制代碼 代碼如下:
var $=function(id){return document.getElementById(id) };
方法一
/*
* @string id
* @string styleName 樣式名
*/
function getEyeJsStyle(id,styleName){
if($(id).currentStyle){//ie
return $(id).currentStyle[styleName];
}else{ //ff
var $arr=$(id).ownerDocument.defaultView.getComputedStyle($(id), null);
return $arr[styleName];
}
}
方法二:
復(fù)制代碼 代碼如下:
HTMLElement.prototype.__defineGetter__("currentStyle", function () {
return this.ownerDocument.defaultView.getComputedStyle(this, null);
});
講述一下getComputedStyle函數(shù)的用法
這個(gè)函數(shù)有兩個(gè)參數(shù):
第一個(gè)參數(shù)為需要獲取樣式的元素對(duì)象;
第二個(gè)參數(shù)為偽元素,如:hover, :first-letter, :before等等,
如果不需要偽元素則該參數(shù)為null。
getComputedStyle()函數(shù)可以從 document.defaultView 對(duì)象中訪問(wèn)到,即可以這樣調(diào)用該函數(shù)
--------------------------------------------------------------------------------------------
順便說(shuō)一下runtimeStyle屬性,首頁(yè)該屬性只在IE中支持,在FF不支持
runtimeStyle 運(yùn)行時(shí)的樣式!如果與style的屬性重疊,將覆蓋style的屬性!
意思就是當(dāng)指定了runtimeStyle,那么當(dāng)前顯示的樣式以runtimeStyle為準(zhǔn),如果取消了runtimeStyle,那么當(dāng)前顯示樣式就恢復(fù)到currentStyle的樣式。
案例:
設(shè)置document.getElementById("eyejs").runtimeStyle.width="400px"; 那該元素的寬度就是400px,,將覆蓋style的屬性
案例分析打包下載
相關(guān)文章
JS實(shí)現(xiàn)移動(dòng)端在線簽協(xié)議功能
這篇文章主要介紹了JS實(shí)現(xiàn)移動(dòng)端在線簽協(xié)議功能,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08關(guān)于javascript中限定時(shí)間內(nèi)防止按鈕重復(fù)點(diǎn)擊的思路詳解
下面小編就為大家?guī)?lái)一篇關(guān)于javascript中限定時(shí)間內(nèi)防止按鈕重復(fù)點(diǎn)擊的思路詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-08-08ES6如何用一句代碼實(shí)現(xiàn)函數(shù)的柯里化
這篇文章主要介紹了ES6如何用一句代碼實(shí)現(xiàn)函數(shù)的柯里化,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-01-01刪除javascript所創(chuàng)建子節(jié)點(diǎn)的方法
這篇文章主要介紹了刪除javascript所創(chuàng)建子節(jié)點(diǎn)的方法,涉及javascript針對(duì)頁(yè)面節(jié)點(diǎn)元素的操作技巧,需要的朋友可以參考下2015-05-05js toFixed()方法的重寫實(shí)現(xiàn)精度的統(tǒng)一
凡用過(guò)js 中的toFix() 方法的, 應(yīng)該都知道這個(gè)方法存在一個(gè)小小的BUG,在IE 下和FF 下對(duì)于小數(shù)的進(jìn)位有點(diǎn)不同2014-03-03JavaScript性能優(yōu)化總結(jié)之加載與執(zhí)行
本文詳細(xì)介紹了如何正確的加載和執(zhí)行JavaScript代碼,從而提高其在瀏覽器中的性能。對(duì)JavaScript學(xué)習(xí)者很有幫助,有需要的可以參考學(xué)習(xí)。2016-08-08JS選項(xiàng)卡動(dòng)態(tài)替換banner圖片路徑的方法
這篇文章主要介紹了JS選項(xiàng)卡動(dòng)態(tài)替換banner圖片路徑的方法,涉及javascript操作文件css樣式的相關(guān)技巧,非常簡(jiǎn)單實(shí)用,需要的朋友可以參考下2015-05-05