原文地址: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的更多相关文章

  1. 一个基于ES6+webpack的vue小demo

    上一篇文章<一个基于ES5的vue小demo>我们讲了如何用ES5,vue-router做一个小demo,接下来我们来把它变成基于ES6+webpack的demo. 一.环境搭建及代码转换 ...

  2. 《你不知道的JavaScript -- 上卷》笔记 --- 基于ES6新标准

    1.let A:let关键字:将变量绑定到所在的任意作用域 function process(){ //do something } //在这个块中定义的内容完事就可以销毁 { let someRea ...

  3. 基于ES6模块标准通过webpack打包HTM5项目

    本篇主要演示通过webpack打包phaser项目,webpack安装方法在此处就不一一赘述了 经常用phaser来写html5游戏的朋友可能会发现,当游戏场景比较多时,如果都写在一个js文件中那么将 ...

  4. 基于 es6 的 javascript 实用方法

    一.求数字数组的平均数 - 使用 数组的 reduce() 方法将每个值添加到累加器,初始值为0,总和除以数组长度. const average = arr => arr.reduce((acc ...

  5. 基于Gulp + Browserify构建es6环境下的自动化前端项目

    随着React.Angular2.Redux等前沿的前端框架越来越流行,使用webpack.gulp等工具构建前端自动化项目也随之变得越来越重要.鉴于目前业界普遍更流行使用webpack来构建es6( ...

  6. ES6的一些常用特性

    由于公司的前端业务全部基于ES6开发,于是给自己开个小灶补补ES6的一些常用特性.原来打算花两天学习ES6的,结果花了3天才勉强过了一遍阮老师的ES6标准入门(水好深,ES6没学好ES7又来了...) ...

  7. io.js入门(二)—— 所支持的ES6(上)

    io.js的官网上有专门介绍其所支持的ES6特性的页面(点我查看),上面介绍到,相比nodeJS,io.js已从根本上支持了新版V8引擎上所支持的ES6特性,无需再添加任何运行时标志(如 --harm ...

  8. ES6 Promise 接口

    构造函数 new Promise(function(resolve, reject){}); 构造函数接受一个函数(executor)作为参数,该函数在返回 Promise 实例之前被调用.函数的两个 ...

  9. ES6中的高阶函数:如同 a => b => c 一样简单

    作者:Sequoia McDowell 2016年01月16日 ES6来啦!随着越来越多的代码库和思潮引领者开始在他们的代码中使用ES6,以往被认为是"仅需了解"的ES6特性变成了 ...

随机推荐

  1. shader例子

    1.水波涟漪:https://zhuanlan.zhihu.com/p/47204844 2.shaderToy转unity: https://zhuanlan.zhihu.com/p/5228708 ...

  2. 应用安全-Web安全-SSRF攻防

    原理 服务器: IP:.XX.191.14 nc -l -p 客户端: http://xx.map.xx.com/maps/services/thumbnails?width=215&heig ...

  3. java枚举详解

    枚举的本质是类,枚举是用来构建常量数据结构的模板(初学者可以以此方式理解: public static final X=xxx),枚举的使用增强了程序的健壮性,在引用一个不存在的枚举值的时候,编译器会 ...

  4. MD5加密 和 自定义加密解密

    public class EncryptString { /// <summary> /// MD5加密 /// </summary> /// <param name=& ...

  5. linux 阿里云 centos7 环境下安装easymock(一)

    一.说一说Easy-mock的使用场景和优点:1.Easy Mock 是一个可视化,并且能快速生成 模拟数据 的持久化服务,2.基于 Swagger 创建项目,以节省手动创建接口的时间,这点也是我搭建 ...

  6. 洛谷 P2024 [NOI2001]食物链(种类并查集,加权并查集)

    传送门 解题思路 加权并查集: 什么是加权并查集? 就是记录着每个节点到它的父亲的信息(权值等). 难点:在路径压缩和合并节点时把本节点到父亲的权值转化为到根节点的权值 怎么转化呢? 每道题都不一样Q ...

  7. javascript基础总汇

    ## javaScript是什么:1.JavaScript 运行在客户端(浏览器)的编程语言2.用来给HTML网页增加动态功能3.用来给HTML网页增加动态功能.4.Netscape在最初将其脚本语言 ...

  8. EF6 MySQL错误之“Specified key was too long; max key length is 767 bytes”

    由于 MySQL Innodb 引擎表索引字段长度的限制为 767 字节,因此对于多字节字符集的大字段(或者多字段组合索引),创建索引会出现上面的错误. 以 utf8mb4 字符集 字符串类型字段为例 ...

  9. 12、前端知识点--MVVM模式

    1.MVVM与MVC的区别是什么? 在MVC里,View是可以直接访问Model的!从而,View里会包含Model信息,不可避免的还要包括一些业务逻辑. MVC模型关注的是Model的不变,所以,在 ...

  10. 《快学scala》读书笔记(1)

    第一章 基础 1.安装scala解释器 (1)scala-2.12.1.msi (2)配置环境变量:SCALA_HOME = D:\Program Files\scala Path= %SCALA_H ...