自己实现一个类似 jQuery 的函数库
假如我们有一个需求,需要给元素添加样式类,使用原生的JS很容易搞定。
1 抽取函数
function addClass(node, className){
node.classList.add(className)
}
// 使用
var element = document.querySelector('#div1')
addClass(element, 'active')
2 引入命名空间
function addClass(node, className){
node.classList.add(className)
}
var dom = {}
dom.addClass = addClass
// 使用
var element = document.querySelector('#div1')
dom.addClass(element, 'active')
3 把 Node 放在前面
1. 使用原型, 侵入式
Node.prototype.addClass = function(className){
this.classList.add(className)
}
// 使用
var element = document.querySelector('#div1')
element.addClass('active')
2.使用构造函数,非侵入式
function Node2(node) {
return {
element: node,
addClass: function(className) {
node.classList.add(className)
}
}
}
var element = document.querySelector('#div1')
var node2 = Node2(element)
node2.addClass('active')
4 完成简化版的 jQuery
将构造函数Node2
的名称替换成 jQuery
,
function jQuery(node) {
return {
element: node,
addClass: function(className) {
node.classList.add(className)
}
}
}
var element = document.querySelector('#div1')
var node2 = jQuery(element)
node2.addClass('active')
// 给一个别名 $
window.$ = jQuery;
// 将上面的代码合并成一行后,是不是已经很像了
$(document.querySelector('#div1')).addClass('active')
5 继续优化,支持多个元素
window.jQuery = function(nodeOrSelector) {
var nodes = {}
// 检测传递的是元素还是一个选择器
if (typeof nodeOrSelector === 'string') {
var temps = document.querySelectorAll(nodeOrSelector); //伪数组
for (let i = 0; i < temps.length; i++) {
nodes[i] = temps[i]
}
nodes.length = temps.length
} else if(nodeOrSelector instanceof Node){
nodes = {
0: nodeOrSelector,
length: 1
}
}
nodes.addClass = function(className) {
for (let i = 0; i < nodes.length; i++) {
nodes[i].classList.add(className)
}
}
nodes.getText = function(){
var texts = []
for (let i = 0; i < nodes.length; i++) {
texts.push(nodes[i].textContent)
}
return texts.join('')
}
nodes.setText = function(text){
for (let i = 0; i < nodes.length; i++) {
nodes[i].textContent = text
}
}
return nodes;
}
window.$ = jQuery
自己实现一个类似 jQuery 的函数库的更多相关文章
- 封装一个类似jquery的ajax方法
//封装一个类似jquery的ajax方法,当传入参数,就可以发送ajax请求 //参数格式如下{ // type:"get"/"post", // dataT ...
- 构建一个类jq的函数库
jqfree core var $ = function(selector, context) { return new $.fn.init(selector, context); }; $.fn = ...
- Jquery Easing函数库
从jQuery API 文档中可以知道,jQuery自定义动画的函数.animate( properties [, duration] [, easing] [, complete] )有四个参数: ...
- Mysql 没有nvl()函数,却有一个类似功能的函数ifnull()
今天自己无聊写了看了一个查询需求随手写了一个sql语句,发现竟然不能运行,MySQL报[Err] 1305 - FUNCTION ceshi.nvl does not exist的错.才意识到自己写的 ...
- 做一个类似JQuery获取DOM对象的$()
在dom操作时,有时根据id获取单个对象.有时根据className获取多个对象.平常可能我们用两个函数来实现这两个功能.不过我将它们整合了一下,目前使用情况良好,函数如下: view source ...
- underscore.js 一个强大的js函数库
Underscore提供的100多个函数,主要涉及对Collection.Object.Array.Function的操作: Collections(集合) each, map, reduce, re ...
- 手动模拟一个类似jquery的ajax请求
var $ = { parms:function(obj){ var str = ''; for(var k in obj){ str +=k+'='+obj[k]+'&'; } str = ...
- 如何制作一个类似jquery插件的vue插件
vue拿来写插件,会不会太那啥? 请跟我念,"不会,符合业务需求才是你的老板最想要的." 如何封装一个可以全局调用的vue插件 其原理其实相当简单,通过new Vue(vueCom ...
- 为开发者准备的 Android 函数库(2016 年版)
转载:http://www.androidchina.net/5922.html第三方函数库(译者注:包括第三方提供的 SDK,开源函数库)以惊人的方式助力着 Android 开发,借助这些其他开发人 ...
随机推荐
- Ansible自动化运维工具(1)
1. Ansible的架构 Ansible的帮助文档: http://www.ansible.com.cn/index.html 2. YAML语言简介 基本规则 列表(list, [, , , .. ...
- thinkphp model
模型样板 <?php namespace app\model; use think\Db; use think\Model; class Admin extends Model { //表名 p ...
- 利用xcode Build生成模拟器运行包
真机只能运行.ipa包 模拟器上只能运行.app包 xcode中生成.app包步骤: 启动xcode IDE,打开gigold源码工程 [project]——[gigold]——[Basic]:修改V ...
- C#:XML操作类
写的一个XML操作类,包括读取/插入/修改/删除. using System; using System.Data; using System.Configuration; using System. ...
- eclipse 4.5 离线安装mybatis generator1.3.6卡在Install New Software的解决方法
转载:https://blog.csdn.net/ssshen14/article/details/80004459 离线插件 下载:https://github.com/mybatis/genera ...
- python 使用xlsxwriter的方法属性
http://xlsxwriter.readthedocs.io/format.html
- Python网络爬虫-爬取微博热搜
微博热搜的爬取较为简单,我只是用了lxml和requests两个库 url=https://s.weibo.com/top/summary?Refer=top_hot&topnav=1& ...
- Linux下安装mysql教程
Linux下安装mysql MySQL官网:https://dev.mysql.com/downloads/mysql/ 到mysql官网下载mysql编译好的二进制安装包,在下载页面Select ...
- 前后端分离及React的一些研究
前言 在对英才网企业线前端不断的完善过程中,我们尝试进行了前后端分离,引入Node环境.以及在使用React的过程中,自行开发DOM渲染框架,解决React兼容低版本IE的问题,在这个过程中,我们有了 ...
- SQL element_at函数
库里有类似josn形式的字符串数据attr{"a":"123","b":"234"."c":&quo ...