学习zepto.js(对象方法)[1]
学习zepto.js(对象方法)[1]
zepto也是使用的链式操作,链式操作:函数返回调用函数的对象.
但并不是所有的对象方法都可以进行链式操作,举几个例子:.size(),.html()|.text()//不传参数的情况下;
若非特殊说明,下边介绍的方法都会返回zepto对象;
add():
支持一到二个参数,第一个为选择器,与$()的规则相同,甚至是,第一个参数传进去一个function,它也会正确执行(后果自负- -),所以说,正确的使用方式是传入选择器,dom对象,或者一段html,这都是可以的,如果有多个,请用数组括起来,
var temp = $(["li","span","div"]).add(["p","p"]).size();// --> size为4,因为会对返回的集合进行去重处理
第二个参数是匹配的上下文,默认不传就按着document来.
add函数本身无任何亮点- -,将两个参数原封不动的传入$()然后返回一个Zepto对象,执行concat函数,该函数会将所有参数添加至调用函数对象的末尾,
toArray方法会调用get方法,当get方法执行时而没有传入参数,会将该对象所有的匹配元素以数组的形式返回;
uniq方法是一个数组去重的方法,返回的还是一个数组,然后回到add方法再次通过$()构造一个zepto对象并返回;
addClass():
该方法接收一个参数,可以直接传入一个字符串作为类名,如有多个,使用空格分开.
$("p").addClass("content title");// --> content title
还有一种调用方式是传入一个函数,函数可以接收到两个参数,第一个是当前循环到的下标,第二个是当前对象之前的className.
$('p1','p2','p3').addClass(function (index, oldClass) {
return 'dynamic' + index;
});
// p1 --> dynamic0
// p2 --> dynamic1
// p3 --> dynamic2
函数必须返回一个字符串,否则会运行异常.
通过each方法循环遍历对象,each方法会返回一个zepto对象.首先会判断元素是否存在className属性,
通过className方法获取到当前元素的所有className信息的字符串;
className方法用来取信息或者存入信息都是可以的,就像.css()方法一样,有一个参数就是get,有两个参数就是set;
(关于这个svg的属性…本人才疏学浅,没有接触过…)
无视掉那个svg相关的东西来说,该方法就是获取到传入的第一个参数的className属性,如果第二个参数不存在,则返回node的className信息,如果存在值,就将值赋给node的className属性;
再回到addClass方法的each循环中,变量cls拿到了该元素的className,
该方法判断第二个参数是否为function,如果是,就通过上下文(context)来执行,并传入两个参数,idx(下标),payload(在addClass里边,这个值为元素之前的className)
通过funcArg取到要增加的className,我们的newName变量拿到了要add的className.然后将newName以空格分割(s表示空格,s+表示连续的一个及一个以上的空格),split分割返回一个数组,
然后调用forEach方法,这里注意forEach方法传入了第二个参数,第二个参数的用途是设置forEach中this的指向.详情可以看MDN Array.prototype.forEach()
在循环内部,我们使用hasClass函数来判断该元素是否存在这个类,如果不存在,则将该className装入数组;
Array对象的一系列循环方法第二个参数貌似都是设置函数内部this指向的(没有资料可以证明我说的话,用之前查文档,错了别找我- -)
classRE函数是一个使用缓存的动态生成正则对象的函数
className方法上边已经提过了,只传入一个参数表示get,所以hasClass的作用就是判断该元素className中是否存在我们要插入的这个值.
正则对象调用的test()方法会返回一个bool值,匹配成功为true,匹配失败为false;
最后在addClass方法中,调用className传入两个参数,第一个是元素对象,第二个是原有class加上className集合转换的字符串.
removeClass():
//没有按照API的顺序来,直接把class操作的这一套装说完它- -
removeClass函数只有一个可选的参数,可以为一个字符串(要移除的className),或者是一个function,用法同addClass,函数也必须要返回一个字符串
$('<p class="test test2 test3"></p>').removeClass("test test3");
// --> <p class="test2"></p>/*<li>list item 1</li><li>list item 2</li><li>list item 3</li>*/
$('li').addClass("test");
$('li').removeClass(function (index, oldClass){
return index % 2 === 0 ? "test" : "";
})// --> [li, li.test, li]
//或者可以不填参数,直接调用,直接调用会清除对象的所有className
$('<p class="test test2 test3">').removeClass();// --> <p></p>
removeClass相对于addClass简单点;
大体相同,唯有在forEach循环中,addClass是给集合push值,而removeClass是从一个字符串中replace掉值;
toggleClass():
方法使用与前两个类似,只不过多了第二个参数,第二个参数为true时,执行addClass,第二个参数为false时,执行removeClass(感觉用处不算太大额…)
直接贴代码.如果第二个参数没有传,就按照有了删,没了填的方案来走,如果第二个参数有值,(有种走后门既视感),则不执行hasClass方法,直接通过when变量的值来决定使用什么方法.
关于class的几个方法算是说完了.个人认为,这是用的比较多的一套方法了.比如结合交互时做一个动画效果,在CSS无法实现的情况下,就可以将animation写到一个class中,触发某个事件时给元素add该class,就可以完成动画了.
今天就先说到这,本来想把后边的append也看了呢- -仔细一研究,码量有点足…另开一篇吧.
- 从补丁到漏洞分析——记一次joomla漏洞应急
- Python中对字节流/二进制流的操作:struct模块简易使用教程
- C++ 后台程序实时性能监控
- 系统入侵后的排查思路及心得
- 记一次Linux被入侵的经历
- C++ FFLIB之ffcount:通用数据分析系统
- Python内置数据结构之迭代器知多少?
- Python之解析式您知多少?
- C++ FFLIB 之FFDB: 使用 Mysql&Sqlite 实现CRUD
- C++ FFLIB之FFXML: 极简化TinyXml 读取
- 架构高性能网站秘笈(五)——Web组件分离
- 安全编程-c++野指针和内存泄漏
- 稳扎稳打JS——this
- FFLIb Demo && CQRS
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- GJK算法计算凸多边形之间的距离
- 通过实际案例摸清楚Spring事务传播的行为
- 如何通过容器搭建稳定可靠的私有网盘(NextCloud)
- 初识ABP vNext(1):开篇计划&基础知识
- 基于 HTML5 Canvas 的病毒模拟视觉试验台
- #云开发高阶实战任务总结# 投票系统的解析与设计
- K8S 环境下的使用 ConfigMap 进行远程配置
- 腾讯云语音识别python-sdk使用笔记
- TKE部署ES如何配置参数vm.max_map_count
- Jquery validate remote 验证数据唯一
- MySQL 案例:乱码,字符集与错入错出的 MySQL
- Jenkins常用插件Copy Artifact的使用
- 聊聊dubbo-go的roundRobinLoadBalance
- 腾讯云录音文件识别请求和结果查询
- 【Kubernetes】kubectl top 如何使用