欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JS来获取全局样式值—style,currentStyle,getComputedStyle() 并解决浏览器兼容性问题

程序员文章站 2022-07-04 15:02:17
...

一. style对象

style读取样式

语法:元素.style.样式名

还可以设置通过style属性设置的样式

语法:元素.style.样式=样式值

注意:   如果Css的样式值含有-,
		这种名称在JS中是不合法的,比如background-color
		我们在使用是要把这样的名称修改为驼峰命名法
		去掉-,然后将-号后的字母大写

注意:通过style属性设置和读取的都是内联样式,无法读取样式表中的样式。

通过一个例子来解释:

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>style</title>
	<style>
		#box1{
			width:200px;
			height: 200px;
			background-color: red;
		}
	</style>
	<script>
	window.onload=function(){
		/*
		点击按钮以后,修box1的大小
		*/
		//获取box1
		var box1=document.getElementById("box1");
		//绑定单击响应函数
		var btn01=document.getElementById("btn01");
		btn01.onclick=function(){
			//修改box1的宽度
			/*
			我们通过style属性设置的样式都是内联样式
			而内联样式有较高的优先级,所以通过js修改的样式往往会立即显示
			
			但是如果在样式中写了!important 则此时样式会有最高的优先级
			即使通过js也不能覆盖该样式,导致js样式修改失效
			*/
			box1.style.width="300px";
			box1.style.height="300px";
			box1.style.backgroundColor= "yellow";
		}
		
		var btn02=document.getElementById("btn02");
		btn02.onclick=function(){
			alert(box1.style.width);
		}	
	}
	</script>
</head>
<body>
	<button id="btn01">点我一下1</button>
	<button id="btn02">点我一下2</button>
	<div id="box1"></div>
</body>
</html>

二. currentStyle对象

currentStyle是获取元素当前显示的样式

语法:元素.currentStyle.样式名

注意:只有IE和Opera支持使用CurrentStyle获取的元素计算后的样式

未设置的属性值,currentStyle 会读取浏览器默认值

	alert(box1.currentStyle.width);
	alert(box1.currentStyle.backgroundColor);

三. getComputedStyle()方法

getComputedStyle() 这个方法来获取元素当前的样式
这个方法是window的方法,可以直接使用

需要两个参数
第一个:要获取样式的元素
第二个:可以传递一个伪元素,一般都传null

该方法会返回一个数组对象,对象中封装了当前元素对应的样式
可以通过对象,样式名来读取样式
如果获取的样式没有设置,则会获取到真实的值,而不是默认值
比如:没有设置width,它不会获取到auto 而是一个长度

但是该方法不支持IE9以下的浏览器

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>读取元素的样式</title>
	<style>
		#box1{
			width:100px;
			height: 100px;
			background-color: yellow;
		}
	</style>
	<script>
	window.onload=function(){
		var box1=document.getElementById("box1");
		var btn01=document.getElementById("btn01");
		btn01.onclick=function(){
			alert(getComputedStyle(box1,null).backgroundColor); //rgb(255, 255, 0)
			//alert(getComputedStyle(box1, null)['backgroundColor']); 该写法与上面作用一样
			alert(getComputedStyle(box1,null).width); //100px
		}
	}
	</script>
</head>
<body>
	<button id="btn01">点我一下</button>
	<div id="box1"></div>
</body>
</html>

小结:以上的三种方法都存在缺陷,style它只能获取到内联样式中的属性值,currentStyle它由于兼容性不好,使用起来有很大的问题。getComputedStyle()方法,也不能完美兼容,只支持IE9+以上的浏览器。

四,解决兼容性问题

自己定义一个函数,通过判断来确定使用哪种方法,可以解决浏览器的兼容性问题。

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>读取元素的样式</title>
	<style>
		#box1{
			width:100px;
			height: 100px;
			background-color: yellow;
		}
	</style>
	<script>
	window.onload=function(){
		var box1=document.getElementById("box1");
		var btn01=document.getElementById("btn01");
		btn01.onclick=function(){
			var a=getStyle(box1,"width");
			alert(a);
		}
	}
		/*
		obj 要获取样式的元素
		name 要获取的样式名
		*/
		function getStyle(obj,name){
		if(window.getComputedStyle){
			//正常浏览器的方式,具有getComputedStyle()方法
			return getComputedStyle(obj,null)[name];
		}else{
			//IE8的方式,没有getComputedStyle()方法
			return obj.currentstyle[name];
			}
		//与上面的if作用一样	
		//return window.getComputedStyle?getComputedStyle(obj,null)[name]:obj.currentstyle[name];
		}
	</script>
</head>

<body>
	<button id="btn01">点我一下</button>
	<div id="box1"></div>
</body>
</html>