1. 程式人生 > >函式 getStyle() 獲取元素 CSS 樣式

函式 getStyle() 獲取元素 CSS 樣式



 element.style.backgroundColor = '#000';

然而,很多時候我們在修改元素的樣式之前要先保留元素原來的樣式屬性值,或許可以這麼做:

 var bc = element.style.backgroundColor;

這麼做有可能獲取到element元素的background-color屬性值,但是,在多數情況下獲取到的確實 'undefined',何解??

原因很簡單,就是element.style只能獲取到element的內聯樣式,而在一個設計良好的網頁檔案裡,樣式表一般是與文件結構分離開來以外部檔案存在的。所以,僅僅用element.style不能如意地獲取元素CSS樣式!

那麼,有什麼方法可以獲取外部樣式嗎?答案是:有的,不過存在 IE 與 W3C 的相容問題!

在 IE 中,element 除了有 style 屬性之外,還有一個 currentStyle 屬性。currentStyle 的用法和 style 的用法一樣,然而不同的是,currentStyle 如名字所示獲取到的是 element 元素當前(所有的)樣式:

 var cbc = element.currentStyle.backgroundColor;//一定是元素當前的樣式

 var bc = element.style.backgroundColor;//多數情況下為undefined,囧...

好了,在 IE 下我們已經解決了獲取外部樣式的問題。然而,在 Firefox 等支援W3C DOM標準的瀏覽器卻不支援currentStyle屬性,所以只能另尋他方了。不用急,DOM也提供獲取元素當前樣式的,只不過稍稍麻煩一點點^_^

DOM提供了一個 getComputedStyle() 方法獲取給定元素的樣式表。這個函式有兩個引數:第一個引數為需要獲取樣式的元素物件;第二個引數為偽元素,如:hover, :first-letter, :before等等,如果不需要偽元素則該引數為null。getComputedStyle()函式可以從 document.defaultView 物件中訪問到,即可以這樣呼叫該函式:

 var cbc = document.defaultView.getComputedStyle(element,null).backgroundColor;

以上語句的作用就是獲取 element 元素當前的 background-color 屬性值。

getComputeStyle()函式的呼叫結果就是 element 元素的樣式表,理應是一個物件。該物件還有一個方法:getPropertyValue()。該方法只有一個引數,即需要獲取的樣式的屬性名,屬性名與樣式表中的形式相同,即背景色的屬性名為 background-color,而非 backgroundColor。

好吧,以下開始定義getStyle()函式,或許分析完以下的程式碼段之後,可以對以上的解說更形象的理解。和以前一樣,凡在標題開頭帶有'[JS庫]'字樣的文章都是為了充實我個人的 JS 庫:pan,所以如果無法理解以下程式碼的編寫形式,請先參閱之前的'[JS庫]'相關博文:

(function(){

    if(!window.pan){
        window['pan']={};
    }

    //pan庫中其它函式的定義,略

    //
    function getStyle(elem,styleName){
        if(elem.style[styleName]){//內聯樣式
            return elem.style[styleName];
        }
        else if(elem.currentStyle){//IE
            return elem.currentStyle[styleName];
        }
        else if(document.defaultView && document.defaultView.getComputedStyle){//DOM
            styleName = styleName.replace(/([A-Z])/g,'-$1').toLowerCase();
            var s = document.defaultView.getComputedStyle(elem,'');
            return s&&s.getPropertyValue(styleName);
        }
        else{//other,for example, Safari
            return null;
        }
    }
    window['pan']['getStyle'] = getStyle;

})();

需要說明的一點是,Safari不支援document.defaultView,所以以上函式獲取元素外部樣式不支援Safari瀏覽器。

這個函式的用法非常簡單,傳遞兩個引數:第一個引數為需要獲取樣式的元素物件;第二個引數為樣式的屬性名,屬性名規則與style一致,即多個單詞的屬性名除了第一個單詞外其它的均需首字母大寫:

 var cbc = pan.getStyle(element, 'backgroundColor');//獲取背景色

 var w = pan.getStyle(element, 'width');//獲取寬度

 var blw = pan.getStyle(element, 'borderLeftWidth');//獲取左邊框的寬度

好了,這個函式就寫到這裡,相信我已經將該函式的內部邏輯結構和用法都說明清楚了,呵呵,我的JS庫又新添了一個函數了^_^

PS:該函式有待改進,如第一個引數可以不侷限於傳遞元素物件。

_ _________________________________________________________________

 element.style.backgroundColor = '#000';

然而,很多時候我們在修改元素的樣式之前要先保留元素原來的樣式屬性值,或許可以這麼做:

 var bc = element.style.backgroundColor;

這麼做有可能獲取到element元素的background-color屬性值,但是,在多數情況下獲取到的確實 'undefined',何解??

原因很簡單,就是element.style只能獲取到element的內聯樣式,而在一個設計良好的網頁檔案裡,樣式表一般是與文件結構分離開來以外部檔案存在的。所以,僅僅用element.style不能如意地獲取元素CSS樣式!

那麼,有什麼方法可以獲取外部樣式嗎?答案是:有的,不過存在 IE 與 W3C 的相容問題!

在 IE 中,element 除了有 style 屬性之外,還有一個 currentStyle 屬性。currentStyle 的用法和 style 的用法一樣,然而不同的是,currentStyle 如名字所示獲取到的是 element 元素當前(所有的)樣式:

 var cbc = element.currentStyle.backgroundColor;//一定是元素當前的樣式

 var bc = element.style.backgroundColor;//多數情況下為undefined,囧...

好了,在 IE 下我們已經解決了獲取外部樣式的問題。然而,在 Firefox 等支援W3C DOM標準的瀏覽器卻不支援currentStyle屬性,所以只能另尋他方了。不用急,DOM也提供獲取元素當前樣式的,只不過稍稍麻煩一點點^_^

DOM提供了一個 getComputedStyle() 方法獲取給定元素的樣式表。這個函式有兩個引數:第一個引數為需要獲取樣式的元素物件;第二個引數為偽元素,如:hover, :first-letter, :before等等,如果不需要偽元素則該引數為null。getComputedStyle()函式可以從 document.defaultView 物件中訪問到,即可以這樣呼叫該函式:

 var cbc = document.defaultView.getComputedStyle(element,null).backgroundColor;

以上語句的作用就是獲取 element 元素當前的 background-color 屬性值。

getComputeStyle()函式的呼叫結果就是 element 元素的樣式表,理應是一個物件。該物件還有一個方法:getPropertyValue()。該方法只有一個引數,即需要獲取的樣式的屬性名,屬性名與樣式表中的形式相同,即背景色的屬性名為 background-color,而非 backgroundColor。

好吧,以下開始定義getStyle()函式,或許分析完以下的程式碼段之後,可以對以上的解說更形象的理解。和以前一樣,凡在標題開頭帶有'[JS庫]'字樣的文章都是為了充實我個人的 JS 庫:pan,所以如果無法理解以下程式碼的編寫形式,請先參閱之前的'[JS庫]'相關博文:

(function(){

    if(!window.pan){
        window['pan']={};
    }

    //pan庫中其它函式的定義,略

    //
    function getStyle(elem,styleName){
        if(elem.style[styleName]){//內聯樣式
            return elem.style[styleName];
        }
        else if(elem.currentStyle){//IE
            return elem.currentStyle[styleName];
        }
        else if(document.defaultView && document.defaultView.getComputedStyle){//DOM
            styleName = styleName.replace(/([A-Z])/g,'-$1').toLowerCase();
            var s = document.defaultView.getComputedStyle(elem,'');
            return s&&s.getPropertyValue(styleName);
        }
        else{//other,for example, Safari
            return null;
        }
    }
    window['pan']['getStyle'] = getStyle;

})();

需要說明的一點是,Safari不支援document.defaultView,所以以上函式獲取元素外部樣式不支援Safari瀏覽器。

這個函式的用法非常簡單,傳遞兩個引數:第一個引數為需要獲取樣式的元素物件;第二個引數為樣式的屬性名,屬性名規則與style一致,即多個單詞的屬性名除了第一個單詞外其它的均需首字母大寫:

 var cbc = pan.getStyle(element, 'backgroundColor');//獲取背景色

 var w = pan.getStyle(element, 'width');//獲取寬度

 var blw = pan.getStyle(element, 'borderLeftWidth');//獲取左邊框的寬度

好了,這個函式就寫到這裡,相信我已經將該函式的內部邏輯結構和用法都說明清楚了,呵呵,我的JS庫又新添了一個函數了^_^

PS:該函式有待改進,如第一個引數可以不侷限於傳遞元素物件。


//獲取最終樣式
function getStyle(obj, attr)
{
return parseFloat(obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle(obj, null)[attr])
}

 element.style.backgroundColor = '#000';

然而,很多時候我們在修改元素的樣式之前要先保留元素原來的樣式屬性值,或許可以這麼做:

 var bc = element.style.backgroundColor;

這麼做有可能獲取到element元素的background-color屬性值,但是,在多數情況下獲取到的確實 'undefined',何解??

原因很簡單,就是element.style只能獲取到element的內聯樣式,而在一個設計良好的網頁檔案裡,樣式表一般是與文件結構分離開來以外部檔案存在的。所以,僅僅用element.style不能如意地獲取元素CSS樣式!

那麼,有什麼方法可以獲取外部樣式嗎?答案是:有的,不過存在 IE 與 W3C 的相容問題!

在 IE 中,element 除了有 style 屬性之外,還有一個 currentStyle 屬性。currentStyle 的用法和 style 的用法一樣,然而不同的是,currentStyle 如名字所示獲取到的是 element 元素當前(所有的)樣式:

 var cbc = element.currentStyle.backgroundColor;//一定是元素當前的樣式

 var bc = element.style.backgroundColor;//多數情況下為undefined,囧...

好了,在 IE 下我們已經解決了獲取外部樣式的問題。然而,在 Firefox 等支援W3C DOM標準的瀏覽器卻不支援currentStyle屬性,所以只能另尋他方了。不用急,DOM也提供獲取元素當前樣式的,只不過稍稍麻煩一點點^_^

DOM提供了一個 getComputedStyle() 方法獲取給定元素的樣式表。這個函式有兩個引數:第一個引數為需要獲取樣式的元素物件;第二個引數為偽元素,如:hover, :first-letter, :before等等,如果不需要偽元素則該引數為null。getComputedStyle()函式可以從 document.defaultView 物件中訪問到,即可以這樣呼叫該函式:

 var cbc = document.defaultView.getComputedStyle(element,null).backgroundColor;

以上語句的作用就是獲取 element 元素當前的 background-color 屬性值。

getComputeStyle()函式的呼叫結果就是 element 元素的樣式表,理應是一個物件。該物件還有一個方法:getPropertyValue()。該方法只有一個引數,即需要獲取的樣式的屬性名,屬性名與樣式表中的形式相同,即背景色的屬性名為 background-color,而非 backgroundColor。

好吧,以下開始定義getStyle()函式,或許分析完以下的程式碼段之後,可以對以上的解說更形象的理解。和以前一樣,凡在標題開頭帶有'[JS庫]'字樣的文章都是為了充實我個人的 JS 庫:pan,所以如果無法理解以下程式碼的編寫形式,請先參閱之前的'[JS庫]'相關博文:

(function(){

    if(!window.pan){
        window['pan']={};
    }

    //pan庫中其它函式的定義,略

    //
    function getStyle(elem,styleName){
        if(elem.style[styleName]){//內聯樣式
            return elem.style[styleName];
        }
        else if(elem.currentStyle){//IE
            return elem.currentStyle[styleName];
        }
        else if(document.defaultView && document.defaultView.getComputedStyle){//DOM
            styleName = styleName.replace(/([A-Z])/g,'-$1').toLowerCase();
            var s = document.defaultView.getComputedStyle(elem,'');
            return s&&s.getPropertyValue(styleName);
        }
        else{//other,for example, Safari
            return null;
        }
    }
    window['pan']['getStyle'] = getStyle;

})();

需要說明的一點是,Safari不支援document.defaultView,所以以上函式獲取元素外部樣式不支援Safari瀏覽器。

這個函式的用法非常簡單,傳遞兩個引數:第一個引數為需要獲取樣式的元素物件;第二個引數為樣式的屬性名,屬性名規則與style一致,即多個單詞的屬性名除了第一個單詞外其它的均需首字母大寫:

 var cbc = pan.getStyle(element, 'backgroundColor');//獲取背景色

 var w = pan.getStyle(element, 'width');//獲取寬度

 var blw = pan.getStyle(element, 'borderLeftWidth');//獲取左邊框的寬度

好了,這個函式就寫到這裡,相信我已經將該函式的內部邏輯結構和用法都說明清楚了,呵呵,我的JS庫又新添了一個函數了^_^

PS:該函式有待改進,如第一個引數可以不侷限於傳遞元素物件。

相關推薦

函式 getStyle() 獲取元素 CSS 樣式

 element.style.backgroundColor = '#000'; 然而,很多時候我們在修改元素的樣式之前要先保留元素原來的樣式屬性值,或許可以這麼做:  var bc = element.style.backgroundColor; 這麼做有

CSS getStyle 獲取元素樣式,解決offSet+樣式所產生的bug

//封裝好的函式,獲取樣式style(解決offset樣式的bug) function getStyle(obj, attr) { if (obj.currentStyle) {

用JS改變的元素CSS樣式

article 引用 dsm date word ttr class doc scrip CSS樣式的引用有3種方式:style引用、class引用、id引用,所以js改變元素的樣式我們也分3種來說。 1.js改變由style方式引用的樣式:方法一:docu

兼容獲取元素當前樣式 currentStyle || getComputedStyle

cti gets get .get dst func style win put function getStyle(ele, attr) { return ele.currentStyle ? ele.currentStyle[attr] :

Katalon 校驗元素CSS樣式,如頁面元素的文字顏色、字型大小等【WebUI自動化測試】

當我們做UI自動化測試時,可能會有這樣的需求,檢驗某個元素的文字顏色、字型大小等等,我們可以用WebUI.getCSSValue(TestObject to, String css)方法,獲取一個元素物件的CSS樣式。 element_colour = WebUI.getCSSValue

iframe js獲取父級元素資訊,設定css樣式 和繫結事件

獲取iframe 父級id 為objid的內容。 $('#objid',window.parent.document).val(""); 初始化為iframe 父級 id為cancel1繫結事件 $('#cancel1',window.parent.document).

使用jquery操作元素css樣式獲取、修改等等)

//1、獲取和設定樣式 $("#tow").attr("class")獲取ID為tow的class屬性 $("#two").attr("class","divClass")設定Id為two的class屬性。 //2、追加樣式 $("#two").addClass(

獲取元素CSS樣式屬性值 IE相容寫法

/** * 獲取元素的CSS樣式屬性值 */function css(element, attrName) {   /*if (window.getComputedStyle)   return window.getComputedStyle(element)[attrName]   return eleme

javascript獲取元素css樣式方法

之前瞭解到獲取元素css樣式的方法有三種: ①div.style ②getComputedStyle ③currentStyle 但對於三者的區別及詳細用法並不是特別瞭解,各種查資料各種測試終於瞭解到了詳細的用法,現在在此分享給大家,希望對大家有點用。 下面將對三種方式進

獲取物件樣式屬性函式getStyle()

function getStyle(elem, styleName){ if(elem.style[styleName]){ //獲取內聯樣式 return elem.style[styleName]; } else if(elem.currentStyle){

每天一個JavaScript實例-展示設置和獲取CSS樣式設置

width func height nts style scrip meta on() 屬性 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" conte

js獲取css樣式封裝

padding set body script log center auth compute ctype 封裝 function getStyle(obj , attr){ return obj.currentStyle?obj.currentStyle[att

原生js獲取元素樣式

應該 eight current document 疑惑 行內樣式 lin script 輸出 在學習js初期,就一直有一個疑問,獲取元素樣式的值,不是直接使用obj.style.left之類的就可以得到了嗎?可是使用這樣的方式,有的時候能夠獲取得到,有的時候又不能獲取,

getPropertyValue 獲取CSS樣式

bsp doctype title com nbsp tex .get dem tle 新學習一個js 的方法 getPropertyValue (實現 js框架中 css 的最終調用的函數),取得元素最終計算出的css 樣式 DEMO: <!DOCTY

HTML控件元素css樣式基礎理解

才有 文本文 一段 效果 片元 all css樣式 鏈接 信息   HTML (超文本標記語言)    1.該語言用於編寫超文本文檔,並在含有瀏覽器軟件的設備上顯示,超文本文檔指集視頻、音頻、超鏈接、文本、圖像、圖片等多媒體信息為一體的文檔。   標簽元素(控件元素)   

css樣式獲取,style,currentStyle,getComputedStyle

得到 包括 技術分享 好用 div ie8 偽類 asc .get 對於css樣式的獲取問題,對於行內樣式,我們可以用style來獲取,但是對於內嵌和外部樣式的話,style就心有余和力不足了。它是獲取不到這些樣式的 此時就只有currentStyle和ge

CSS獲取元素的z-index值以及各種值的意義

cti width -i table pre class 解讀 span 描述 js可以獲取其元素的z-index值: $("document").ready(function(){ var a = $(‘.row‘).css(‘z-index‘); a

drupal7 formAPI給元素css樣式

了吧 css樣式 前端 field size upa 除了 red 分享 比如,我定義了一個表單元素,名字叫做包庫開始日期, $form[‘starttime_baoyue‘]=array( ‘#type‘=>‘textfield‘, ‘#titl

通過field:global給子元素添加css樣式

style lob pos oba get css樣式 row 添加 否則 {dede:arclist row=5 typeid=200} <li [field:global runphp=’yes’ name=autoindex](@me==1)?@me=”cla

Java學習總結(二十四)——前端:CSS樣式設計(CSS引入,選擇器,盒子模型,浮動元素

引入 itl AI dropdown 正常的 type ID 總結 網頁 一.CSS引入方式1.CSS簡介:(1)CSS(Cascading style Sheets):層疊樣式表。用來給html網頁設置樣式;(2)當多個選擇器對同一個元素進行樣式設計時,則該元素的樣式為多