JQuery操作样式
- css操作
css()
获取或设置样式,操作的是style
属性。
- 获取样式:
css()
方法,参数为要获取样式值的样式名。
- 样式名可以用驼峰写法,也可以用
-
连接。例如,获取元素的width
样式,既可以使用css('width')
,也可以使用css('min - width')
。若要获取border - left - width
,驼峰写法为css('borderLeftWidth')
。这种灵活性使得开发者可根据编码习惯选择,同时也兼容CSS样式表中的写法。 - 获取包含多个
dom
元素的jQuery
对象的样式,只返回第一个元素对应的样式值。当使用$('div').css('height')
时,无论页面上有多少个div
元素,返回的是第一个匹配到的div
的height
样式值。若想获取所有div
的height
值,可结合each
方法遍历$('div')
来实现。如:
| var divHeights = []; |
| $('div').each(function() { |
| divHeights.push($(this).css('height')); |
| }); |
| console.log(divHeights); |
复制
-
设置样式:css(样式名,样式值)
-
设置的是行内样式,直接修改元素的style
属性。如$('#box').css('color','red')
,会为id
为box
的元素添加行内的color
样式。这种方式添加的样式优先级较高,会覆盖CSS样式表中相同属性的规则,但不会影响其他未被设置的样式属性。
-
可以设置单样式,每次设置一个样式属性。例如$('p').css('fontSize', '16px')
,将所有p
元素的字体大小设置为16px
。在实际应用中,当需要单独调整某一类元素的某个样式属性时,这种方式非常实用,如在一个表单中,想统一所有input
的border - color
,就可使用$('input').css('borderColor', '#ccc')
。
-
传入对象,可以设置多样式。通过$('div').css({ 'backgroundColor': 'blue', 'border': '1px solid black' })
,能一次性为div
元素设置背景颜色和边框样式。这种方式适用于需要同时改变元素多个样式属性的场景,减少代码量。例如,在创建一个模态框时,可一次性设置其背景、边框、内边距等样式:
| $('.modal').css({ |
| 'backgroundColor': 'rgba(0, 0, 0, 0.5)', |
| 'border': '2px solid white', |
| 'padding': '20px' |
| }); |
复制
- 可以同时给多个
dom
元素设置样式,有隐式迭代的身影。当使用$('li').css('textDecoration', 'underline')
时,所有匹配到的li
元素都会应用下划线样式,无需手动循环遍历每个li
元素。在复杂的页面结构中,若要对某一类元素进行批量样式修改,隐式迭代极大地提高了开发效率。比如,在一个产品列表中,想将所有产品的价格文字颜色设为红色,只需$('.product - price').css('color','red')
。
- class操作
- 添加类:
addClass('class1 class2···')
,可以添加单个类,也可以添加多个类。
| $("#btn01").click(function () { |
| $("#box").addClass("active font"); |
| }); |
复制
当按钮#btn01
被点击时,id
为box
的元素会同时添加active
和font
两个类。这在实现元素状态切换或应用多种样式效果时非常有用。例如,在一个导航栏中,当用户点击某个菜单项时,为其添加active
类以显示选中状态,同时添加highlight
类以突出显示:
| $('.nav - item').click(function() { |
| $(this).addClass('active highlight'); |
| }); |
复制
- 移除类:
removeClass('class1 class2···')
,可以移除单个类,也可以移除多个类。如果不加参数,就会移除所有的类名 。
| $("#btn02").click(function () { |
| $("#box").removeClass("font"); |
| }); |
复制
当按钮#btn02
点击时,#box
元素上的font
类会被移除。若要移除多个类,如active
和highlight
,可使用$('.nav - item').removeClass('active highlight')
。当元素状态改变,需要取消之前添加的某些样式类时,此方法很常用。例如,当用户离开某个导航菜单项时,移除其选中和突出显示的类:
| $('.nav - item').mouseleave(function() { |
| $(this).removeClass('active highlight'); |
| }); |
复制
- 判断类:
hasClass()
判断一个元素有没有类,有返回true
,没有返回false
。
| $("#btn03").click(function () { |
| var flag = $("#box").hasClass("font"); |
| console.log(flag); |
| }); |
复制
通过此方法,可根据元素是否具有某个类来执行不同的逻辑。比如,在一个图片切换效果中,判断当前图片是否具有active
类,若有则执行特定操作:
| if ($('.current - image').hasClass('active')) { |
| |
| } |
复制
- 切换类:
toggleClass()
如果元素有某个类就移除这个类,如果元素没有这个类,就添加这个类。
| $("#btn04").click(function () { |
| $("#box").toggleClass("font"); |
| }); |
复制
在实现元素状态切换效果时,toggleClass
非常便捷。例如,在一个折叠面板中,点击标题可切换面板的展开与收起状态,通过切换active
类来控制面板的显示与隐藏样式:
| $('.panel - title').click(function() { |
| $(this).next('.panel - content').toggleClass('active'); |
| }); |
复制
案例:tab栏切换
| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8" /> |
| <title>Tab点击切换</title> |
| <script src="./js/jQuery.js"></script> |
| <style> |
| * { |
| margin: 0; |
| padding: 0; |
| } |
| #tab li { |
| float: left; |
| list-style: none; |
| width: 80px; |
| height: 40px; |
| line-height: 40px; |
| cursor: pointer; |
| text-align: center; |
| } |
| #container { |
| position: relative; |
| } |
| #content1, |
| #content2, |
| #content3 { |
| width: 300px; |
| height: 100px; |
| padding: 30px; |
| position: absolute; |
| top: 40px; |
| left: 0; |
| } |
| #tab1, |
| #content1 { |
| background-color: #ffcc00; |
| } |
| #tab2, |
| #content2 { |
| background-color: #ff00cc; |
| } |
| #tab3, |
| #content3 { |
| background-color: #00ccff; |
| } |
| .selected { |
| display: block; |
| } |
| .active { |
| border - top: 5px solid red; |
| } |
| </style> |
| </head> |
| <body> |
| <h2>Tab点击切换</h2> |
| <ul id="tab"> |
| <li id="tab1">10元套餐</li> |
| <li id="tab2">30元套餐</li> |
| <li id="tab3">50元包月</li> |
| </ul> |
| <div id="container"> |
| <div id="content1">10元套餐详情:<br /> 每月套餐内拨打100分钟,超出部分2毛/分钟</div> |
| <div id="content2">30元套餐详情:<br /> 每月套餐内拨打300分钟,超出部分1.5毛/分钟</div> |
| <div id="content3">50元包月详情:<br /> 每月无限量随心打</div> |
| </div> |
| <script> |
| $(function () { |
| $("#tab>li").click(function () { |
| |
| $(this).addClass("active").siblings("li").removeClass("active"); |
| var index = $(this).index(); |
| |
| $("#container>div").eq(index).show().siblings("div").hide(); |
| }); |
| }); |
| </script> |
| </body> |
| </html> |
复制
在上述tab
栏切换代码中,当用户点击#tab
下的li
元素时,利用addClass
为当前点击的li
添加active
类,同时使用removeClass
移除其他兄弟li
的active
类,实现选中状态的切换。通过$(this).index()
获取当前点击li
的索引,再依据索引使用eq
方法显示对应的#container
下的div
内容,并隐藏其他兄弟div
内容。这种实现方式利用了jQuery
强大的选择器和样式操作方法,简洁高效地完成了tab
栏切换功能。
还可进一步拓展,例如在切换时添加动画效果,通过fadeIn
和fadeOut
方法,使内容切换更加流畅自然。可在click
事件处理函数中修改如下:
| $(function () { |
| $("#tab>li").click(function () { |
| $(this).addClass("active").siblings("li").removeClass("active"); |
| var index = $(this).index(); |
| $("#container>div").eq(index).fadeIn(300).siblings("div").fadeOut(300); |
| }); |
| }); |
复制
另外,可增加键盘操作支持,比如按Tab
键或方向键也能切换tab
栏。通过监听keydown
事件,判断按键并执行相应的切换逻辑:
| $(document).keydown(function(event) { |
| var tabItems = $('#tab li'); |
| var currentIndex = tabItems.index($('.active')); |
| if (event.key === 'Tab' || event.key === 'ArrowRight') { |
| if (currentIndex < tabItems.length - 1) { |
| tabItems.eq(currentIndex + 1).click(); |
| } |
| } else if (event.key === 'ArrowLeft') { |
| if (currentIndex > 0) { |
| tabItems.eq(currentIndex - 1).click(); |
| } |
| } |
| }); |
复制