class jQuery {
constructor(selector) {
let splitSelector = selector.match(/([$#])(.*)/);
if (splitSelector) {
if (Object.is(splitSelector[1], '$')) {
this.dom = document.querySelectorAll(splitSelector[2]);
} else if (Object.is(splitSelector[1], '#')) {
this.dom = document.getElementById(splitSelector[2]);
} else {
this.dom = document.querySelectorAll(selector);
}
} else {
this.dom = document.querySelectorAll(selector);
}
}
_isObject(obj) {
const _toString = Object.prototype.toString;
return Object.is(_toString.call(obj), '[object Object]');
}
addClass(className) {
if (className) {
if (this.dom.className) {
let classList = this.dom.className.split(' ');
let classNameList = className.split(' ');
let concatClassList = classList.concat(classNameList);
concatClassList = [...new Set(concatClassList)];
this.dom.className = concatClassList.join(' ');
} else {
this.dom.className = `${className}`;
}
} else {
throw new Error('必须传递参数');
}
return this;
}
removeClass(className) {
if (className) {
let classList = this.dom.className.split(' ');
classList.splice(classList.findIndex(item => Object.is(item, className)), 1);
this.dom.className = classList.join(' ');
} else {
throw new Error('必须传递参数');
}
return this;
}
html(data) {
this.dom.innerHTML = data;
return this;
}
css(params) {
if (params) {
if (this._isObject(params)) {
for (let key in params) {
this.dom.style[key] += params[key];
}
} else {
if (arguments.length != 2) {
throw new Error();
} else {
this.dom.style[arguments[0]] = arguments[1];
}
}
} else {
throw new Error('必须传递参数');
}
return this;
}
}
window.$ = function (selector) {
return new jQuery(selector);
};
// 测试代码
$('#div1').html('你好').addClass('cc dd bb').removeClass('bb').css({'color': '#f00', 'font-size': '20px'});
使用ES6+工厂模式模拟jquery代码
未经允许不得转载:搜云库技术团队 » 使用ES6+工厂模式模拟jquery代码
相关推荐
- Java顺序查找、二分查找
- Java冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序
- jvm:字节码(字节码角度分析a++与--a)
- 数据库连接池:Durid(执行流程、工具类)
- java:面向接口编程(解耦)
- jvm:字节码执行流程
- jvm:类文件结构(魔数、版本、常量池)
- HashMap:源代码(构造方法、put、resize、get、remove、replace)
- 多线程:生产者消费者(管程法、信号灯法)
- 多线程:锁(死锁、Lock锁、线程池)
- 多线程:(synchronized方法、synchronized块、JUC)
- 多线程:线程不安全案例(买票、银行取钱、集合)
- 多线程:(优先级、守护线程)
- 多线程(线程的状态、终止、休眠、礼让、合并)
- 多线程:多线程的应用(网图下载、模拟售票、龟兔赛跑)
- jvm调优(新生代、老年代调优)