基于ES6的tinyJquery
原文地址:Bougie的博客
jQuery作为曾经Web前端的必备利器,随着MVVM框架的兴起,如今已稍显没落。但它操作DOM的便利性无出其右。我用ES6写了一个基于class简化版的jQuery,包含基础DOM操作,支持链式操作,仅供日常使用。当然,它不支持IE。
构造器(constructor)
构造一个tinyJquery对象。功能:基于基本选择器构造,包括id、class、tagName;基于原生DOM构造,将原生DOM对象转化为tinyJquery对象。为支持批量操作,tinyJquery构造器应包含复数的DOM。
class tinyJquery {
constructor(name) {
if (typeof name == 'string') {
this.dom = document.querySelectorAll(name)
} else if (name.constructor.name == 'NodeList' || Array.isArray(name)){
this.dom = name
} else {
this.dom = [name]
}
}
}
使用$函数构建tinyJquery对象
function $(name) {
return new tinyJquery(name)
}
方法(后续会渐渐完善)
event操作
// addEventListener
on(eventName, fn, bubble = false) {
this.dom.forEach(i => {
i.addEventListener(eventName, fn, !bubble)
})
return $(this.dom)
}
// removeEventListener
un(eventName, fn, bubble = false) {
this.dom.forEach(i => {
i.removeEventListener(eventName, fn, !bubble)
})
return $(this.dom)
}
class操作
// addClass
ac(className) {
this.dom.forEach(i => {
i.classList.add(className)
})
return $(this.dom)
}
// removeClass
rc(className) {
this.dom.forEach(i => {
i.classList.remove(className)
})
return $(this.dom)
}
// toggleClass
tc(className) {
this.dom.forEach(i => {
i.classList.toggle(className)
})
return $(this.dom)
}
// containClass
cc(className) {
let flag = false
this.dom.forEach(i => {
if(i.classList.contains(className)) flag = true
})
return flag
}
属性操作
// set inline style
css(obj) {
this.dom.forEach(v => {
Object.keys(obj).forEach(i => {
v.style[i] = obj[i]
})
})
return $(this.dom)
}
// get or set input value
val(val) {
if(val) {
this.dom[0].value = val
return $(this.dom)
} else {
return this.dom[0].value
}
}
内容操作
// get or set dom innerHtml
html(val) {
if(val) {
this.dom.forEach(i => {
i.innerHTML = val
})
return $(this.dom)
} else {
return this.dom[0].innerHTML
}
}
// get or set attribute
attr(key, val) {
if(key && !val) {
return this.dom[0].getAttribute(key)
} else {
this.dom.forEach(i => {
i.setAttribute(key, val)
})
return $(this.dom)
}
}
表单操作
// get JSONData
serializeObject() {
let dom = this.dom[0], obj = {}
dom.querySelectorAll('input, textarea').forEach(i => {
obj[i.getAttribute('name')] = i.value
})
return obj
}
// get FormData
serializeForm() {
let dom = this.dom[0], form = new FormData()
dom.querySelectorAll('input, textarea').forEach(i => {
form.append(i.getAttribute('name'), i.value)
})
return form
}
2018-04-16更新
Dom获取
// parent
parent() {
return $(this.dom[0].parentNode)
}
// siblings
siblings() {
let dom = this.dom[0]
var a = [];
var p = dom.parentNode.children;
for (var i = 0, pl = p.length; i < pl; i++) {
if (p[i] !== dom) a.push(p[i]);
}
// console.log(Array.isArray(a))
return $(a)
}
遍历
// each
each(callback) {
// this.dom.forEach(i => {
// // callback.bind(i)()
// callback.call(i, null)
// })
this.dom.forEach(i => {
callback($(i))
})
}基于ES6的tinyJquery的更多相关文章
- 一个基于ES6+webpack的vue小demo
上一篇文章<一个基于ES5的vue小demo>我们讲了如何用ES5,vue-router做一个小demo,接下来我们来把它变成基于ES6+webpack的demo. 一.环境搭建及代码转换 ...
- 《你不知道的JavaScript -- 上卷》笔记 --- 基于ES6新标准
1.let A:let关键字:将变量绑定到所在的任意作用域 function process(){ //do something } //在这个块中定义的内容完事就可以销毁 { let someRea ...
- 基于ES6模块标准通过webpack打包HTM5项目
本篇主要演示通过webpack打包phaser项目,webpack安装方法在此处就不一一赘述了 经常用phaser来写html5游戏的朋友可能会发现,当游戏场景比较多时,如果都写在一个js文件中那么将 ...
- 基于 es6 的 javascript 实用方法
一.求数字数组的平均数 - 使用 数组的 reduce() 方法将每个值添加到累加器,初始值为0,总和除以数组长度. const average = arr => arr.reduce((acc ...
- 基于Gulp + Browserify构建es6环境下的自动化前端项目
随着React.Angular2.Redux等前沿的前端框架越来越流行,使用webpack.gulp等工具构建前端自动化项目也随之变得越来越重要.鉴于目前业界普遍更流行使用webpack来构建es6( ...
- ES6的一些常用特性
由于公司的前端业务全部基于ES6开发,于是给自己开个小灶补补ES6的一些常用特性.原来打算花两天学习ES6的,结果花了3天才勉强过了一遍阮老师的ES6标准入门(水好深,ES6没学好ES7又来了...) ...
- io.js入门(二)—— 所支持的ES6(上)
io.js的官网上有专门介绍其所支持的ES6特性的页面(点我查看),上面介绍到,相比nodeJS,io.js已从根本上支持了新版V8引擎上所支持的ES6特性,无需再添加任何运行时标志(如 --harm ...
- ES6 Promise 接口
构造函数 new Promise(function(resolve, reject){}); 构造函数接受一个函数(executor)作为参数,该函数在返回 Promise 实例之前被调用.函数的两个 ...
- ES6中的高阶函数:如同 a => b => c 一样简单
作者:Sequoia McDowell 2016年01月16日 ES6来啦!随着越来越多的代码库和思潮引领者开始在他们的代码中使用ES6,以往被认为是"仅需了解"的ES6特性变成了 ...
随机推荐
- spring boot 整合 RabbitMQ 错误
1.错误 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.spr ...
- bash shell:获取当前脚本的绝对路径(pwd/readlink)
有时候,我们需要知道当前执行的输出shell脚本的所在绝对路径,可以用dirname实现. 我们知道 dirname 可以获取一个文件所在的路径,dirname的用处是: 输出已经去除了尾部的”/”字 ...
- MIUI8改MAC
1.手机Root 2.RE文件管理器复制:/data/nvram/APCFG/APRDEB/WIFI 到电脑上 3.如下图用UltraEdit打开WIFI文件修改MAC 4.拷贝修改后的WIFI文件到 ...
- kali安装教程
首先在vm里面新建虚拟机,直接选择典型,然后下一步. 1 2 然后到了这一步,选择中间的安装程序光盘镜像文件,然后去文件里面找你自己下载的镜像,这时候可能系统会出现无法检测此光盘镜像中的操作系 ...
- Java JDK安装教程以及JDK多版本间快速切换配置
原本想自己写一篇,结果在网上发现一篇写的特别好的博文,大家可以去原网址围观浏览加点赞, 只是搬运工+迷弟. 原文地址:https://blog.csdn.net/qq_38916130/article ...
- levelDB SSTable-静态布局结构
SSTable是Bigtable中至关重要的一块,对于LevelDB来说也是如此,对LevelDB的SSTable实现细节的了解也有助于了解Bigtable中一些实现细节. 本节内容主要讲述S ...
- 将查询列表内容保存到excel表格中,并保存到相应的盘中
1.先导入相应的jar包 2.一个小的Demo测试[实体类+测试类:保存excel的方法] Student实体类 public class Student{ private int id; priva ...
- Mysql UPF 安装文档
一.mysql UDF 简介: github地址: http://www.mysqludf.org/lib_mysqludf_preg 二.mysql UDF 下载地址: https://github ...
- 硬核!如何模拟 5w+ 的并发用户?
来自:http://t.cn/ES7KBkW 本文将从负载测试的角度,描述了做一次流畅的5万用户并发测试需要做的事情. 你可以在本文的结尾部分看到讨论的记录. 快速的步骤概要 编写你的脚本 使用JMe ...
- 一键生成APK
傻瓜式的生成APK网址:https://www.appbsl.com/ 第一步 第二步 第三步 第四步