通过style对象获取和设置行内样式

style属性的获取和修改

在DOM当中,如果想设置样式,有两种形式:

  • className(针对内嵌样式)

  • style(针对行内样式)

这篇文章,我们就来讲一下style。

需要注意的是:style是一个对象,只能获取行内样式,不能获取内嵌的样式和外链的样式。例如:

Title

打印结果:

上图显示,因为border属性不是行内样式,所以无法通过style对象获取。

通过 js 读取元素的样式

语法:(方式一)

元素.style.样式名

备注:我们通过style属性读取的样式都是行内样式

语法:(方式二)

元素.style[“属性”]; //格式

box.style[“width”]; //举例

方式二最大的优点是:可以给属性传递参数。

通过 js 设置元素的样式

语法:

元素.style.样式名 = 样式值;

举例:

box1.style.width = “300px”;

box1.style.backgroundColor = “red”; // 驼峰命名法

备注:我们通过style属性设置的样式都是行内样式,而行内样式有较高的优先级。但是如果在样式中的其他地方写了!important,则此时!important会有更高的优先级。

style属性的注意事项

style属性需要注意以下几点:

(1)样式少的时候使用。

(2)style是对象。我们在上方已经打印出来,typeof的结果是Object。

(3)值是字符串,没有设置值是””。

(4)命名规则,驼峰命名。

(5)只能获取行内样式,和内嵌和外链无关。

(6)box.style.cssText = “字符串形式的样式”。

cssText这个属性,其实就是把行内样式里面的值当做字符串来对待。在上方代码的基础之上,举例:

打印结果:

style的常用属性

style的常用属性包括:

  • backgroundColor

  • backgroundImage

  • color

  • width

  • height

  • border

  • opacity 设置透明度 (IE8以前是filter: alpha(opacity=xx))

注意DOM对象style的属性和标签中style内的值不一样,因为在JS中,-不能作为标识符。比如:

  • DOM中:backgroundColor

  • CSS中:background-color

style属性的举例

我们针对上面列举的几个style的样式,来举几个例子:

  • 举例1、改变div的大小和透明度

  • 举例2、当前输入的文本框高亮显示

  • 举例3、高级隔行变色、高亮显示

下面来逐一实现。

举例1:改变div的大小和透明度

代码举例:

举例2:当前输入的文本框高亮显示

代码实现:

举例3:高级隔行变色、高亮显示

序号 姓名 课程 成绩

1

生命壹号 语文 100

2

生命贰号 日语 99

3

生命叁号 营销学 98

4

生命伍号 数学 90

5

许嵩 英语 96

6

vae 体育 90

实现的效果如下:

代码解释:

上方代码中,我们用到了计数器myColor来记录每一行最原始的颜色(赋值白色之前)。如果不用计数器,可能很多人以为代码是写的:(错误的代码)

这种错误的代码,实现的效果却是:(未达到效果)

通过 js 获取元素当前显示的样式

我们在上面的内容中,通过元素.style.className的方式只能获取行内样式。但是,有些元素,也写了内嵌样式或外链样式

既然样式有这么种,那么,如何获取元素当前显示的样式(包括行内样式、内嵌样式、外链样式)呢?我们接下来看一看。

获取元素当前正在显示的样式

(1)w3c的做法:

window.getComputedStyle(“要获取样式的元素”, “伪元素”);

两个参数都是必须要有的。参数二中,如果没有伪元素就用 null
代替(一般都传null)。

(2)IE和opera的做法:

obj.currentStyle;

注意:

  • 如果当前元素没有设置该样式,则获取它的默认值。

  • 该方法会返回一个对象,对象中封装了当前元素对应的样式,可以通过对象.样式名来读取具体的某一个样式。

  • 通过currentStyle和getComputedStyle()读取到的样式都是只读的,不能修改,如果要修改必须通过style属性。

综合上面两种写法,就有了一种兼容性的写法,同时将其封装。代码举例如下:

打印结果:


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!