当前位置:首页 > JavaScript

js 实现 jq

2026-01-31 15:29:14JavaScript

实现 jQuery 核心功能

jQuery 是一个流行的 JavaScript 库,简化了 DOM 操作、事件处理和 Ajax 请求。以下是一个简化版的 jQuery 实现,涵盖核心功能。

选择器功能

function $(selector) {
  if (selector.startsWith('<')) {
    // 创建元素
    const tagName = selector.replace(/[<>]/g, '')
    return document.createElement(tagName)
  } else {
    // 选择元素
    const elements = document.querySelectorAll(selector)
    return elements.length === 1 ? elements[0] : Array.from(elements)
  }
}

DOM 操作方法

$.fn = {
  html: function(content) {
    if (content === undefined) {
      return this.innerHTML
    }
    this.innerHTML = content
    return this
  },

  text: function(content) {
    if (content === undefined) {
      return this.textContent
    }
    this.textContent = content
    return this
  },

  attr: function(name, value) {
    if (value === undefined) {
      return this.getAttribute(name)
    }
    this.setAttribute(name, value)
    return this
  }
}

// 将方法附加到选择结果上
function $(selector) {
  const elements = document.querySelectorAll(selector)
  const result = elements.length === 1 ? elements[0] : Array.from(elements)

  Object.keys($.fn).forEach(method => {
    if (result[method]) return
    if (Array.isArray(result)) {
      result[method] = function(...args) {
        return result.map(el => $.fn[method].apply(el, args))
      }
    } else {
      result[method] = function(...args) {
        return $.fn[method].apply(result, args)
      }
    }
  })

  return result
}

事件处理

$.fn.on = function(eventName, handler) {
  this.addEventListener(eventName, handler)
  return this
}

$.fn.off = function(eventName, handler) {
  this.removeEventListener(eventName, handler)
  return this
}

Ajax 功能

$.ajax = function(options) {
  const xhr = new XMLHttpRequest()
  xhr.open(options.method || 'GET', options.url, true)

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

  xhr.onload = function() {
    if (xhr.status >= 200 && xhr.status < 300) {
      options.success && options.success(xhr.response)
    } else {
      options.error && options.error(xhr.statusText)
    }
  }

  xhr.onerror = function() {
    options.error && options.error(xhr.statusText)
  }

  xhr.send(options.data)
}

链式调用支持

所有方法都返回 this,支持链式调用:

js 实现 jq

$('#myElement')
  .html('Hello')
  .attr('data-test', 'value')
  .on('click', () => console.log('Clicked'))

动画基础实现

$.fn.animate = function(properties, duration, callback) {
  const element = this
  const startTime = performance.now()
  const startValues = {}

  Object.keys(properties).forEach(prop => {
    startValues[prop] = parseFloat(getComputedStyle(element)[prop])
  })

  function step(currentTime) {
    const elapsed = currentTime - startTime
    const progress = Math.min(elapsed / duration, 1)

    Object.keys(properties).forEach(prop => {
      const start = startValues[prop]
      const end = parseFloat(properties[prop])
      const current = start + (end - start) * progress
      element.style[prop] = current + (prop === 'opacity' ? '' : 'px')
    })

    if (progress < 1) {
      requestAnimationFrame(step)
    } else if (callback) {
      callback()
    }
  }

  requestAnimationFrame(step)
  return this
}

使用方法示例

// 选择元素
const elements = $('.my-class')

// 修改内容
$('#myId').html('<p>New content</p>')

// 添加事件
$('#btn').on('click', () => alert('Clicked!'))

// Ajax 请求
$.ajax({
  url: '/api/data',
  method: 'GET',
  success: data => console.log(data),
  error: err => console.error(err)
})

// 动画效果
$('.box').animate({
  left: '100px',
  opacity: 0.5
}, 1000)

这个实现包含了 jQuery 的核心功能,包括选择器、DOM 操作、事件处理、Ajax 和动画。可以根据需要进一步扩展功能。

标签: jsjq
分享给朋友:

相关文章

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 通过监听鼠标事件(mousedown、mousemove、mouseup)实现拖拽功能。以下是核心代码逻辑: const draggableElement = document.…

js实现轮播图

js实现轮播图

基础轮播图实现 使用HTML、CSS和JavaScript实现一个简单的自动轮播图。HTML结构包含一个容器和多个图片项。 <div class="slider"> <div…

js实现延迟

js实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个回…

js类实现

js类实现

使用类实现 JavaScript 功能 在 JavaScript 中,类(Class)是一种语法糖,基于原型继承机制。通过 class 关键字可以更直观地定义对象模板。 基本类定义 class…

js实现防洪

js实现防洪

防抖(Debounce)实现 防抖的核心思想是在事件触发后延迟执行回调函数,若在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口调整等场景。 function debounce(f…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: fun…