深入学习jQuery样式操作
前面的话
使用javascript脚本化CSS是一个系列,包括行间样式、计算样式、CSS类、样式表、动态样式和伪元素这六部分。而jQuery也实现了脚本化CSS的功能,提供了更为简单易用的方法
设置样式
前面介绍过jQuery的特性操作,可以通过attr()方法进行样式设置
- <style>
- .cB{color: blue;}
- </style>
- <script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
- <div id="test">测试文字</div>
- <button id="btn1">按钮</button>
- <script>
- btn1.onclick = function(){
- $('#test').attr('class','cB')
- }
- </script>
[注意]jQuery对象无法直接使用className属性设置类名,需要转换为javascript对象才可以使用
- <style>
- .cB{color: blue;}
- </style>
- <script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
- <div id="test">测试文字</div>
- <button id="btn1">按钮</button>
- <script>
- btn1.onclick = function(){
- $('#test')[0].className = 'cB';
- }
- </script>
增加样式
addClass(className)
addClass(className)方法为每个匹配元素增加一个或多个样式名,如果值已存在,则不添加
- <style>
- .cB{color: blue;}
- .bgO{background-color:orange;}
- </style>
- <script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
- <div id="test">测试文字</div>
- <button id="btn1">按钮</button>
- <script>
- btn1.onclick = function(){
- $('#test').addClass('cB bgO')
- }
- </script>
addClass(function(index, currentClass))
addClass()方法可以接受一个函数作为参数,这个函数返回一个或更多用空格隔开的要增加的样式名。接收index参数表示元素在匹配集合中的索引位置和currentClass参数表示元素上原来的className。在函数中this指向匹配元素集合中的当前元素
- <style>
- .cB{color: blue;}
- .bgO{background-color:orange;}
- </style>
- <script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
- <div id="test" class="cB">测试文字</div>
- <button id="btn1">按钮</button>
- <script>
- btn1.onclick = function(){
- $('#test').addClass(function(index,currentClass){
- alert('' + index + currentClass );//'0cB'
- return 'bgO';
- })
- }
- </script>
删除样式
removeClass()
removeClass()方法不带参数时,将删除全部类名
- <style>
- .cB{color: blue;}
- .bgO{background-color:orange;}
- </style>
- <script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
- <div id="test" class="cB bgO">测试文字</div>
- <button id="btn1">按钮</button>
- <script>
- btn1.onclick = function(){
- $('#test').removeClass();
- }
- </script>
removeClass([className])
removeClass([className])方法用来删除参数中指定的一个或多个类名
- <style>
- .cB{color: blue;}
- .bgO{background-color:orange;}
- </style>
- <script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
- <div id="test" class="cB bgO">测试文字</div>
- <button id="btn1">按钮</button>
- <script>
- btn1.onclick = function(){
- $('#test').removeClass('cB bgO');
- }
- </script>
removeClass(function(index, currentClass))
removeClass()方法可以接收一个函数为参数,该函数返回一个或多个将要被移除的样式名。index参数表示在所有匹配元素的集合中当前元素的索引位置,currentClass参数表示原有的样式名
[注意]由于class是保留字,所以形参名设置为class时,会导致错误
- <style>
- .cB{color: blue;}
- .bgO{background-color:orange;}
- </style>
- <script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
- <div id="test" class="cB bgO">测试文字</div>
- <button id="btn1">按钮</button>
- <script>
- btn1.onclick = function(){
- $('#test').removeClass(function(index,currentClass){
- alert('' + index + currentClass);//0cB bgO
- return 'bgO';
- });
- }
- </script>
切换样式
toggleClass()
在做某些效果的时候,可能会针对同一节点的某一个样式不断的切换,也就是addClass与removeClass的互斥切换,比如隔行换色效果
jQuery提供一个toggleClass()方法用于简化这种互斥的逻辑,通过toggleClass()方法动态添加删除Class,一次执行相当于addClass,再次执行相当于removeClass
toggleClass()有以下4种用法
【1】toggleClass()
当toggleClass()方法没有参数时,将删除或还原全部类名
- <style>
- .cB{color: blue;}
- .bgO{background-color:orange;}
- </style>
- <script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
- <div id="test" class="cB bgO">测试文字</div>
- <button id="btn1">按钮</button>
- <script>
- btn1.onclick = function(){
- $('#test').toggleClass();
- }
- </script>
【2】toggleClass(className)
toggleClass(className)方法在匹配的元素集合中的每个元素上切换的一个或多个(用空格隔开)样式类名
- <style>
- .cB{color: blue;}
- .bgO{background-color:orange;}
- </style>
- <script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
- <div id="test" class="cB bgO">测试文字</div>
- <button id="btn1">按钮</button>
- <script>
- btn1.onclick = function(){
- $('#test').toggleClass('bgO');
- }
- </script>
【3】toggleClass(className,switch)
toggleClass()方法可以接收第二个参数switch,用来判断样式类是否应该被添加或删除。如果这个参数的值是true,那么这个样式类将被添加,相当于addClass;如果这个参数的值是false,那么这个样式类将被移除,相当于removeClass
- $('#foo').toggleClass(className, addOrRemove);
- //等价于
- if (addOrRemove){
- $('#foo').addClass(className);
- }else{
- $('#foo').removeClass(className);
- }
- <style>
- .cB{color: blue;}
- .bgO{background-color:orange;}
- </style>
- <script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
- <div id="test" class="cB bgO">测试文字</div>
- <button id="btn1">添加</button>
- <button id="btn2">删除</button>
- <script>
- btn1.onclick = function(){$('#test').toggleClass('bgO',true);}
- btn2.onclick = function(){$('#test').toggleClass('bgO',false);}
- </script>
【4】toggleClass(function(index,currentClass,switcher)[,switch])
toggleClass()可以接收一个函数作为参数,该函数用来返回在匹配的元素集合中的每个元素上用来切换的样式类名,接收元素的索引位置和元素旧的样式类作为参数
- <style>
- .cB{color: blue;}
- .bgO{background-color:orange;}
- </style>
- <script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
- <div id="test" class="cB bgO">测试文字</div>
- <button id="btn1">添加</button>
- <button id="btn2">删除</button>
- <button id="btn3">变更</button>
- <script>
- btn1.onclick = function(){$('#test').toggleClass(function(index,currentClass,switcher){
- alert('' + index + currentClass + switcher)
- return 'bgO'
- },true)};
- btn2.onclick = function(){$('#test').toggleClass(function(index,currentClass,switcher){
- alert('' + index + currentClass + switcher)
- return 'bgO'
- },false)};
- btn3.onclick = function(){$('#test').toggleClass(function(index,currentClass,switcher){
- alert('' + index + currentClass + switcher)
- return 'bgO'
- })};
- </script>
判断样式
hasClass(className)
hasClass(className)方法用于确定任何一个匹配元素是否有被分配给定的类名,如果有则返回true;否则,返回false
- <style>
- .cB{color: blue;}
- .bgO{background-color:orange;}
- </style>
- <script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
- <div id="test" class="cB bgO">测试文字</div>
- <button id="btn1">按钮</button>
- <button id="btn2">是否存在指定样式</button>
- <script>
- btn1.onclick = function(){$('#test').toggleClass('bgO');}
- btn2.onclick = function(){alert($('#test').hasClass('bgO'))}
- </script>
[注意]该方法实际是为了增强代码可读性产生的。在jQuery()内部实际上是调用了is()方法来完成这个功能的
在javascript中,HTML5为所有元素添加了classList属性,这个classList属性是新集合类型DOMTokenList的实例,它也有类似的方法
- add(value) 将给定的字符串值添加到列表中,如果值已存在,则不添加
- contains(value) 表示列表中是否存在给定的值,如果存在则返回true,否则返回false
- remove(val,e) 从列表中删除给定的字符串
- toggle(value) 如果列表中已经存在给定的值,删除它;如果列表中没有给定的值,添加它
由于IE9-浏览器不支持classList属性,也就不支持add()、contains()、remove()和toggle()这四个方法
关于classList属性的类似的4个方法及兼容写法的详细信息移步至此
样式操作
在javascript中,查询计算样式需要处理getComputedStyle()方法和currentStyle属性的兼容;设置行间样式需要对style属性赋值
而在jQuery中,使用CSS()方法就可以解决以上的问题
【获取样式】
css(propertyName)
css(propertyName)方法用来获取匹配元素集合中的第一个元素的样式属性的计算值。要注意的是,这里获取的是计算样式,即类似于原生javascript的getComputedStyle或currentStyle
- <style>
- div { width:60px; height:60px; margin:5px; float:left; }
- </style>
- <script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
- <span id="result"></span>
- <div style="background-color:blue;"></div>
- <div style="background-color:rgb(15,99,30);"></div>
- <div style="background-color:#123456;"></div>
- <div style="background-color:#f11;"></div>
- <script>
- $("div").click(function () {
- $("#result").html("背景颜色是 " + $(this).css("background-color"));
- });
- </script>
[注意]简写速写的CSS属性(如:margin,background,border)不支持
- <script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
- <div id="test" style="margin-top:10px;">测试文字</div>
- <script>
- //chrome浏览器输出10px 0px 0px
- //firefox和IE浏览器输出空字符串''
- console.log( $('#test').css('margin'));
- </script>
css(propertyNames)
css(propertyNames)方法也可以接受一个或多个CSS属性组成的数组作为参数
从jQuery 1.9开始, 传递一个CSS的样式属性的数组给.css()将返回属性-值配对的对象
- <script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
- <div id="test" style="margin-top:10px;">测试文字</div>
- <script>
- //{width: "1904px", height: "18px", font-size: "16px"}
- console.log( $('#test').css(['width','height','font-size']));
- </script>
【设置样式】
css(propertyName,value)
可以通过css(propertyName,value)方法进行样式设置
[注意]从jQuery1.6开始,css()接受类似于animate()的相对值。相对值时以+=或者-=开头的字符串,表示递增或递减当前的值。如果一个元素的左padding是10px,.css( "padding-left", "+=15" )将返回总的左padding为25px
- <script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
- <div id="test" style="width:100px;background-color:grey">测试文字</div>
- <script>
- $('#test').mouseover(function(){
- $(this).css('color','red');
- $(this).css('width','+=100');
- })
- $('#test').mouseout(function(){
- $(this).css('color','green');
- $(this).css('width','-=100');
- })
- </script>
css(properties)
css()方法设置样式时,允许以一个属性-值配对的对象作为参数
- <script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
- <div id="test" style="width:100px;background-color:grey">测试文字</div>
- <script>
- $('#test').mouseover(function(){
- $(this).css({'color':'red','width':'+=100'});
- })
- $('#test').mouseout(function(){
- $(this).css({'color':'green','width':'-=100'});
- })
- </script>
[注意]css()方法支持驼峰写法与中划线写法,内部做了容错的处理
在驼峰写法中,属性名可以不使用引号包裹;但是在中划线写法中,必须用引号包裹
- .css({'background-color': '#ffe', 'border-left': '5px solid #ccc'})
- //等价于
- .css({backgroundColor: '#ffe', borderLeft: '5px solid #ccc'})
css(propertyName,function(index, value))
通过css()方法设置样式时,第二个参数可以是一个函数,this指向当前元素,index参数表示元素在匹配集合中的索引位置,html参数表示元素上原来的HTML内容。函数返回设置的值
[注意]当一个数只被作为值(value)的时候,jQuery会将其转换为一个字符串,并添在字符串的结尾处添加px,例如.css("width",50})与.css("width","50px"})一样
- <script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
- <div id="test" style="width:100px;background-color:grey">测试文字</div>
- <script>
- $('#test').mouseover(function(){
- $(this).css({width:function(index ,value){
- return parseFloat(value) * 1.2;
- },color: 'red'
- });
- })
- $('#test').mouseout(function(){
- $(this).css({width:function(index ,value){
- return parseFloat(value) / 1.2;
- },color: 'green'});
- })
- </script>
删除样式
使用css()方法也可以删除样式,当css()方法的样式属性的值为空字符串时,会从元素上移除该样式(若该属性存在的话)
[注意]IE8-浏览器中,删除的简写属性,如border或background将完全删除该元素样式,不管是在样式表或<style>元素中
- <script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.min.js"></script>
- <style>
- div{border-left:3px solid black;}
- </style>
- <body>
- <div id="test" style="border-left:3px solid green;">内容</div>
- <script>
- $('#test').click(function(){
- $(this).css('border','');
- })
- </script>
深入学习jQuery样式操作的更多相关文章
- 深入学习jQuery节点操作
× 目录 [1]创建节点 [2]插入节点 [3]删除节点[4]复制节点[5]替换节点[6]包裹节点 前面的话 DOM节点操作包括创建节点.插入节点.移除节点.替换节点和复制节点.jQuery也有类似的 ...
- jQUery 样式操作
一.css样式操作的方法: 1..css("样式"):获得样式值,比如$("input").css("color") 获得input中字体 ...
- 【Java EE 学习 33 上】【JQuery样式操作】【JQuery中的Ajax操作】【JQuery中的XML操作】
一.JQuery中样式的操作 1.给id=mover的div采用属性增加样式.one $("#b1").click(function(){ $("#mover" ...
- 深入学习jQuery特性操作
× 目录 [1]获取特性 [2]设置特性 [3]删除特性 前面的话 每个元素都有一个或者多个特性,这些特性的用途就是给出相应元素或者其内容的附加信息.操作特性的DOM方法主要有3个:getAttrib ...
- jQuery 样式操作、文档操作、属性操作的方法总结
文档操作: addClass() 向匹配的元素添加指定的类名.after() 在匹配的元素之后插入内容.append() ...
- jQuery样式操作
获取样式和设置样式 <p class='myClass' title='this is p'>this is p</p> 样式其实就是class属性所以设置和获取样式都能用a ...
- jquery——样式操作
思想:同一个函数完成取值和赋值 addClass.removeClass. <!DOCTYPE html> <html lang="en"> <hea ...
- jQuery属性和样式操作
回顾 1. jquery基本使用 <script src="jquery.min.js"></script><script> $(functio ...
- Jquery选择器与样式操作
jquery选择器 jquery用法思想一 选择某个网页元素,然后对它进行某种操作 jquery选择器 jquery选择器可以快速地选择元素,选择规则和css样式相同,使用length属性判断是否选择 ...
随机推荐
- nandaom
this python</div><div><br></div><div>hahah</div><div> 来自为知 ...
- android copy项目后修改项目名
有个eclipse下的Android项目,现在因为有个需求想在复制出来一个项目,把这个项目变成两个独立项目.在同一个工作空间下不能同时存在项目名称一样的项目,所以需要修改项目名.具体操作如下: 1.修 ...
- HTML5可视化编辑与微数据
1.HTML 5 全局 contenteditable 属性 contenteditable 属性规定是否可编辑元素的内容. <p contenteditable="true" ...
- ThreadLocal对象使用过程中容易陷入的坑
ThreadLocal对象帮助我们管理线程内的对象,保证对象在线程之间是相互隔离的. 今天碰到的坑是这样的: index01.html页面加载的时候会发送一次a请求,然后点击附件上传的时候会发送上传请 ...
- Spring之注入的几种方式
普通注入 在配置文件里 <!-- 构造注入 --> <bean id="user1" class="entity.User"> < ...
- VB.net 2010 AndAlso,OrElse和And,Or的区别
'************************************************************************* '**模 块 名:VB.net 2010 AndA ...
- DPC和ISR的理解
首先来说中断 计算机的中断分为软中断和硬中断,即IRQL和DIRQL,共32个级别,从0~31级别依次提升,0~2属于软中断 一般线程运行于PASSIVE_LEVEL级别,如果不想在运行时切换到其他线 ...
- java学习之面向对象(3)
下面来谈谈java编程中的一些语法: 1.什么是对象数组? 对象数组就是数组里的每个元素都是类的对象,赋值时先定义对象,然后将对象直接赋值给数组. 对象数组的声明: 类名[] 对象数组名称 = n ...
- Wine——在Linux上运行Windows软件
官网:https://www.winehq.org/ 参考: wikipedia 教你使用Wine在Linux上运行Windows软件 如何安装和使用Wine,以便在Linux上运行Windows应用 ...
- LINUX 下时间转换为秒数
linux下时间是从1970.1.1开始算的秒数 //转来自网址 http://blog.csdn.net/wind19/article/details/6579495 $ dateTue Feb 3 ...