样式操作,指的是使用jQuery来操作一个元素的CSS属性。在jQuery中,对于样式操作共有以下3种。

  • (1)CSS属性操作
  • (2)CSS类名操作
  • (3)个别样式操作

一、CSS属性操作

在jQuery,对于CSS属性的操作有两种情况:一种是“获取属性”;另外一种是“设置属性”。

1.获取属性

在jQuery中,我们可以使用css()方法来获取一个CSS属性的取值。

语法:

$().css("属性名")

举例:

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <style> p{font-weight:bold;} </style> <script src="js/jquery-1.12.4.min.js"></script> <script> $(function () { $("#btn").click(function(){ var result = $("p").css("font-weight"); alert("font-weight取值为:" + result); }); }) </script> </head> <body> <p>绿叶学习网</p> <input id="btn" type="button" value="获取" /> </body> </html>

浏览器预览效果如下图所示。

分析:

$("p").css("font-weight")表示获取p元素的font-weight属性值。当我们点击【获取】按钮后,浏览器会弹出对话框,如下图所示。

2.设置属性

在jQuery中,设置元素的某一个CSS属性的值,我们用的也是css()方法。不过对于css()方法,我们需要分两种情况来考虑:一种是“设置单个属性”;另外一种是“设置多个属性”。

语法:

//设置一个属性 $().css("属性", "取值") //设置多个属性 $().css({"属性1":"取值1", "属性2":"取值2", ..., "属性n":"取值n"})

说明:

当我们想要设置多个CSS属性时,使用的是对象的形式。其中属性与取值采用的是“键值对”方式,然后每个键值对之间用英文逗号隔开。

举例:设置一个属性

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <script src="js/jquery-1.12.4.min.js"></script> <script> $(function () { $("#btn").click(function(){ $("li:nth-child(odd)").css("color","red"); }); }) </script> </head> <body> <ul> <li>HTML</li> <li>CSS</li> <li>JavaScript</li> <li>jQuery</li> <li>Vue.js</li> </ul> <input id="btn" type="button" value="设置" /> </body> </html>

默认情况下,预览效果如下图所示。

当我们点击【设置】按钮后,浏览器预览效果如下图所示。

分析:

$("li:nth-child(odd)").css("color","red")这句代码使用了子元素伪类选择器,表示选取ul元素下所有奇数个li元素,然后设置color属性值为red。

实际上,下面两句代码其实是等价的:

$().css("color","red") $().css({"color": "red"})

举例:设置多个CSS属性

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <script src="js/jquery-1.12.4.min.js"></script> <script> $(function () { $("#btn").click(function(){ $("li:nth-child(odd)").css({"color":"red", "background-color":"silver", "font-weight":"bold"}); }); }) </script> </head> <body> <ul> <li>HTML</li> <li>CSS</li> <li>JavaScript</li> <li>jQuery</li> <li>Vue.js</li> </ul> <input id="btn" type="button" value="设置" /> </body> </html>

默认情况下,预览效果如下图所示。

当我们点击【设置】按钮后,浏览器预览效果如下图所示。

分析:

$()css({"color":"red", "background-color":"silver", "font-weight":"bold"});

上面这句代码其实可以等价于:

$().css("color", "red); $().css("background-color", "silver"); $().css("font-weight", "bold");

二、CSS类名操作

类名操作,指的是为元素添加一个class或删除一个class,从而整体控制元素的样式。在jQuery中,对于类名操作共有以下3种。

  • (1)添加class。
  • (2)删除class。
  • (3)切换class。

1.添加class

在jQuery中,我们可以使用addClass()方法为元素添加一个class。

语法:

$().addClass("类名")

举例:

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <style type="text/css"> .select { color:red; background-color:#F1F1F1; font-weight:bold; } </style> <script src="js/jquery-1.12.4.min.js"></script> <script> $(function () { $("#btn").click(function(){ $("li:nth-child(odd)").addClass("select"); }); }) </script> </head> <body> <ul> <li>HTML</li> <li>CSS</li> <li>JavaScript</li> <li>jQuery</li> <li>Vue.js</li> </ul> <input id="btn" type="button" value="添加" /> </body> </html>

默认情况下,预览效果如下图所示。

当我们点击【添加】按钮后,浏览器预览效果如下图所示。

分析:

这个例子跟“设置多个CSS属性”的例子效果是一样的,但是这种方式相对来说可读性更好,并且更加方便。

2、删除class

在jQuery中,我们可以使用removeClass()方法来为元素删除一个class。

语法:

$().removeClass("类名")

举例:

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <style type="text/css"> .select { color:red; background-color:silver; font-weight:bold; } </style> <script src="js/jquery-1.12.4.min.js"></script> <script> $(function () { $("#btn_add").click(function(){ $("li:nth-child(odd)").addClass("select"); }); $("#btn_remove").click(function () { $("li:nth-child(odd)").removeClass("select"); }); }) </script> </head> <body> <ul> <li>HTML</li> <li>CSS</li> <li>JavaScript</li> <li>jQuery</li> <li>Vue.js</li> </ul> <input id="btn_add" type="button" value="添加" /> <input id="btn_remove" type="button" value="删除" /> </body> </html>

浏览器预览效果如下图所示。

分析:

在这个例子中,我们使用addClass()方法为元素添加类名,使用removeClass()方法为元素删除类名。使用“添加类名”以及“删除类名”的方式,可以很方便地操作元素的大量样式。

3、切换class

在jQuery中,我们可以使用toggleClass()方法为元素切换类名。toggle,其实就是“切换”的意思,在后续章节中我们会大量接触这个单词,例如toggle()、slideToggle()等。小伙伴要留意对比一下。

语法:

$().toggleClass("类名")

说明:

toggleClass()方法用于检查元素是否有某个class。如果class不存在,则为元素添加该class;如果class已经存在,则为元素删除该class。

举例:

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <style type="text/css"> .select { color:red; background-color:silver; font-weight:bold; } </style> <script src="js/jquery-1.12.4.min.js"></script> <script> $(function () { $("#btn").click(function(){ $("li:nth-child(odd)").toggleClass("select"); }); }) </script> </head> <body> <ul> <li>HTML</li> <li>CSS</li> <li>JavaScript</li> <li>jQuery</li> <li>Vue.js</li> </ul> <input id="btn" type="button" value="切换" /> </body> </html>

浏览器预览效果如下图所示。

分析:

在这个例子中,我们使用toggleClass()方法来切换元素的class,使得元素可以在“默认样式”以及“class样式”之间来回切换。

从这一节的学习中我们知道,使用jQuery来操作CSS类名这种方式是非常有用的。当CSS代码比较多时,我们可以将其放到一个class中,这样每次只需要对类名进行操作即可。这种方式相对于css()方法来说,代码更加清晰,可读性和可维护性都比较高。

最后总结一下:使用jQuery操作元素的样式时,如果样式比较少时,建议使用“属性操作”,也就是css()方法;当样式比较多时,建议使用“类名操作”,也就是addClass()、removeClass()、toggleClass()等方法。

三、个别样式操作

在jQuery中,对于个别样式的操作,共有以下3种。

  • (1)元素的宽高
  • (2)元素的位置
  • (3)滚动条的距离

1.元素的宽高

在jQuery中,如果想要获取和设置一个元素的宽度和高度,我们可以使用css()方法来实现。不过为了更加灵活地操作元素的宽高,jQuery为我们另外提供了更多更加强大的方法。

在jQuery中,如果我们想要“获取”和“设置”元素的宽高,共有3组方法。

  • (1)width()和height()
  • (2)innerWidth()和innerHeight()
  • (3)outerWidth()和outerHeight()

width()、innerWidth()、outerWidth()
方法 范围
width() width
innerWidth() width + padding
outerWidth() width + padding + border
height()、innerHeight()、outerHeight()
方法 范围
height() height
innerHeight() height + padding
outerHeight() height + padding + border

实际上,上面这三组方法是根据CSS盒子模型来划分的。对于这3组方法,一般情况下我们只会用到width()和height()这一组方法,其他两组方法了解一下即可。

语法:

$().width() //获取元素宽度 $().width(n) //设置元素宽度,n是一个整数,表示n像素 $().height() //获取元素高度 $().height(n) //设置元素高度,n是一个整数,表示n像素

说明:

width()方法用于获取和设置元素的宽度,height()方法用于获取和设置元素的高度。

jQuery很多方法都有这样一个特点:没有参数的方法表示“获取”,带有参数的方法表示“设置”

举例:

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <style type="text/css"> #box1,#box2 { display:inline-block; width:100px; height:60px; border:1px solid gray; } </style> <script src="js/jquery-1.12.4.min.js"></script> <script> $(function () { $("#btn_get").click(function(){ var width = $("#box1").width(); alert(width); }); $("#btn_set").click(function(){ $("#box2").width(50); }); }) </script> </head> <body> <div id="box1"></div> <div id="box2"></div><br /> 获取第1个div的宽度:<input id="btn_get" type="button" value="获取"/><br/> 设置第2个div的宽度:<input id="btn_set" type="button" value="设置"> </body> </html>

浏览器预览效果如下图所示。

分析:

这里要注意一下,width(n)方法用于设置宽度时是不需要加单位的,像width(50px)这种写法是错误的,正确的写法应该是width(50)。

2.元素的位置

在jQuery中,很多时候我们需要获取元素的位置,然后再进行相应的操作。例如绿叶学习网的在线调色板工具中,就是根据元素的位置来确定颜色值的。

如果想要获取元素的位置,jQuery为我们提供了两种方法:一种是offset();另外一种是position()。

offset()

在jQuery中,我们可以使用offset()方法来获取或设置元素相对于“当前文档”(也就是浏览器窗口)的偏移距离。

语法:

$().offset().top $().offset().left

说明:

offset()方法返回的是一个坐标对象,该对象有两个属性,这两个属性返回的都是一个不带单位的数字。

top属性,表示获取元素相当于当前文档“顶部”的距离。

left属性,表示获取元素相当于当前文档“左部”的距离。

举例:

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <style type="text/css"> body{text-align:center;} #box1,#box2 { display:inline-block; height:100px; width:100px; } #box1{background-color:Red;} #box2{background-color:Orange;} </style> <script src="js/jquery-1.12.4.min.js"></script> <script> $(function () { var top = $("#box2").offset().top; var left = $("#box2").offset().left; var result = "box2距离顶部:" + top + "px\n" + "box2距离左部:" + left + "px"; console.log(result); }) </script> </head> <body> <div id="box1"></div><br /> <div id="box2"></div><br /> </body> </html>

控制台输出结果如下图所示。

分析:

特别注意一下,().offset().top和().offset().left这两个返回的数值是不带单位的。

position()

在jQuery中,我们可以使用position()方法来获取或设置当前元素相对于“最近被定位的祖先元素”的偏移位置。

语法:

$().position().top $().position().left

说明:

position()方法返回的是一个坐标对象,该对象有两个属性,这两个属性返回的都是一个不带单位的数字。

top,表示获取元素相当于最近被定位祖先元素“顶部”的距离。

left,表示获取元素相当于最近被定位祖先元素“左部”的距离。

举例:

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <style type="text/css"> #father { position:relative; width:200px; height:200px; background-color:orange; } #son { position:absolute; top:20px; left:50px; width:50px; height:50px; background-color:red; } </style> <script src="js/jquery-1.12.4.min.js"></script> <script> $(function () { var top = $("#son").position().top; var left = $("#son").position().left; var result = "子元素相对父元素顶部距离是:" + top + "px\n" + "子元素相对父元素左部距离是:" + left + "px"; console.log(result); }) </script> </head> <body> <div id="father"> <div id="son"></div> </div> </body> </html>

控制台输出结果如下图所示。

分析:

在实际开发中,获取元素的坐标是很常见的操作。大家一定要重点掌握offset()和position()这两个方法。在后续章节中,我们会结合实际案例来介绍。

3.滚动条的距离

在jQuery中,我们可以使用scrollTop()方法来获取或设置元素相对于滚动条“顶边”的距离,也可以使用scrollLeft()方法来获取或设置元素相对于滚动条“左边”的距离。

语法:

$().scrollTop() //获取滚动距离 $().scrollTop(n) //设置滚动距离,n是一个整数,表示n像素

说明:

在实际开发中,大多数情况下我们只会用到scrollTop(),极少用到scrollLeft()。因此对于scrollLeft(),简单了解一下即可。

举例:

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <style type="text/css"> body{height:1800px;} </style> <script src="js/jquery-1.12.4.min.js"></script> <script> $(function () { $(window).scroll(function(){ var top = $(this).scrollTop(); console.log("滚动距离:"+ top + "px"); }); }) </script> </head> <body> </body> </html>

当我们拖动滚动条时,控制台输出结果如下图所示。

分析:

$(window).scroll(function () { …… })

上面这段代码表示滚动事件,我们在后面“6.7 滚动事件”这一节中会详细介绍,这里不需要深入了解。获取滚动条的距离在各种特效(如回顶部效果)中用得非常多,我们在后续章节会慢慢学到。