使用原生獲取DOM元素的樣式
阿新 • • 發佈:2019-01-28
我們在日常的工作場景下會遇到需要修改頁面元素的樣式問題,特別是使用原生js獲取元素的樣式,如果只是獲取在元素的內聯樣式,可以通過Element.getAttribute(attr)來獲取元素的屬性,但是如果獲取的是DOM元素的css樣式表哪?
這也是有辦法的我們可以通過[getComputedStyle]進行獲取,具體的可以點選這裡 來看。
為了保持相容性(ie)我們還要使用currentStyle物件進行相容。我們可以使用以下的方式來獲取這樣的屬性值
function getElemStyle (elem, attr) { // 保證elem是dom節點 if (!elem || !elem.nodeType || elem.nodeType !== 1) { return; } if (document.currentStyle) { return elem.currentStyle[attr]; } else { return window.getComputedStyle(elem, null)[attr]; } }
但是,這並不是最優的方式。我們知道我們的DOM操作方法上的繼承自HTMLElement,而HTMLElement繼承自Element,所以我們可以直接在Element上加方法。這樣做的好處是,我們可以再任何地方隨時的使用這個方法,不必每次獲取元素再呼叫上面的方法。我的程式碼如下所示:
function getElemStyle() { Element.prototype.getStyle = function(attr) { if (this.currentStyle) { return this.currentStyle[attr]; } else { return window.getComputedStyle(this, null)[attr]; } } }
這需要執行一次這個程式碼,當前頁面的所有DOM元素都可使用這個物件。