jQuery css

jQuery css模块用于css属性的修改操作。

 

jQuery.fn.css

jQuery.fn.css = function( name, value ) {//又是用access来操作return jQuery.access( this, function( elem, name, value ) {var styles, len,map = {},i = 0;//如果name是数组if ( jQuery.isArray( name ) ) {//通过getStyles方法返回elem的stylesstyles = getStyles( elem );len = name.length;//创建对应styles的处理函数mapfor ( ; i < len; i++ ) {map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );}return map;}//如果不是数组,则返回jQuery.style或jQuery.cssreturn value !== undefined ?jQuery.style( elem, name, value ) :jQuery.css( elem, name );}, name, value, arguments.length > 1 );
};

又是通过jQuery.access来遍历和操作属性。

根据value值来判断是返回一个函数数组,还是返回一个函数传入jQuery.access。

主要用到jQuery.css和jQuery.style两个方法。

 

getStyles

function getStyles( elem ) {return window.getComputedStyle( elem, null );
}

这是一个获取实际css style的方法。

可是……getComputedStyle是啥东西……

getComputedStyle是一个可以获取当前元素所有最终使用的CSS属性值。返回的是一个CSS样式声明对象([object CSSStyleDeclaration]),只读。

语法:

var styles = window.getComputedStyle("元素", "伪类");

如果没有伪类,则传null。

实际上就是获取最终浏览器绘制时的css值,因为style不会返回所有css值,只会返回设置的css值,所以需要用该方法来获得所有css值。

限于篇幅本文就不详细解释了,有兴趣的朋友请参见:获取元素CSS值之getComputedStyle方法熟悉

 

jQuery.style

jQuery.style = function( elem, name, value, extra ) {// 不处理text和comment节点if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {return;}var ret, type, hooks,//修正css属性名origName = jQuery.camelCase( name ),style = elem.style;//jQuery.cssProps是css缓存,如果有则取出值,否则通过vendorPropName函数来得到实际的css名字name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) );// 获取必要的钩子hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];// 如果value已定义if ( value !== undefined ) {type = typeof value;// 如果value是+=或则-=一个数,则转成对应的数字if ( type === "string" && (ret = rrelNum.exec( value )) ) {value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) );// 将其类型改成numbertype = "number";}// 确保NaN和null不被设置if ( value == null || type === "number" && isNaN( value ) ) {return;}// 如果value是数字则加上pxif ( type === "number" && !jQuery.cssNumber[ origName ] ) {value += "px";}// 修复#8908,IE9的问题,对于克隆的元素清除掉其background时,其原型的background也会被清除if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) {style[ name ] = "inherit";}// 如果钩子存在,则使用钩子设置值,否则用style[ name ]来设置值if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) {style[ name ] = value;}} else {// 如果钩子存在,则使用钩子返回值if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {return ret;}// 否则用style[ name ]来返回值return style[ name ];}
};

这里面有一个挺有趣的问题。下面两个代码最后结果是多少呢?

alert(("-" + 5) + 6);
alert(("-" + 5) * 6);

 

jQuery.css

jQuery.css = function( elem, name, extra, styles ) {var val, num, hooks,origName = jQuery.camelCase( name );// 修正名字namename = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) );// 得到必要的钩子hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];// 如果有钩子则使用get来获取值if ( hooks && "get" in hooks ) {val = hooks.get( elem, true, extra );}// 没有钩子则用curCSS函数获取if ( val === undefined ) {val = curCSS( elem, name, styles );}// 将"normal"转成特定的值if ( val === "normal" && name in cssNormalTransform ) {val = cssNormalTransform[ name ];}// 是否需要强行转成数字或者trueif ( extra === "" || extra ) {num = parseFloat( val );return extra === true || jQuery.isNumeric( num ) ? num || 0 : val;}return val;
};

 

curCSS函数

var curCSS = function( elem, name, _computed ) {var width, minWidth, maxWidth,computed = _computed || getStyles( elem ),// 解决IE9的问题,getPropertyValue用IE9中用.css('filter')ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined,style = elem.style;// 如果实际styles数组存在if ( computed ) {//如果ret为"",且elem不是子文档(没有style)if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {ret = jQuery.style( elem, name );}// 支持:Chrome < 17,Safari 5.1// 来自Dean Edwards帅呆的hack// 将百分比转成更加有用的pxif ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {// 记住原始值width = style.width;minWidth = style.minWidth;maxWidth = style.maxWidth;// 通过改变minWidth、maxWidth、width得到相应的px值style.minWidth = style.maxWidth = style.width = ret;ret = computed.width;// 再将原来的值赋回去style.width = width;style.minWidth = minWidth;style.maxWidth = maxWidth;}}return ret;
};

 Dean Edwards的hack主要利用的是部分浏览器会使用计算值来表示元素宽度,而非使用值。

 

show & hide

jQuery.fn.show = function() {return showHide( this, true );
};

jQuery.fn.show直接引用showHide函数,jQuery.fn.hide也是一样:

jQuery.fn.hide = function() {return showHide( this );
};

而jQuery.fn.toggle则可接受state或者通过判断当前元素是否hidden,再调用jQuery.fn.show或者jQuery.fn.hide。

jQuery.fn.toggle = function( state ) {var bool = typeof state === "boolean";return this.each(function() {if ( bool ? state : isHidden( this ) ) {jQuery( this ).show();} else {jQuery( this ).hide();}});
};

 

showHide函数

function showHide( elements, show ) {var elem,values = [],index = 0,length = elements.length;// 遍历所有元素for ( ; index < length; index++ ) {elem = elements[ index ];//如果元素没有style属性,则跳过if ( !elem.style ) {continue;}//取出保存在缓存的olddisplay值values[ index ] = jQuery._data( elem, "olddisplay" );//如果要显示if ( show ) {// 通过将display设置成"",来判断""元素是否会显示if ( !values[ index ] && elem.style.display === "none" ) {elem.style.display = "";}// 如果display被设成了"",并且元素隐藏了,则通过css_defaultDisplay设置默认显示方法if ( elem.style.display === "" && isHidden( elem ) ) {values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) );}//如果缓存没有值,且元素没有隐藏} else if ( !values[ index ] && !isHidden( elem ) ) {//将目前的display值保存入缓存jQuery._data( elem, "olddisplay", jQuery.css( elem, "display" ) );}}// 在第二次循环设置display属性,避免不断回流for ( index = 0; index < length; index++ ) {elem = elements[ index ];if ( !elem.style ) {continue;}if ( !show || elem.style.display === "none" || elem.style.display === "" ) {// 是否要西那是,要显示则设置成缓存值或者"",否则设置为"none"elem.style.display = show ? values[ index ] || "" : "none";}}return elements;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/548124.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenGL 人物走动源码

2019独角兽企业重金招聘Python工程师标准>>> OpenGL 人物走动源码&#xff0c;记得前两天发了一个OpenGL的立方体程序&#xff0c;这个比那个厉害&#xff0c;这个是一个可以走动的小怪兽&#xff01; 转载:http://www.adobex.com/android/source/details/00000064.…

在Hyper-v中创建并安装虚拟机

1.1.1 创建并安装虚拟机 创建并安装虚拟机系统的步骤&#xff1a; 1. 点击“开始”“程序”“管理工具”“Hyper-V 管理器”。 2. 如图点击“新建”“虚拟机”。 3. 在出现的开始之前对话框&#xff0c;点击“下一步”。 4. 在指定名称和位置对话框&#xff0c;输入名称&#x…

《算法导论》读书笔记之第1章 算法在计算机中的作用

本章是本书的开篇&#xff0c;介绍了什么是算法&#xff0c;为什么要学习算法&#xff0c;算法在计算机中的地位及作用。 算法&#xff08;algorithm&#xff09;简单来说就是定义良好的计算机过程&#xff0c;它取一个或一组值作为输入&#xff0c;并产生出一个或一组值作为输…

ubuntu部署tomcat

安装版本&#xff1a;apache-tomcat-7.0.29.tar.gz&#xff08;官方网址&#xff1a;Apache Tomcat&#xff09; 安装步骤&#xff1a; 1、下载 Tomcat 下载 apache-tomcat-7.0.29.tar.gz&#xff08;官方网址&#xff09; 2、解压 Tomcat 解压 apache-tomcat-7.0.29.tar.gz ta…

android 底部菜单

2019独角兽企业重金招聘Python工程师标准>>> 新浪微薄上的一个底部菜单的实现,有兴趣的 可以看一下转载:http://www.adobex.com/android/source/details/00000118.htm 转载于:https://my.oschina.net/androidcode/blog/103835

reposurgeon 2.15 发布

reposurgeon 2.15 改成 cvs-fast-export 用于读取 RCS 和 CVS 集合&#xff0c;在效率上也有一些改进&#xff0c;并对代码进行了清理。 reposurgeon是一种工具,用于编辑版本控制存储库的历史。它允许你做一些版本控制不允许你做的操作&#xff0c;比如编辑过去的评论和元数据、…

PullToRefresh

2019独角兽企业重金招聘Python工程师标准>>> 实现下拉刷新列表内容的效果。 Code4App编译测试&#xff0c;测试环境&#xff1a;Xcode 4.3, iOS 5.0。 转载:http://www.adobex.com/ios/source/details/00000062.htm 转载于:https://my.oschina.net/u/868244/blog/10…

LYNC文件传输功能开关

LYNC如何关闭和开启文件传输功能&#xff1f;大家都知道有文件筛选的控制&#xff0c;在POWERSHELL也没有看到关闭文件传输的命令。其实这个功能在控制台上一个不显眼的位置&#xff0c;见下图&#xff1a; 此处的勾用来控制客户端上的附件图标&#xff0c;需要重新启动客户端才…

Mybatis(1)---入门篇单表查询

1.Mybatis介绍 MyBatis 是一款优秀的持久层框架&#xff0c;它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的POJO&#xff08;Plain Old …

Mybatis+Tomcat使用JNDI配置数据源入门

在我们已经有了Mybatis基础的情况下&#xff0c;我们可以使用Tomcat部署web项目1.创建Maven项目 选择webapp 2.配置pom.xml 在pom.xml中添加依赖 这里的依赖比单纯的Mybatis配置多了两个 一个是jsp的依赖&#xff0c;另一个是servlet <dependencies><dependency>&l…

Liferay开发学习Part6:Service Builder

2019独角兽企业重金招聘Python工程师标准>>> 一.什么是Service Builder&#xff1f; Service Builder是liferay IDE提供的一种代码生成方案&#xff0c;开发人员只需编辑一个数据库实体的描述文件&#xff08;XML&#xff09;,即可根据XML文件生成Spring层代码、Hib…

html+css实现响应式布局入门

什么是响应式布局 响应式布局是Ethan Marcotte在2010年5月份提出的一个概念&#xff0c;简而言之&#xff0c;就是一个网站能够兼容多个终端——而不是为每个终端做一个特定的版本。这个概念是为解决移动互联网浏览而诞生的。响应式布局可以为不同终端的用户提供更加舒适的界面…

UNIX-LINUX编程实践教程-第三章-实例代码注解-ls2

一 问题 对ls1的功能进行扩展&#xff0c;以达到类似ll命令的功能。 二 分析 在ls1中&#xff0c;我们利用readdir()函数和dirent结构体来获得目标文件夹内的文件名&#xff08;dirent->d_name&#xff09;。  现在我们借助函数stat()和结构体stat以及上面得到的文件名来获…

ajax入门篇

什么是ajax AJAX即“Asynchronous JavaScript and XML”&#xff08;异步的JavaScript与XML技术&#xff09;&#xff0c;指的是一套综合了多项技术的浏览器端网页开发技术。Ajax的概念由杰西詹姆士贾瑞特所提出[1]。 传统的Web应用允许用户端填写表单&#xff08;form&#…

BJRangeSliderWithProgress

2019独角兽企业重金招聘Python工程师标准>>> BJRangeSliderWithProgress 是一个带范围选择的进度条&#xff0c;我用它来做录音的进度指示&#xff0c;并可在选择的范围内进行回放。 转载:http://www.adobex.com/ios/source/details/00000865.htm 转载于:https://my…

servlet+JQuery ajax以json的形式的验证表单小实例

JQuery $.ajax() $.ajax({type: POST, //请求方式 一般是get&#xff0c;posturl: url , // 这是必需的&#xff0c;规定把请求发送到哪个 URLdata: data , //这个是可选。映射或字符串值。规定连同请求发送到服务器的数据。java中用request.getPara…

JSONObject与GSON的一些常用的方法的使用

通过学习ajax然后接触了Json最后通过json接触到了JSONObject和Google的GSON&#xff0c;下面来一起看看JSONObject和GSON吧。 先附上依赖 //JSONObject依赖<dependency><groupId>net.sf.json-lib</groupId><artifactId>json-lib</artifactId>&…

tomcat 启用NIO

从Tomcat6.0以后, Java开发者很容易就可以是用NIO的技术来提升tomcat的并发处理能力。 <Connector port"8080" protocol"HTTP/1.1"connectionTimeout"20000"redirectPort"8443" /> 修改成&#xff1a; <Connector port"…

Mybatis(2)---多表查询

首先数据库表展示 User表 Role角色表 关联User表与Role表关系的user_role表 因为是要串联关系所以需要设置外键&#xff0c;以下是外键展示 工程目录展示 pom.xml依赖配置 <dependencies><dependency><groupId>junit</groupId><artifactId>…

ORA-29702:error occurred in Cluster Group Service operation错误解决

ORA-29702:error occurred in Cluster Group Service operation错误解决作者: djb1008(http://djb1008.itpub.net)发表于: 2011.05.10 15:43分类: Oracle 出处: http://djb1008.itpub.net/post/42280/517654--------------------------------------------------------------- 一…