jQuery静态方法noop,camelCase,nodeName,trim使用和源码分析
noop方法
jQuery.noop()函数是一个空函数,它什么也不做。
当某些时候你需要传入函数参数,而且希望它什么也不做的时候,你可以使用该函数,也无需再新建一个空的函数。
示例:
// 传入一个空函数作为参数,返回一个空数组
// 空函数的返回值为undefined,而null或undefined值会被$.map()忽略掉。
var result = $.map( [1, 2, 3], $.noop );
document.writeln( result.length ); //
源码分析:
noop: function() {},
camelCase方法
jQuery.camelCase函数的功能就是将形如background-color转化为驼峰表示法:backgroundColor。
此函数在jQuery的data函数,以及涉及到css的诸多函数中都有用到。
示例:
var cssStr='background-color';
alert($.camelCase(cssStr)); //backgroundColor
源码分析:
// Convert dashed to camelCase; used by the css and data modules
// Microsoft forgot to hump their vendor prefix (#9572)
camelCase: function( string ) {
return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
},
该方法的使用主要依赖以下3个正则表达式
// Matches dashed string for camelizing
rdashAlpha = /-([a-z]|[0-9])/ig,
rmsPrefix = /^-ms-/, // Used by jQuery.camelCase as callback to replace()
fcamelCase = function( all, letter ) {
return ( letter + "" ).toUpperCase();
},
正则 rdashAlpha 用于匹配字符串中连字符“ -”和其后的第一个字母或数字。如果连字符“ -”后是字母,则匹配部分会被替换为对应的大写字母;如果连字符“ -”后是数字,则会删掉连字符“-” ,保留数字
正则 rmsPrefix 用于匹配字符串中前缀“-ms-” ,匹配部分会被替换为“ms-” 。这么做是因为在 IE 中,连字符式的样式名前缀“-ms-”对应小写的“ms” ,而不是驼峰式的“ Ms” 。例如, “ -ms-transform”对应“ msTransform”而不是“ MsTransform” 。在 IE 以外的浏览器中,连字符式的样式名则可以正确地转换为驼峰式,例如, “ -moz-transform”对应“MozTransform”。
函数 fcamelCase() 负责把连字符后的字母转换为大写并返回
在方法 jQuery.camelCase() 中,先用正则 rmsPrefix 匹配前缀“ -ms-” ,如果有则修正为“ms-” ;
然后用正则 rdashAlpha 匹配连字符“-”和其后的第一个字母或数字,并用字符串方法 replace() 和函数 fcamelCase() 把匹配部分替换为对应的大写字母或数字
nodeName方法
jQuery.nodeName( elem, name ) 用于检查 DOM 元素的节点名称(即属性 nodeName)与指定的值是否相等,检查时忽略大小写
示例:
alert($.nodeName(document.getElementsByTagName('div')[0],'div'));//true
源码分析:
nodeName: function( elem, name ) {
return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
},
接收两个参数,一个是dom元素,一个是待检测的节点名称,直接返回这两个参数转化为大写之后作全等比较的结果,当然在比较之前首先要保证elem必须是dom节点
trim方法
jQuery.trim( str ) 用于移除字符串开头和结尾的空白符如果传入的参数是 null 或undefined,则返回空字符串;如果传入的参数是对象,则先获取对象的字符串表示,然后移除开头和结尾的空白符,并返回
示例:
var str=' abcdefg ';
alert(str.indexOf(' ')); //
alert($.trim(str).indexOf(' ')); //-1
源码分析:
// Use native String.trim function wherever possible
trim: trim ?
function( text ) {
return text == null ?
"" :
trim.call( text );
} : // Otherwise use our own trimming functionality
function( text ) {
return text == null ?
"" :
text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
},
trim方法是ECMA5新增的方法,对于支持此方法的浏览器而言可以直接调用,如果传入的是null会返回一个空字符串,对于不支持此trim方法的浏览器来说使用正则匹配
// IE doesn't match non-breaking spaces with \s
if ( rnotwhite.test( "\xA0" ) ) {
trimLeft = /^[\s\xA0]+/;
trimRight = /[\s\xA0]+$/;
}
在 IE 9 以下的浏览器中,\s 不匹配不间断空格 \xA0,需要为正则trimLeft 和 trimRight 加上“\xA0”
先调用toString方法说明是可以传入对象或者数组的,如果是对象或者数组就用他们的字符串形式来操作,分别匹配到左右空格之后替换为空字符串(不是含有空格的字符串)
jQuery静态方法noop,camelCase,nodeName,trim使用和源码分析的更多相关文章
- jQuery静态方法isFunction,isArray,isWindow,isNumeric使用和源码分析
上一篇随笔中总结了js数据类型检测的几个方法和jQuery的工具方法type方法,本篇要分析几个方法都依赖type方法,所以不了解type方法的请先参看http://www.cnblogs.com/y ...
- Quartz学习--二 Hello Quartz! 和源码分析
Quartz学习--二 Hello Quartz! 和源码分析 三. Hello Quartz! 我会跟着 第一章 6.2 的图来 进行同步代码编写 简单入门示例: 创建一个新的java普通工程 ...
- Android Debuggerd 简要介绍和源码分析(转载)
转载: http://dylangao.com/2014/05/16/android-debuggerd-%E7%AE%80%E8%A6%81%E4%BB%8B%E7%BB%8D%E5%92%8C%E ...
- Java并发编程(七)ConcurrentLinkedQueue的实现原理和源码分析
相关文章 Java并发编程(一)线程定义.状态和属性 Java并发编程(二)同步 Java并发编程(三)volatile域 Java并发编程(四)Java内存模型 Java并发编程(五)Concurr ...
- Kubernetes Job Controller 原理和源码分析(一)
概述什么是 JobJob 入门示例Job 的 specPod Template并发问题其他属性 概述 Job 是主要的 Kubernetes 原生 Workload 资源之一,是在 Kubernete ...
- Kubernetes Job Controller 原理和源码分析(二)
概述程序入口Job controller 的创建Controller 对象NewController()podControlEventHandlerJob AddFunc DeleteFuncJob ...
- Kubernetes Job Controller 原理和源码分析(三)
概述Job controller 的启动processNextWorkItem()核心调谐逻辑入口 - syncJob()Pod 数量管理 - manageJob()小结 概述 源码版本:kubern ...
- jQuery静态方法inArray,grep,merge,makeArray方法使用和源码分析
inArray方法 确定第一个参数在数组中的位置,从0开始计数(如果没有找到则返回 -1 ). 示例: var arr = [ 4, "Pete", 8, "John&q ...
- jQuery静态方法globalEval使用和源码分析
Eval函数大家都很熟悉,但是globalEval方法却很少使用,大多数参考手册也没有相关api,下面就对其用法和源码相应介绍: jQuery.globalEval()函数用于全局性地执行一段Java ...
随机推荐
- 【hadoop2.2(yarn)】基于yarn成功执行分布式map-reduce,记录问题解决过程。
hadoop2.x改进了hadoop1.x的架构, 具体yarn如何工作以及改进了什么可以在网上学, 这里仅记录我个人搭建的问题和理解,希望能帮助遇到困难的朋友. 在开始前,必须了解yarn版本的ma ...
- vs运行时候冒了这个错:无法启动IIS Express Web 服务器~Win10
后期会在博客首发更新:http://dnt.dkill.net 异常处理汇总-服 务 器 http://www.cnblogs.com/dunitian/p/4522983.html 网上的方法多种, ...
- 【转】Linux C动态内存泄漏追踪方法
原文:http://www.cnblogs.com/san-fu-su/p/5737984.html C里面没有垃圾回收机制,有时候你申请了动态内存却忘记释放,这就尴尬了(你的程序扮演了强盗角色,有借 ...
- java静态代理与动态代理
原文链接:http://www.orlion.ga/207/ 一.代理模式 代理模式是经常用到的设计模式,代理模式是给指定对象提供代理对象.由代理对象来控制具体对象的引用. 代理模式涉及到的角色: 抽 ...
- 深入理解DOM事件机制系列第四篇——事件模拟
× 目录 [1]引入 [2]模拟机制 [3]自定义事件 前面的话 事件是网页中某个特别的瞬间,经常由用户操作或通过其他浏览器功能来触发.但实际上,也可以使用javascript在任意时刻来触发特定的事 ...
- Web前端框架与类库的思考
说起前端框架,我也是醉了.现在去面试或者和同行聊天,动不动就这个框架碉堡了,那个框架好犀利. 当然不是贬低框架,只是有一种杀鸡焉用牛刀的感觉.网站技术是为业务而存在的,除此毫无意义,框架也是一样.在技 ...
- IO通道
本文原创,转载需标明原处. 通道,主要负责传输数据,相当于流,但流只能是输入或输出类型中的其一,而通道则可以兼并二者. 通道的基类是:Channel boolean isOpen() void clo ...
- [linux]ssh(转载)
ssh登陆问题 SSH分客户端openssh-client和openssh-server 如果你只是想登陆别的机器的SSH只需要安装openssh-client(ubuntu有默认安装,如果没有则su ...
- Android APP压力测试(二)之Monkey信息自动收集脚本
Android APP压力测试(二) 之Monkey信息自动收集脚本 前言: 上一篇Monkey介绍基本搬抄官方介绍,主要是为了自己查阅方便.本文重点介绍我在进行Monkey时如何自动收集相关信息 ...
- 程序集与反射技术(C#)
首先我们来看程序集,程序集是代码进行编译是的一个逻辑单元,把相关的代码和类型进行组合,然后生成PE文件(例如可执行文件.exe和类库文件.dll).由于程序集在编译后并不一定会生成单个文件,而可能会生 ...