js实现jquery
jQuery 核心功能实现
使用原生 JavaScript 实现 jQuery 的核心功能需要理解 DOM 操作、事件处理、AJAX 等基本概念。以下是几个关键功能的实现方式:
选择器功能
function $(selector) {
const elements = document.querySelectorAll(selector);
return {
elements,
css: function(property, value) {
this.elements.forEach(el => el.style[property] = value);
return this;
}
};
}
链式调用实现
通过在每个方法中返回对象本身(return this)实现链式调用:
return {
addClass: function(className) {
this.elements.forEach(el => el.classList.add(className));
return this;
},
removeClass: function(className) {
this.elements.forEach(el => el.classList.remove(className));
return this;
}
}
事件处理实现
事件绑定
return {
on: function(eventName, callback) {
this.elements.forEach(el =>
el.addEventListener(eventName, callback)
);
return this;
},
off: function(eventName, callback) {
this.elements.forEach(el =>
el.removeEventListener(eventName, callback)
);
return this;
}
}
AJAX 功能实现
简化版 AJAX
function ajax(options) {
const xhr = new XMLHttpRequest();
xhr.open(options.method, options.url);
xhr.onload = function() {
if (xhr.status === 200) {
options.success(xhr.response);
} else {
options.error(xhr.statusText);
}
};
xhr.send(options.data);
}
动画效果实现
基础动画
return {
animate: function(properties, duration) {
this.elements.forEach(el => {
Object.keys(properties).forEach(prop => {
el.style.transition = `${prop} ${duration}ms`;
el.style[prop] = properties[prop];
});
});
return this;
}
}
DOM 操作方法
内容操作
return {
html: function(content) {
if (content === undefined) {
return this.elements[0].innerHTML;
}
this.elements.forEach(el => el.innerHTML = content);
return this;
},
text: function(content) {
if (content === undefined) {
return this.elements[0].textContent;
}
this.elements.forEach(el => el.textContent = content);
return this;
}
}
实用工具方法
扩展方法
$.extend = function(target, ...sources) {
sources.forEach(source => {
for (let key in source) {
if (source.hasOwnProperty(key)) {
target[key] = source[key];
}
}
});
return target;
};
这些实现展示了如何用原生 JavaScript 构建类似 jQuery 的功能。完整实现需要考虑更多边界情况和浏览器兼容性问题。现代 JavaScript 已经包含了许多 jQuery 曾提供的便利功能,如 document.querySelectorAll、classList API 等,使得原生开发更加便捷。







