当前位置:首页 > JavaScript

js 实现 jq

2026-03-02 06:36:14JavaScript

使用原生 JavaScript 实现 jQuery 功能

选择器功能

jQuery 的核心功能之一是选择器,可以通过 $()jQuery() 选择 DOM 元素。以下是原生 JavaScript 实现:

function $(selector) {
  return document.querySelectorAll(selector);
}

如果需要更接近 jQuery 的链式调用,可以返回一个包含常用方法的对象:

function $(selector) {
  const elements = document.querySelectorAll(selector);
  return {
    elements,
    css: function(property, value) {
      this.elements.forEach(el => {
        el.style[property] = value;
      });
      return this;
    },
    addClass: function(className) {
      this.elements.forEach(el => {
        el.classList.add(className);
      });
      return this;
    }
  };
}

事件绑定

jQuery 的 on() 方法可以用原生 JavaScript 的 addEventListener 实现:

function $(selector) {
  const elements = document.querySelectorAll(selector);
  return {
    elements,
    on: function(event, callback) {
      this.elements.forEach(el => {
        el.addEventListener(event, callback);
      });
      return this;
    }
  };
}

AJAX 请求

jQuery 的 $.ajax 可以用 fetch API 或 XMLHttpRequest 实现:

function ajax(options) {
  return new Promise((resolve, reject) => {
    const xhr = new XMLHttpRequest();
    xhr.open(options.method || 'GET', options.url);

    if (options.headers) {
      Object.keys(options.headers).forEach(key => {
        xhr.setRequestHeader(key, options.headers[key]);
      });
    }

    xhr.onload = () => {
      if (xhr.status >= 200 && xhr.status < 300) {
        resolve(xhr.response);
      } else {
        reject(xhr.statusText);
      }
    };

    xhr.onerror = () => reject(xhr.statusText);
    xhr.send(options.data);
  });
}

DOM 操作

实现 jQuery 的 append, prepend, remove 等方法:

function $(selector) {
  const elements = document.querySelectorAll(selector);
  return {
    elements,
    append: function(html) {
      this.elements.forEach(el => {
        el.insertAdjacentHTML('beforeend', html);
      });
      return this;
    },
    remove: function() {
      this.elements.forEach(el => {
        el.parentNode.removeChild(el);
      });
    }
  };
}

动画效果

实现简单的 fadeInfadeOut 效果:

function $(selector) {
  const elements = document.querySelectorAll(selector);
  return {
    elements,
    fadeIn: function(duration = 400) {
      this.elements.forEach(el => {
        el.style.opacity = 0;
        el.style.display = 'block';
        let start = null;

        function step(timestamp) {
          if (!start) start = timestamp;
          const progress = timestamp - start;
          const opacity = Math.min(progress / duration, 1);
          el.style.opacity = opacity;
          if (progress < duration) {
            window.requestAnimationFrame(step);
          }
        }

        window.requestAnimationFrame(step);
      });
      return this;
    }
  };
}

完整简易实现

以下是一个更完整的简易 jQuery 实现:

js 实现 jq

function $(selector) {
  const elements = selector instanceof HTMLElement ? 
    [selector] : 
    document.querySelectorAll(selector);

  return {
    elements,

    css(property, value) {
      this.elements.forEach(el => el.style[property] = value);
      return this;
    },

    addClass(className) {
      this.elements.forEach(el => el.classList.add(className));
      return this;
    },

    removeClass(className) {
      this.elements.forEach(el => el.classList.remove(className));
      return this;
    },

    on(event, callback) {
      this.elements.forEach(el => el.addEventListener(event, callback));
      return this;
    },

    html(content) {
      if (content === undefined) {
        return this.elements[0].innerHTML;
      }
      this.elements.forEach(el => el.innerHTML = content);
      return this;
    },

    hide() {
      this.elements.forEach(el => el.style.display = 'none');
      return this;
    },

    show() {
      this.elements.forEach(el => el.style.display = '';
      return this;
    }
  };
}

使用示例

// 选择元素并修改样式
$('.my-class').css('color', 'red').addClass('highlight');

// 事件绑定
$('#my-button').on('click', () => alert('Clicked!'));

// AJAX 请求
ajax({
  url: '/api/data',
  method: 'GET'
}).then(data => {
  console.log(data);
}).catch(error => {
  console.error(error);
});

这些实现展示了如何用原生 JavaScript 模拟 jQuery 的核心功能。实际项目中,可以根据需要扩展更多方法和功能。

标签: jsjq
分享给朋友:

相关文章

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

使用js实现

使用js实现

使用JavaScript实现 JavaScript可以通过Math.random()函数生成随机数,结合其他方法可以实现多种随机数生成需求。 // 生成0到1之间的随机小数 const random…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数: fun…

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…

js验证码的实现

js验证码的实现

验证码的基本实现原理 验证码(CAPTCHA)的核心目标是区分人类用户和自动化程序。JavaScript可用于生成或验证客户端验证码,但需注意纯前端验证可能被绕过,通常需结合后端验证。 纯前端验证码…