Heim  >  Artikel  >  Web-Frontend  >  各情景下元素宽高的获取实现代码_javascript技巧

各情景下元素宽高的获取实现代码_javascript技巧

WBOY
WBOYOriginal
2016-05-16 18:02:221209Durchsuche

情景一,元素style属性设置了width/height

复制代码 代码如下:

test

<script> <BR>var div = document.getElementsByTagName('div')[0]; <BR>alert(div.style.width); <BR></script>

如上,使用el.style.width即可。如果没有在style属性中设置width,那么使用el.style.width将获取不到,如下
复制代码 代码如下:

test

<script> <BR>var div = document.getElementsByTagName('div')[0]; <BR>alert(div.style.width); <BR></script>

所有浏览器中弹出的是空字符串。即使将样式嵌在页面的css中也仍然获取不到,如下
复制代码 代码如下:


test

<script> <BR>var div = document.getElementsByTagName('div')[0]; <BR>alert(div.style.width); <BR></script>

这时候getComputedStyle或currentStyle将会派上用场。
情景二,元素通过引入样式表设置width/height
有两种方式引入样式表,一是使用link标签引入单独的css文件,二是直接在html页面中使用style标签。这里使用第二种方式测试。如下
复制代码 代码如下:


test

<script> <BR>function getStyle(el, name) { <BR>if(window.getComputedStyle) { <BR>return window.getComputedStyle(el, null); <BR>}else{ <BR>return el.currentStyle; <BR>} <BR>} <BR>var div = document.getElementsByTagName('div')[0]; <BR>alert(getStyle(div, 'width')); <BR></script>

所有浏览器中均弹出了100px。说明通过getComputedStyle和currentStyle可以获取到元素被定义在样式表中的宽高。
那如果元素即没有在style属性中设置宽高,也没有在样式表中设置宽高,还能用getComputedStyle或currentStyle获取吗?答案是getComputedStyle可以,currentStyle不可以。如下
复制代码 代码如下:

test

<script> <BR>function getStyle(el, name) { <BR>if(window.getComputedStyle) { <BR>return window.getComputedStyle(el, null); <BR>}else{ <BR>return el.currentStyle; <BR>} <BR>} <BR>var div = document.getElementsByTagName('div')[0]; <BR>alert(getStyle(div, 'width')); <BR></script>

div 既没有设置style属性,也没有引入样式表。在Firefox/IE9/Safari/Chrome/Opera中可以获取到宽高(浏览器默认),但IE6/7/8中却不行,返回的是auto。
注意,这里getStyle方法优先使用getComputedStyle,而IE9已经支持该方法。因此IE9中可以获取到宽高。但IE6/7/8不支持,只能使用currentStyle获取。
情景三,元素既没有设置style属性,也没有引入样式表
复制代码 代码如下:

test

<script> <BR>function getStyle(el,name) { <BR>if(window.getComputedStyle) { <BR>return window.getComputedStyle(el, null)[name]; <BR>}else{ <BR>return el.currentStyle[name]; <BR>} <BR>} <BR>function getWH(el, name) { <BR>var val = name === "width" ? el.offsetWidth : el.offsetHeight, <BR>which = name === "width" ? ['Left', 'Right'] : ['Top', 'Bottom']; <BR>// display is none <BR>if(val === 0) { <BR>return 0; <BR>} <BR>for(var i = 0, a; a = which[i++];) { <BR>val -= parseFloat( getStyle(el, "border" + a + "Width") ) || 0; <BR>val -= parseFloat( getStyle(el, "padding" + a) ) || 0; <BR>} <BR>return val + 'px'; <BR>} <BR>var div = document.getElementsByTagName('div')[0]; <BR>alert(getWH(div, 'width')); <BR></script>

思路很简单:获取元素的offsetWidth/offsetHeight,减去元素的padding和border。
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn